Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreateRoom / MapEditorCreateRoomPanel.cs
@小李xl 小李xl on 25 Jan 2024 4 KB 生成商店, 目前仅用于占位
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text.RegularExpressions;
  5. using Godot;
  6.  
  7. namespace UI.MapEditorCreateRoom;
  8.  
  9. public partial class MapEditorCreateRoomPanel : MapEditorCreateRoom
  10. {
  11. //编辑模式下的原数据
  12. private DungeonRoomSplit _roomSplit;
  13. //key: 组名称, value: 选项索引
  14. private Dictionary<string, int> _groupMap = new Dictionary<string, int>();
  15.  
  16. public override void OnCreateUi()
  17. {
  18. //初始化选项
  19. var groupButton = S_GroupSelect.Instance;
  20. var index = 0;
  21. foreach (var mapGroupInfo in MapProjectManager.GroupMap)
  22. {
  23. var id = index++;
  24. var groupGroupName = mapGroupInfo.Value.GroupName;
  25. _groupMap.Add(groupGroupName, id);
  26. groupButton.AddItem(groupGroupName, id);
  27. }
  28.  
  29. var selectButton = S_TypeSelect.Instance;
  30. var roomTypes = Enum.GetValues<DungeonRoomType>();
  31. for (var i = 0; i < roomTypes.Length; i++)
  32. {
  33. var item = roomTypes[i];
  34. if (item == DungeonRoomType.None) continue;
  35. var text = DungeonManager.DungeonRoomTypeToDescribeString(item);
  36. selectButton.AddItem(text, (int)item);
  37. }
  38. }
  39.  
  40. /// <summary>
  41. /// 初始化数据, 用于编辑房间
  42. /// </summary>
  43. /// <param name="roomSplit"></param>
  44. public void InitEditData(DungeonRoomSplit roomSplit)
  45. {
  46. _roomSplit = roomSplit;
  47. //房间名称
  48. S_RoomNameInput.Instance.Text = roomSplit.RoomInfo.RoomName;
  49. //权重
  50. S_WeightInput.Instance.Value = roomSplit.RoomInfo.Weight;
  51. //备注
  52. S_RemarkInput.Instance.Text = roomSplit.RoomInfo.Remark;
  53. //所在的组
  54. SetSelectGroup(roomSplit.RoomInfo.GroupName);
  55. //房间类型
  56. SetSelectType((int)roomSplit.RoomInfo.RoomType);
  57. //不可编辑
  58. S_RoomNameInput.Instance.Editable = false;
  59. S_GroupSelect.Instance.Disabled = true;
  60. S_TypeSelect.Instance.Disabled = true;
  61. }
  62. /// <summary>
  63. /// 设置选中的组
  64. /// </summary>
  65. public void SetSelectGroup(string groupName)
  66. {
  67. if (_groupMap.TryGetValue(groupName, out var value))
  68. {
  69. S_GroupSelect.Instance.Selected = value;
  70. return;
  71. }
  72. S_GroupSelect.Instance.Selected = -1;
  73. }
  74.  
  75. /// <summary>
  76. /// 设置选中的房间类型
  77. /// </summary>
  78. public void SetSelectType(int index)
  79. {
  80. S_TypeSelect.Instance.Selected = index;
  81. }
  82.  
  83. /// <summary>
  84. /// 填完数据后获取数据对象, 并进行验证, 如果验证失败, 则返回 null
  85. /// </summary>
  86. public DungeonRoomSplit GetRoomInfo()
  87. {
  88. if (_roomSplit != null) //修改数据
  89. {
  90. var roomInfo = _roomSplit.RoomInfo;
  91. roomInfo.Remark = S_RemarkInput.Instance.Text;
  92. roomInfo.Weight = (int)S_WeightInput.Instance.Value;
  93. return _roomSplit;
  94. }
  95. else
  96. {
  97. var roomInfo = new DungeonRoomInfo();
  98. roomInfo.RoomName = S_RoomNameInput.Instance.Text;
  99. roomInfo.Remark = S_RemarkInput.Instance.Text;
  100. roomInfo.RoomType = (DungeonRoomType)S_TypeSelect.Instance.GetSelectedId();
  101. roomInfo.Weight = (int)S_WeightInput.Instance.Value;
  102.  
  103. //检查名称是否合规
  104. if (string.IsNullOrEmpty(roomInfo.RoomName))
  105. {
  106. EditorWindowManager.ShowTips("错误", "房间名称不能为空!");
  107. return null;
  108. }
  109. var groupIndex = S_GroupSelect.Instance.Selected;
  110. foreach (var pair in _groupMap)
  111. {
  112. if (pair.Value == groupIndex)
  113. {
  114. roomInfo.GroupName = pair.Key;
  115. }
  116. }
  117.  
  118. if (roomInfo.GroupName == null)
  119. {
  120. EditorWindowManager.ShowTips("错误", "组名错误!");
  121. return null;
  122. }
  123. //检测是否有同名房间
  124. var temp = roomInfo.GroupName + "/" + DungeonManager.DungeonRoomTypeToString(roomInfo.RoomType) + "/" + roomInfo.RoomName;
  125. var dirPath = MapProjectManager.CustomMapPath + temp;
  126. var dir = new DirectoryInfo(dirPath);
  127. if (dir.Exists && dir.GetFiles().Length > 0)
  128. {
  129. EditorWindowManager.ShowTips("错误", $"已经有相同路径的房间了!\n路径: {temp}");
  130. return null;
  131. }
  132. roomInfo.InitData();
  133.  
  134. var roomSplit = new DungeonRoomSplit();
  135. roomSplit.ErrorType = RoomErrorType.Empty;
  136. roomSplit.Path = dirPath;
  137. roomSplit.RoomInfo = roomInfo;
  138.  
  139. var tileInfo = new DungeonTileInfo();
  140. tileInfo.InitData();
  141.  
  142. roomSplit.TileInfo = tileInfo;
  143. roomSplit.Preinstall = new List<RoomPreinstallInfo>();
  144. return roomSplit;
  145. }
  146. }
  147. }