Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / room / RoomDoor.cs
@小李xl 小李xl on 19 Apr 2023 2 KB 优化房间门

using Godot;

/// <summary>
/// 房间的门, 门有两种状态, 打开和关闭
/// </summary>
[RegisterActivity(ActivityIdPrefix.Other + "0001", ResourcePath.prefab_map_RoomDoor_tscn)]
public partial class RoomDoor : ActivityObject
{
    /// <summary>
    /// 门的方向
    /// </summary>
    public DoorDirection Direction => _door.Direction;
    
    /// <summary>
    /// 门是否关闭
    /// </summary>
    public bool IsClose { get; private set; }
    
    private RoomDoorInfo _door;

    /// <summary>
    /// 初始化调用
    /// </summary>
    public void Init(RoomDoorInfo doorInfo)
    {
        _door = doorInfo;
        OpenDoor();

        switch (doorInfo.Direction)
        {
            case DoorDirection.E:
                AnimatedSprite.Frame = 1;
                AnimatedSprite.Position = new Vector2(0, -8);
                Collision.Position = Vector2.Zero;
                var collisionShape = (RectangleShape2D)Collision.Shape;
                collisionShape.Size = new Vector2(14, 32);
                break;
            case DoorDirection.W:
                AnimatedSprite.Frame = 1;
                AnimatedSprite.Position = new Vector2(0, -8);
                Collision.Position = Vector2.Zero;
                var collisionShape2 = (RectangleShape2D)Collision.Shape;
                collisionShape2.Size = new Vector2(14, 32);
                break;
            case DoorDirection.S:
                AnimatedSprite.Position = new Vector2(0, -8);
                break;
            case DoorDirection.N:
                ZIndex = GameConfig.MiddleMapLayer;
                AnimatedSprite.Position = new Vector2(0, -8);
                break;
        }
    }

    /// <summary>
    /// 打开当前的门
    /// </summary>
    public void OpenDoor()
    {
        IsClose = false;
        Visible = false;
        Collision.Disabled = true;
        if (_door.Navigation != null)
        {
            _door.Navigation.OpenNavigationNode.Enabled = true;
            _door.Navigation.OpenNavigationNode.Visible = true;
            _door.Navigation.CloseNavigationNode.Enabled = false;
            _door.Navigation.CloseNavigationNode.Visible = false;
        }
    }

    /// <summary>
    /// 关闭当前的门
    /// </summary>
    public void CloseDoor()
    {
        IsClose = true;
        Visible = true;
        Collision.Disabled = false;
        if (_door.Navigation != null)
        {
            _door.Navigation.OpenNavigationNode.Enabled = false;
            _door.Navigation.OpenNavigationNode.Visible = false;
            _door.Navigation.CloseNavigationNode.Enabled = true;
            _door.Navigation.CloseNavigationNode.Visible = true;
        }
    }
}