Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / activity / ActivityObjectTemplate.cs
  1. using Godot;
  2.  
  3. /// <summary>
  4. /// ActivityObject 节点模板对象
  5. /// </summary>
  6. [Tool]
  7. public partial class ActivityObjectTemplate : Node
  8. {
  9. // /// <summary>
  10. // /// 默认放入的层级
  11. // /// </summary>
  12. // [Export] public RoomLayerEnum DefaultLayer = RoomLayerEnum.NormalLayer;
  13.  
  14. /// <summary>
  15. /// 物体初始缩放
  16. /// </summary>
  17. [Export] public Vector2 scale = Vector2.One;
  18.  
  19. /// <summary>
  20. /// 当前物体所属物理层
  21. /// </summary>
  22. [Export(PropertyHint.Layers2DPhysics)] public uint collision_layer;
  23.  
  24. /// <summary>
  25. /// 当前物体扫描的物理层
  26. /// </summary>
  27. [Export(PropertyHint.Layers2DPhysics)] public uint collision_mask;
  28.  
  29. /// <summary>
  30. /// 显示状态
  31. /// </summary>
  32. [Export] public bool visible = true;
  33.  
  34. /// <summary>
  35. /// 当前物体渲染层级
  36. /// </summary>
  37. [Export] public int z_index;
  38.  
  39. public override void _Ready()
  40. {
  41. #if TOOLS
  42. // 在工具模式下创建的 template 节点自动创建对应的必要子节点
  43. if (Engine.IsEditorHint())
  44. {
  45. var parent = GetParent();
  46. if (parent != null)
  47. {
  48. //寻找 owner
  49. Node owner;
  50. if (parent.Owner != null)
  51. {
  52. owner = parent.Owner;
  53. }
  54. else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
  55. {
  56. owner = this;
  57. }
  58. else
  59. {
  60. owner = parent;
  61. }
  62.  
  63. var sprite = GetNodeOrNull<Sprite2D>("ShadowSprite");
  64. //创建Shadow
  65. if (sprite == null)
  66. {
  67. sprite = new Sprite2D();
  68. sprite.Name = "ShadowSprite";
  69. sprite.ZIndex = -1;
  70. var material =
  71. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  72. material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
  73. material.SetShaderParameter("schedule", 1);
  74. sprite.Material = material;
  75. AddChild(sprite);
  76. sprite.Owner = owner;
  77. }
  78. else if (sprite.Material == null)
  79. {
  80. var material =
  81. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  82. material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
  83. material.SetShaderParameter("schedule", 1);
  84. sprite.Material = material;
  85. }
  86.  
  87. var animatedSprite = GetNodeOrNull<AnimatedSprite2D>("AnimatedSprite");
  88. //创建 Sprite2D
  89. if (animatedSprite == null)
  90. {
  91. animatedSprite = new AnimatedSprite2D();
  92. animatedSprite.Name = "AnimatedSprite";
  93. var material =
  94. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  95. material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
  96. material.SetShaderParameter("schedule", 0);
  97. animatedSprite.Material = material;
  98. AddChild(animatedSprite);
  99. animatedSprite.Owner = owner;
  100. }
  101. else if (animatedSprite.Material == null)
  102. {
  103. var material =
  104. ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
  105. material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
  106. material.SetShaderParameter("schedule", 0);
  107. animatedSprite.Material = material;
  108. }
  109.  
  110. //创建Collision
  111. if (GetNodeOrNull("Collision") == null)
  112. {
  113. var co = new CollisionShape2D();
  114. co.Name = "Collision";
  115. AddChild(co);
  116. co.Owner = owner;
  117. }
  118. }
  119. }
  120. #endif
  121. }
  122. }