Newer
Older
DungeonShooting / DungeonShooting_Godot / addons / dungeonShooting_plugin / ActivityObjectTemplate.cs
@小李xl 小李xl on 16 Nov 2022 5 KB 路径标记点
  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. // 在工具模式下创建的 template 节点自动创建对应的必要子节点
  38. if (Engine.EditorHint)
  39. {
  40. var parent = GetParent();
  41. if (parent != null)
  42. {
  43. //寻找 owner
  44. Node owner;
  45. if (parent.Owner != null)
  46. {
  47. owner = parent.Owner;
  48. }
  49. else if (Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
  50. {
  51. owner = this;
  52. }
  53. else
  54. {
  55. owner = parent;
  56. }
  57.  
  58. var sprite = GetNodeOrNull<Sprite>("ShadowSprite");
  59. //创建Shadow
  60. if (sprite == null)
  61. {
  62. sprite = new Sprite();
  63. sprite.Name = "ShadowSprite";
  64. var material =
  65. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  66. material.SetShaderParam("blend", new Color(0, 0, 0, 0.47058824F));
  67. material.SetShaderParam("schedule", 1);
  68. sprite.Material = material;
  69. AddChild(sprite);
  70. sprite.Owner = owner;
  71. }
  72. else if (sprite.Material == null)
  73. {
  74. var material =
  75. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  76. material.SetShaderParam("blend", new Color(0, 0, 0, 0.47058824F));
  77. material.SetShaderParam("schedule", 1);
  78. sprite.Material = material;
  79. }
  80.  
  81. var animatedSprite = GetNodeOrNull<AnimatedSprite>("AnimatedSprite");
  82. //创建 Sprite
  83. if (animatedSprite == null)
  84. {
  85. animatedSprite = new AnimatedSprite();
  86. animatedSprite.Name = "AnimatedSprite";
  87. var material =
  88. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  89. material.SetShaderParam("blend", new Color(1, 1, 1, 1));
  90. material.SetShaderParam("schedule", 0);
  91. animatedSprite.Material = material;
  92. AddChild(animatedSprite);
  93. animatedSprite.Owner = owner;
  94. }
  95. else if (animatedSprite.Material == null)
  96. {
  97. var material =
  98. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  99. material.SetShaderParam("blend", new Color(1, 1, 1, 1));
  100. material.SetShaderParam("schedule", 0);
  101. animatedSprite.Material = material;
  102. }
  103.  
  104. //创建Collision
  105. if (GetNodeOrNull("Collision") == null)
  106. {
  107. var co = new CollisionShape2D();
  108. co.Name = "Collision";
  109. AddChild(co);
  110. co.Owner = owner;
  111. }
  112.  
  113. //创建AnimationPlayer
  114. if (GetNodeOrNull("AnimationPlayer") == null)
  115. {
  116. var ap = new AnimationPlayer();
  117. ap.Name = "AnimationPlayer";
  118. ap.AddAnimation("RESET",
  119. ResourceManager.Load<Animation>(
  120. "res://addons/dungeonShooting_plugin/ActivityObjectReset.tres", false));
  121. ap.AddAnimation("hit",
  122. ResourceManager.Load<Animation>(
  123. "res://addons/dungeonShooting_plugin/ActivityObjectHit.tres", false));
  124. AddChild(ap);
  125. ap.Owner = owner;
  126. }
  127. }
  128. }
  129. }
  130. }
  131. }