Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreatePreinstall / MapEditorCreatePreinstallPanel.cs
@小李xl 小李xl on 2 Sep 2023 3 KB 编辑地牢房间
  1. using System.Collections.Generic;
  2. using System.Text.RegularExpressions;
  3. using Godot;
  4.  
  5. namespace UI.MapEditorCreatePreinstall;
  6.  
  7. public partial class MapEditorCreatePreinstallPanel : MapEditorCreatePreinstall
  8. {
  9. private RoomPreinstallInfo _roomPreinstallInfo;
  10. private DungeonRoomType _roomType;
  11.  
  12. /// <summary>
  13. /// 初始化房间预设数据, 用于创建预设
  14. /// </summary>
  15. public void InitData(DungeonRoomType roomType)
  16. {
  17. _roomType = roomType;
  18. }
  19. /// <summary>
  20. /// 初始化房间预设数据, 用于编辑预设
  21. /// </summary>
  22. public void InitData(DungeonRoomType roomType, RoomPreinstallInfo preinstallInfo)
  23. {
  24. InitData(roomType);
  25. _roomPreinstallInfo = preinstallInfo;
  26. S_PreinstallNameInput.Instance.Text = preinstallInfo.Name;
  27. S_WeightInput.Instance.Value = preinstallInfo.Weight;
  28. S_RemarkInput.Instance.Text = preinstallInfo.Remark;
  29. }
  30.  
  31. /// <summary>
  32. /// 填完数据后创建数据进行验证并创建数据对象, 如果验证失败, 则返回null
  33. /// </summary>
  34. public RoomPreinstallInfo GetRoomPreinstall(List<RoomPreinstallInfo> roomPreinstalls)
  35. {
  36. RoomPreinstallInfo data;
  37. if (_roomPreinstallInfo != null) //编辑数据
  38. {
  39. data = _roomPreinstallInfo;
  40. data.Name = S_PreinstallNameInput.Instance.Text;
  41. //检查名称是否合规
  42. if (string.IsNullOrEmpty(data.Name))
  43. {
  44. EditorWindowManager.ShowTips("错误", "预设名称不能为空!");
  45. return null;
  46. }
  47. var index = roomPreinstalls.FindIndex(preinstall => preinstall.Name == data.Name && preinstall != _roomPreinstallInfo);
  48. if (index >= 0)
  49. {
  50. EditorWindowManager.ShowTips("错误", "当前房间已经存在预设名称'" + data.Name + "', 请使用其他名称!");
  51. return null;
  52. }
  53. data.Remark = S_RemarkInput.Instance.Text;
  54. data.Weight = (int)S_WeightInput.Instance.Value;
  55. }
  56. else //创建数据
  57. {
  58. data = new RoomPreinstallInfo();
  59. data.Name = S_PreinstallNameInput.Instance.Text;
  60. //检查名称是否合规
  61. if (string.IsNullOrEmpty(data.Name))
  62. {
  63. EditorWindowManager.ShowTips("错误", "预设名称不能为空!");
  64. return null;
  65. }
  66.  
  67. var index = roomPreinstalls.FindIndex(preinstall => preinstall.Name == data.Name);
  68. if (index >= 0)
  69. {
  70. EditorWindowManager.ShowTips("错误", "当前房间已经存在预设名称'" + data.Name + "', 请使用其他名称!");
  71. return null;
  72. }
  73.  
  74. data.Remark = S_RemarkInput.Instance.Text;
  75. data.Weight = (int)S_WeightInput.Instance.Value;
  76. //预加载波
  77. data.InitWaveList();
  78. CreateSpecialMark(data.WaveList);
  79. }
  80. return data;
  81. }
  82.  
  83. //创建特殊标记
  84. private void CreateSpecialMark(List<List<MarkInfo>> dataWaveList)
  85. {
  86. if (_roomType == DungeonRoomType.Inlet) //初始房间
  87. {
  88. var preloading = dataWaveList[0];
  89. //玩家标记
  90. var markInfo = new MarkInfo();
  91. markInfo.Position = new SerializeVector2();
  92. markInfo.Size = new SerializeVector2();
  93. markInfo.SpecialMarkType = SpecialMarkType.BirthPoint;
  94. markInfo.MarkList = new List<MarkInfoItem>();
  95. preloading.Add(markInfo);
  96. }
  97. }
  98. }