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] public bool UseYSort;
  15.  
  16. /// <summary>
  17. /// 物体初始缩放
  18. /// </summary>
  19. [Export] public Vector2 Scale = Vector2.One;
  20. /// <summary>
  21. /// 当前物体所属物理层
  22. /// </summary>
  23. [Export(PropertyHint.Layers2dPhysics)] public uint CollisionLayer;
  24.  
  25. /// <summary>
  26. /// 当前物体扫描的物理层
  27. /// </summary>
  28. [Export(PropertyHint.Layers2dPhysics)] public uint CollisionMask;
  29.  
  30. /// <summary>
  31. /// 当前物体渲染层级
  32. /// </summary>
  33. [Export] public int ZIndex;
  34.  
  35. public override void _Ready()
  36. {
  37. #if TOOLS
  38. // 在工具模式下创建的 template 节点自动创建对应的必要子节点
  39. if (Engine.EditorHint)
  40. {
  41. var parent = GetParent();
  42. if (parent != null)
  43. {
  44. //寻找 owner
  45. Node owner;
  46. if (parent.Owner != null)
  47. {
  48. owner = parent.Owner;
  49. }
  50. else if (Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
  51. {
  52. owner = this;
  53. }
  54. else
  55. {
  56. owner = parent;
  57. }
  58.  
  59. var sprite = GetNodeOrNull<Sprite>("ShadowSprite");
  60. //创建Shadow
  61. if (sprite == null)
  62. {
  63. sprite = new Sprite();
  64. sprite.Name = "ShadowSprite";
  65. var material =
  66. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  67. material.SetShaderParam("blend", new Color(0, 0, 0, 0.47058824F));
  68. material.SetShaderParam("schedule", 1);
  69. sprite.Material = material;
  70. AddChild(sprite);
  71. sprite.Owner = owner;
  72. }
  73. else if (sprite.Material == null)
  74. {
  75. var material =
  76. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  77. material.SetShaderParam("blend", new Color(0, 0, 0, 0.47058824F));
  78. material.SetShaderParam("schedule", 1);
  79. sprite.Material = material;
  80. }
  81.  
  82. var animatedSprite = GetNodeOrNull<AnimatedSprite>("AnimatedSprite");
  83. //创建 Sprite
  84. if (animatedSprite == null)
  85. {
  86. animatedSprite = new AnimatedSprite();
  87. animatedSprite.Name = "AnimatedSprite";
  88. var material =
  89. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  90. material.SetShaderParam("blend", new Color(1, 1, 1, 1));
  91. material.SetShaderParam("schedule", 0);
  92. animatedSprite.Material = material;
  93. AddChild(animatedSprite);
  94. animatedSprite.Owner = owner;
  95. }
  96. else if (animatedSprite.Material == null)
  97. {
  98. var material =
  99. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  100. material.SetShaderParam("blend", new Color(1, 1, 1, 1));
  101. material.SetShaderParam("schedule", 0);
  102. animatedSprite.Material = material;
  103. }
  104.  
  105. //创建Collision
  106. if (GetNodeOrNull("Collision") == null)
  107. {
  108. var co = new CollisionShape2D();
  109. co.Name = "Collision";
  110. AddChild(co);
  111. co.Owner = owner;
  112. }
  113.  
  114. //创建AnimationPlayer
  115. if (GetNodeOrNull("AnimationPlayer") == null)
  116. {
  117. var ap = new AnimationPlayer();
  118. ap.Name = "AnimationPlayer";
  119. ap.AddAnimation("RESET",
  120. ResourceManager.Load<Animation>(
  121. "res://addons/dungeonShooting_plugin/ActivityObjectReset.tres", false));
  122. ap.AddAnimation("hit",
  123. ResourceManager.Load<Animation>(
  124. "res://addons/dungeonShooting_plugin/ActivityObjectHit.tres", false));
  125. AddChild(ap);
  126. ap.Owner = owner;
  127. }
  128. }
  129. }
  130. #endif
  131. }
  132. }
  133. }