Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / room / RoomDoor.cs
@小李xl 小李xl on 24 Feb 2024 2 KB 调整门位置
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 房间的门, 门有两种状态, 打开和关闭
  6. /// </summary>
  7. [Tool]
  8. public partial class RoomDoor : ActivityObject
  9. {
  10. /// <summary>
  11. /// 门的方向
  12. /// </summary>
  13. public DoorDirection Direction => _door.Direction;
  14. /// <summary>
  15. /// 门是否关闭
  16. /// </summary>
  17. public bool IsClose { get; private set; }
  18. private RoomDoorInfo _door;
  19. private bool waitDisabledCollision = false;
  20. private AnimatedSprite2D _animatedDown;
  21.  
  22. public override void OnInit()
  23. {
  24. AnimatedSprite.AnimationFinished += OnAnimationFinished;
  25. }
  26.  
  27. /// <summary>
  28. /// 初始化调用
  29. /// </summary>
  30. public void Init(RoomDoorInfo doorInfo)
  31. {
  32. _door = doorInfo;
  33. IsClose = false;
  34. if (doorInfo.Direction == DoorDirection.E || doorInfo.Direction == DoorDirection.W)
  35. {
  36. _animatedDown = GetNode<AnimatedSprite2D>("AnimatedSpriteDown");
  37. }
  38.  
  39. OpenDoorHandler();
  40. }
  41.  
  42. /// <summary>
  43. /// 打开当前的门
  44. /// </summary>
  45. public void OpenDoor()
  46. {
  47. IsClose = false;
  48. //Visible = false;
  49. waitDisabledCollision = true;
  50. if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.OpenDoor))
  51. {
  52. AnimatedSprite.Play(AnimatorNames.OpenDoor);
  53. }
  54.  
  55. if (_animatedDown != null && _animatedDown.SpriteFrames.HasAnimation(AnimatorNames.OpenDoor))
  56. {
  57. _animatedDown.Play(AnimatorNames.OpenDoor);
  58. }
  59. }
  60.  
  61. /// <summary>
  62. /// 关闭当前的门
  63. /// </summary>
  64. public void CloseDoor()
  65. {
  66. IsClose = true;
  67. //Visible = true;
  68. Collision.Disabled = false;
  69.  
  70. if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.CloseDoor))
  71. {
  72. AnimatedSprite.Play(AnimatorNames.CloseDoor);
  73. }
  74.  
  75. if (_animatedDown != null)
  76. {
  77. _animatedDown.Visible = false;
  78. }
  79.  
  80. if (Direction == DoorDirection.E || Direction == DoorDirection.W)
  81. {
  82. ZIndex = MapLayer.CustomMiddleLayer2;
  83. }
  84. }
  85.  
  86. private void OnAnimationFinished()
  87. {
  88. if (!IsClose && waitDisabledCollision) //开门动画播放完成
  89. {
  90. waitDisabledCollision = false;
  91. if (_animatedDown != null)
  92. {
  93. _animatedDown.Visible = true;
  94. }
  95.  
  96. if (Direction == DoorDirection.E || Direction == DoorDirection.W)
  97. {
  98. ZIndex = 0;
  99. }
  100. OpenDoorHandler();
  101. }
  102. }
  103.  
  104. private void OpenDoorHandler()
  105. {
  106. Collision.Disabled = true;
  107. //调整门的层级
  108. //ZIndex = MapLayer.AutoFloorLayer;
  109. }
  110. }