- using Godot;
- /// <summary>
- /// 房间的门, 门有两种状态, 打开和关闭
- /// </summary>
- [Tool]
- public partial class RoomDoor : ActivityObject
- {
- /// <summary>
- /// 门的方向
- /// </summary>
- public DoorDirection Direction => _door.Direction;
- /// <summary>
- /// 门是否关闭
- /// </summary>
- public bool IsClose { get; private set; }
- private RoomDoorInfo _door;
- private bool waitDisabledCollision = false;
- private AnimatedSprite2D _animatedDown;
- public override void OnInit()
- {
- AnimatedSprite.AnimationFinished += OnAnimationFinished;
- }
- /// <summary>
- /// 初始化调用
- /// </summary>
- public void Init(RoomDoorInfo doorInfo)
- {
- _door = doorInfo;
- IsClose = false;
- if (doorInfo.Direction == DoorDirection.E || doorInfo.Direction == DoorDirection.W)
- {
- _animatedDown = GetNode<AnimatedSprite2D>("AnimatedSpriteDown");
- }
- OpenDoorHandler();
- }
- /// <summary>
- /// 打开当前的门
- /// </summary>
- public void OpenDoor()
- {
- IsClose = false;
- //Visible = false;
- waitDisabledCollision = true;
- if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.OpenDoor))
- {
- AnimatedSprite.Play(AnimatorNames.OpenDoor);
- }
- if (_animatedDown != null && _animatedDown.SpriteFrames.HasAnimation(AnimatorNames.OpenDoor))
- {
- _animatedDown.Play(AnimatorNames.OpenDoor);
- }
- }
- /// <summary>
- /// 关闭当前的门
- /// </summary>
- public void CloseDoor()
- {
- IsClose = true;
- //Visible = true;
- Collision.Disabled = false;
- if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.CloseDoor))
- {
- AnimatedSprite.Play(AnimatorNames.CloseDoor);
- }
- if (_animatedDown != null)
- {
- _animatedDown.Visible = false;
- }
- if (Direction == DoorDirection.E || Direction == DoorDirection.W)
- {
- ZIndex = MapLayer.CustomMiddleLayer2;
- }
- }
- private void OnAnimationFinished()
- {
- if (!IsClose && waitDisabledCollision) //开门动画播放完成
- {
- waitDisabledCollision = false;
- if (_animatedDown != null)
- {
- _animatedDown.Visible = true;
- }
- if (Direction == DoorDirection.E || Direction == DoorDirection.W)
- {
- ZIndex = 0;
- }
- OpenDoorHandler();
- }
- }
- private void OpenDoorHandler()
- {
- Collision.Disabled = true;
- //调整门的层级
- //ZIndex = MapLayer.AutoFloorLayer;
- }
- }