Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreateRoom / MapEditorCreateRoomPanel.cs
  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. //key: 组名称, value: 选项索引
  12. private Dictionary<string, int> _groupMap = new Dictionary<string, int>();
  13.  
  14. public override void OnCreateUi()
  15. {
  16. //初始化选项
  17. var groupButton = S_GroupSelect.Instance;
  18. var index = 0;
  19. foreach (var mapGroupInfo in MapProjectManager.GroupData)
  20. {
  21. var id = index++;
  22. _groupMap.Add(mapGroupInfo.Value.Name, id);
  23. groupButton.AddItem(mapGroupInfo.Value.Name, id);
  24. }
  25.  
  26. var selectButton = S_TypeSelect.Instance;
  27. var roomTypes = Enum.GetValues<DungeonRoomType>();
  28. for (var i = 0; i < roomTypes.Length; i++)
  29. {
  30. var item = roomTypes[i];
  31. var text = DungeonManager.DungeonRoomTypeToDescribeString(item);
  32. selectButton.AddItem(text, (int)item);
  33. }
  34. }
  35.  
  36. /// <summary>
  37. /// 设置选中的组
  38. /// </summary>
  39. public void SetSelectGroup(string groupName)
  40. {
  41. if (_groupMap.TryGetValue(groupName, out var value))
  42. {
  43. S_GroupSelect.Instance.Selected = value;
  44. return;
  45. }
  46. S_GroupSelect.Instance.Selected = -1;
  47. }
  48.  
  49. /// <summary>
  50. /// 设置选中的房间类型
  51. /// </summary>
  52. public void SetSelectType(int index)
  53. {
  54. S_TypeSelect.Instance.Selected = index;
  55. }
  56.  
  57. /// <summary>
  58. /// 填完数据后获取数据对象, 并进行验证, 如果验证失败, 则返回 null
  59. /// </summary>
  60. public MapProjectManager.MapRoomInfo GetRoomInfo()
  61. {
  62. var mapRoomInfo = new MapProjectManager.MapRoomInfo();
  63. mapRoomInfo.Name = S_RoomNameInput.Instance.Text;
  64. //检查名称是否合规
  65. if (!Regex.IsMatch(mapRoomInfo.Name, "^\\w+$"))
  66. {
  67. EditorTipsManager.ShowTips("错误", "房间名称'" + mapRoomInfo.Name + "'不符合名称约束, 房间名称只允许包含大小写字母和数字!");
  68. return null;
  69. }
  70. var groupIndex = S_GroupSelect.Instance.Selected;
  71. foreach (var pair in _groupMap)
  72. {
  73. if (pair.Value == groupIndex)
  74. {
  75. mapRoomInfo.Group = pair.Key;
  76. }
  77. }
  78.  
  79. if (mapRoomInfo.Group == null)
  80. {
  81. EditorTipsManager.ShowTips("错误", "组名错误!");
  82. return null;
  83. }
  84. var typeIndex = S_TypeSelect.Instance.Selected;
  85. mapRoomInfo.RoomType = (DungeonRoomType)typeIndex;
  86. //检测是否有同名房间
  87. var temp = mapRoomInfo.Group + "/" + DungeonManager.DungeonRoomTypeToString(mapRoomInfo.RoomType) + "/" + mapRoomInfo.Name;
  88. var path = GameConfig.RoomTileDir + temp;
  89. var dir = new DirectoryInfo(path);
  90. if (dir.Exists && dir.GetFiles().Length > 0)
  91. {
  92. EditorTipsManager.ShowTips("错误", $"已经有相同路径的房间了!\n路径: {temp}");
  93. return null;
  94. }
  95. return mapRoomInfo;
  96. }
  97. }