Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / activity / ActivityObjectTemplate.cs
using Godot;

/// <summary>
/// ActivityObject 节点模板对象
/// </summary>
[Tool]
public partial class ActivityObjectTemplate : Node
{
    // /// <summary>
    // /// 默认放入的层级
    // /// </summary>
    // [Export] public RoomLayerEnum DefaultLayer = RoomLayerEnum.NormalLayer;

    /// <summary>
    /// 物体初始缩放
    /// </summary>
    [Export] public Vector2 scale = Vector2.One;

    /// <summary>
    /// 当前物体所属物理层
    /// </summary>
    [Export(PropertyHint.Layers2DPhysics)] public uint collision_layer;

    /// <summary>
    /// 当前物体扫描的物理层
    /// </summary>
    [Export(PropertyHint.Layers2DPhysics)] public uint collision_mask;

    /// <summary>
    /// 显示状态
    /// </summary>
    [Export] public bool visible = true;

    /// <summary>
    /// 当前物体渲染层级
    /// </summary>
    [Export] public int z_index;

    public override void _Ready()
    {
#if TOOLS
        // 在工具模式下创建的 template 节点自动创建对应的必要子节点
        if (Engine.IsEditorHint())
        {
            var parent = GetParent();
            if (parent != null)
            {
                //寻找 owner
                Node owner;
                if (parent.Owner != null)
                {
                    owner = parent.Owner;
                }
                else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
                {
                    owner = this;
                }
                else
                {
                    owner = parent;
                }

                var sprite = GetNodeOrNull<Sprite2D>("ShadowSprite");
                //创建Shadow
                if (sprite == null)
                {
                    sprite = new Sprite2D();
                    sprite.Name = "ShadowSprite";
                    sprite.ZIndex = -1;
                    var material =
                        ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
                    material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
                    material.SetShaderParameter("schedule", 1);
                    sprite.Material = material;
                    AddChild(sprite);
                    sprite.Owner = owner;
                }
                else if (sprite.Material == null)
                {
                    var material =
                        ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
                    material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
                    material.SetShaderParameter("schedule", 1);
                    sprite.Material = material;
                }

                var animatedSprite = GetNodeOrNull<AnimatedSprite2D>("AnimatedSprite");
                //创建 Sprite2D
                if (animatedSprite == null)
                {
                    animatedSprite = new AnimatedSprite2D();
                    animatedSprite.Name = "AnimatedSprite";
                    var material =
                        ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
                    material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
                    material.SetShaderParameter("schedule", 0);
                    animatedSprite.Material = material;
                    AddChild(animatedSprite);
                    animatedSprite.Owner = owner;
                }
                else if (animatedSprite.Material == null)
                {
                    var material =
                        ResourceManager.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres, false);
                    material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
                    material.SetShaderParameter("schedule", 0);
                    animatedSprite.Material = material;
                }

                //创建Collision
                if (GetNodeOrNull("Collision") == null)
                {
                    var co = new CollisionShape2D();
                    co.Name = "Collision";
                    AddChild(co);
                    co.Owner = owner;
                }
            }
        }
#endif
    }
}