Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / room / RoomDoor.cs
@小李xl 小李xl on 19 Apr 2023 2 KB 优化房间门
  1.  
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 房间的门, 门有两种状态, 打开和关闭
  6. /// </summary>
  7. [RegisterActivity(ActivityIdPrefix.Other + "0001", ResourcePath.prefab_map_RoomDoor_tscn)]
  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.  
  20. /// <summary>
  21. /// 初始化调用
  22. /// </summary>
  23. public void Init(RoomDoorInfo doorInfo)
  24. {
  25. _door = doorInfo;
  26. OpenDoor();
  27.  
  28. switch (doorInfo.Direction)
  29. {
  30. case DoorDirection.E:
  31. AnimatedSprite.Frame = 1;
  32. AnimatedSprite.Position = new Vector2(0, -8);
  33. Collision.Position = Vector2.Zero;
  34. var collisionShape = (RectangleShape2D)Collision.Shape;
  35. collisionShape.Size = new Vector2(14, 32);
  36. break;
  37. case DoorDirection.W:
  38. AnimatedSprite.Frame = 1;
  39. AnimatedSprite.Position = new Vector2(0, -8);
  40. Collision.Position = Vector2.Zero;
  41. var collisionShape2 = (RectangleShape2D)Collision.Shape;
  42. collisionShape2.Size = new Vector2(14, 32);
  43. break;
  44. case DoorDirection.S:
  45. AnimatedSprite.Position = new Vector2(0, -8);
  46. break;
  47. case DoorDirection.N:
  48. ZIndex = GameConfig.MiddleMapLayer;
  49. AnimatedSprite.Position = new Vector2(0, -8);
  50. break;
  51. }
  52. }
  53.  
  54. /// <summary>
  55. /// 打开当前的门
  56. /// </summary>
  57. public void OpenDoor()
  58. {
  59. IsClose = false;
  60. Visible = false;
  61. Collision.Disabled = true;
  62. if (_door.Navigation != null)
  63. {
  64. _door.Navigation.OpenNavigationNode.Enabled = true;
  65. _door.Navigation.OpenNavigationNode.Visible = true;
  66. _door.Navigation.CloseNavigationNode.Enabled = false;
  67. _door.Navigation.CloseNavigationNode.Visible = false;
  68. }
  69. }
  70.  
  71. /// <summary>
  72. /// 关闭当前的门
  73. /// </summary>
  74. public void CloseDoor()
  75. {
  76. IsClose = true;
  77. Visible = true;
  78. Collision.Disabled = false;
  79. if (_door.Navigation != null)
  80. {
  81. _door.Navigation.OpenNavigationNode.Enabled = false;
  82. _door.Navigation.OpenNavigationNode.Visible = false;
  83. _door.Navigation.CloseNavigationNode.Enabled = true;
  84. _door.Navigation.CloseNavigationNode.Visible = true;
  85. }
  86. }
  87. }