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. /// 当前物体所属物理层
  13. /// </summary>
  14. [Export(PropertyHint.Layers2dPhysics)]
  15. public uint CollisionLayer;
  16. /// <summary>
  17. /// 当前物体扫描的物理层
  18. /// </summary>
  19. [Export(PropertyHint.Layers2dPhysics)]
  20. public uint CollisionMask;
  21. /// <summary>
  22. /// 当前物体渲染层级
  23. /// </summary>
  24. [Export]
  25. public int ZIndex;
  26.  
  27. public override void _Ready()
  28. {
  29. // 在工具模式下创建的 template 节点自动创建对应的必要子节点
  30. if (Engine.EditorHint)
  31. {
  32. var parent = GetParent();
  33. if (parent != null)
  34. {
  35. //寻找 owner
  36. Node owner;
  37. if (parent.Owner != null)
  38. {
  39. owner = parent.Owner;
  40. }
  41. else if (Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
  42. {
  43. owner = this;
  44. }
  45. else
  46. {
  47. owner = parent;
  48. }
  49. //创建Shadow
  50. if (GetNodeOrNull("ShadowSprite") == null)
  51. {
  52. var sd = new Sprite();
  53. sd.Name = "ShadowSprite";
  54. sd.Material = ResourceManager.ShadowMaterial;
  55. AddChild(sd);
  56. sd.Owner = owner;
  57. }
  58. //创建 Sprite
  59. if (GetNodeOrNull("AnimatedSprite") == null)
  60. {
  61. var sp = new AnimatedSprite();
  62. sp.Name = "AnimatedSprite";
  63. AddChild(sp);
  64. sp.Owner = owner;
  65. }
  66.  
  67. //创建Collision
  68. if (GetNodeOrNull("Collision") == null)
  69. {
  70. var co = new CollisionShape2D();
  71. co.Name = "Collision";
  72. AddChild(co);
  73. co.Owner = owner;
  74. }
  75. }
  76. }
  77. }
  78. }
  79. }