Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / ActivityObjectTemplate.cs
  1. using Godot;
  2.  
  3. namespace Plugin
  4. {
  5. /// <summary>
  6. /// ActivityObject 节点模板对象
  7. /// </summary>
  8. [Tool]
  9. public class ActivityObjectTemplate : Node
  10. {
  11. /// <summary>
  12. /// 是否放入 ySort 节点下
  13. /// </summary>
  14. [Export]
  15. public bool UseYSort;
  16. /// <summary>
  17. /// 当前物体所属物理层
  18. /// </summary>
  19. [Export(PropertyHint.Layers2dPhysics)]
  20. public uint CollisionLayer;
  21. /// <summary>
  22. /// 当前物体扫描的物理层
  23. /// </summary>
  24. [Export(PropertyHint.Layers2dPhysics)]
  25. public uint CollisionMask;
  26. /// <summary>
  27. /// 当前物体渲染层级
  28. /// </summary>
  29. [Export]
  30. public int ZIndex;
  31.  
  32. public override void _Ready()
  33. {
  34. // 在工具模式下创建的 template 节点自动创建对应的必要子节点
  35. if (Engine.EditorHint)
  36. {
  37. var parent = GetParent();
  38. if (parent != null)
  39. {
  40. //寻找 owner
  41. Node owner;
  42. if (parent.Owner != null)
  43. {
  44. owner = parent.Owner;
  45. }
  46. else if (Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
  47. {
  48. owner = this;
  49. }
  50. else
  51. {
  52. owner = parent;
  53. }
  54. //创建Shadow
  55. if (GetNodeOrNull("ShadowSprite") == null)
  56. {
  57. var sd = new Sprite();
  58. sd.Name = "ShadowSprite";
  59. sd.Material = ResourceManager.BlendMaterial;
  60. AddChild(sd);
  61. sd.Owner = owner;
  62. }
  63. //创建 Sprite
  64. if (GetNodeOrNull("AnimatedSprite") == null)
  65. {
  66. var sp = new AnimatedSprite();
  67. sp.Name = "AnimatedSprite";
  68. AddChild(sp);
  69. sp.Owner = owner;
  70. }
  71.  
  72. //创建Collision
  73. if (GetNodeOrNull("Collision") == null)
  74. {
  75. var co = new CollisionShape2D();
  76. co.Name = "Collision";
  77. AddChild(co);
  78. co.Owner = owner;
  79. }
  80. }
  81. }
  82. }
  83. }
  84. }