Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / map / DoorAreaInfo.cs
  1.  
  2. using System.Text.Json.Serialization;
  3. using Godot;
  4.  
  5. /// <summary>
  6. /// 用于描述门生成区域
  7. /// </summary>
  8. public class DoorAreaInfo
  9. {
  10. /// <summary>
  11. /// 门方向
  12. /// </summary>
  13. [JsonInclude]
  14. public DoorDirection Direction;
  15. /// <summary>
  16. /// 起始位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
  17. /// </summary>
  18. [JsonInclude]
  19. public float Start = 0;
  20. /// <summary>
  21. /// 结束位置, 相对 tilemap 的横/纵轴原点, 单位: 像素
  22. /// </summary>
  23. [JsonInclude]
  24. public float End = 16;
  25. /// <summary>
  26. /// 起始点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
  27. /// </summary>
  28. public Vector2 StartPosition;
  29. /// <summary>
  30. /// 结束点坐标, 该坐标为模板场景的世界坐标, 单位: 像素, 不参与序列化与反序列化
  31. /// </summary>
  32. public Vector2 EndPosition;
  33.  
  34. public DoorAreaInfo()
  35. {
  36. }
  37.  
  38. public DoorAreaInfo(DoorDirection direction, float start, float end)
  39. {
  40. Direction = direction;
  41. Start = start;
  42. End = end;
  43. }
  44. /// <summary>
  45. /// 自动计算 startPosition 和 endPosition
  46. /// </summary>
  47. public void CalcPosition(Vector2 rootPosition, Vector2 rootSize)
  48. {
  49. switch (Direction)
  50. {
  51. case DoorDirection.E:
  52. StartPosition = new Vector2(rootPosition.X, rootPosition.Y + Start);
  53. EndPosition = new Vector2(rootPosition.X, rootPosition.Y + End);
  54. break;
  55. case DoorDirection.W:
  56. StartPosition = new Vector2(rootPosition.X + rootSize.X, rootPosition.Y + Start);
  57. EndPosition = new Vector2(rootPosition.X + rootSize.X, rootPosition.Y + End);
  58. break;
  59. case DoorDirection.S:
  60. StartPosition = new Vector2(rootPosition.X + Start, rootPosition.Y + rootSize.Y);
  61. EndPosition = new Vector2(rootPosition.X + End, rootPosition.Y + rootSize.Y);
  62. break;
  63. case DoorDirection.N:
  64. StartPosition = new Vector2(rootPosition.X + Start, rootPosition.Y);
  65. EndPosition = new Vector2(rootPosition.X + End, rootPosition.Y);
  66. break;
  67. }
  68. }
  69. }