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