Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditorCreateRoom / MapEditorCreateRoomPanel.cs
@小李xl 小李xl on 6 Aug 2023 4 KB 更新Ui生成器
  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.GroupMap)
  20. {
  21. var id = index++;
  22. var groupGroupName = mapGroupInfo.Value.GroupName;
  23. _groupMap.Add(groupGroupName, id);
  24. groupButton.AddItem(groupGroupName, id);
  25. }
  26.  
  27. var selectButton = S_TypeSelect.Instance;
  28. var roomTypes = Enum.GetValues<DungeonRoomType>();
  29. for (var i = 0; i < roomTypes.Length; i++)
  30. {
  31. var item = roomTypes[i];
  32. var text = DungeonManager.DungeonRoomTypeToDescribeString(item);
  33. selectButton.AddItem(text, (int)item);
  34. }
  35. }
  36.  
  37. /// <summary>
  38. /// 设置选中的组
  39. /// </summary>
  40. public void SetSelectGroup(string groupName)
  41. {
  42. if (_groupMap.TryGetValue(groupName, out var value))
  43. {
  44. S_GroupSelect.Instance.Selected = value;
  45. return;
  46. }
  47. S_GroupSelect.Instance.Selected = -1;
  48. }
  49.  
  50. /// <summary>
  51. /// 设置选中的房间类型
  52. /// </summary>
  53. public void SetSelectType(int index)
  54. {
  55. S_TypeSelect.Instance.Selected = index;
  56. }
  57.  
  58. /// <summary>
  59. /// 填完数据后获取数据对象, 并进行验证, 如果验证失败, 则返回 null
  60. /// </summary>
  61. public DungeonRoomSplit GetRoomInfo()
  62. {
  63. var roomInfo = new DungeonRoomInfo();
  64. roomInfo.RoomName = S_RoomNameInput.Instance.Text;
  65. roomInfo.Remark = S_RemarkInput.Instance.Text;
  66. //检查名称是否合规
  67. if (string.IsNullOrEmpty(roomInfo.RoomName))
  68. {
  69. EditorWindowManager.ShowTips("错误", "房间名称不能为空!");
  70. return null;
  71. }
  72. var groupIndex = S_GroupSelect.Instance.Selected;
  73. foreach (var pair in _groupMap)
  74. {
  75. if (pair.Value == groupIndex)
  76. {
  77. roomInfo.GroupName = pair.Key;
  78. }
  79. }
  80.  
  81. if (roomInfo.GroupName == null)
  82. {
  83. EditorWindowManager.ShowTips("错误", "组名错误!");
  84. return null;
  85. }
  86. roomInfo.RoomType = (DungeonRoomType)S_TypeSelect.Instance.GetSelectedId();
  87. //检测是否有同名房间
  88. var temp = roomInfo.GroupName + "/" + DungeonManager.DungeonRoomTypeToString(roomInfo.RoomType) + "/" + roomInfo.RoomName;
  89. var dirPath = MapProjectManager.CustomMapPath + temp;
  90. var dir = new DirectoryInfo(dirPath);
  91. if (dir.Exists && dir.GetFiles().Length > 0)
  92. {
  93. EditorWindowManager.ShowTips("错误", $"已经有相同路径的房间了!\n路径: {temp}");
  94. return null;
  95. }
  96.  
  97. roomInfo.Weight = (int)S_WeightInput.Instance.Value;
  98. roomInfo.Size = new SerializeVector2();
  99. roomInfo.Position = new SerializeVector2();
  100. roomInfo.DoorAreaInfos = new List<DoorAreaInfo>();
  101.  
  102. var roomSplit = new DungeonRoomSplit();
  103. roomSplit.RoomPath = dirPath + "/" + MapProjectManager.GetRoomInfoConfigName(roomInfo.RoomName);
  104. roomSplit.RoomInfo = roomInfo;
  105.  
  106. var tileInfo = new DungeonTileInfo();
  107. tileInfo.NavigationList = new List<NavigationPolygonData>();
  108. tileInfo.Floor = new List<int>();
  109. tileInfo.Middle = new List<int>();
  110. tileInfo.Top = new List<int>();
  111. roomSplit.TilePath = dirPath + "/" + MapProjectManager.GetTileInfoConfigName(roomInfo.RoomName);
  112. roomSplit.TileInfo = tileInfo;
  113.  
  114. roomSplit.PreinstallPath = dirPath + "/" + MapProjectManager.GetRoomPreinstallConfigName(roomInfo.RoomName);
  115. roomSplit.Preinstall = new List<RoomPreinstall>();
  116. return roomSplit;
  117. }
  118. }