Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / mapEditor / MapEditorPanel.cs
@小李xl 小李xl on 22 Aug 2023 4 KB 完成保存与未保存状态
  1. using Godot;
  2.  
  3. namespace UI.MapEditor;
  4.  
  5. public partial class MapEditorPanel : MapEditor
  6. {
  7. private string _title;
  8. public override void OnCreateUi()
  9. {
  10. S_TabContainer.Instance.SetTabTitle(0, "地图");
  11. S_TabContainer.Instance.SetTabTitle(1, "对象");
  12. //S_MapLayer.Instance.Init(S_MapLayer);
  13. S_Left.Instance.Resized += OnMapViewResized;
  14. S_Back.Instance.Pressed += OnBackClick;
  15. S_Save.Instance.Pressed += OnSave;
  16. }
  17.  
  18. public override void OnShowUi()
  19. {
  20. OnMapViewResized();
  21. }
  22.  
  23. /// <summary>
  24. /// 加载地牢, 返回是否加载成功
  25. /// </summary>
  26. public bool LoadMap(DungeonRoomSplit roomSplit)
  27. {
  28. _title = "正在编辑:" + roomSplit.RoomInfo.RoomName;
  29. S_Title.Instance.Text = _title;
  30. return S_TileMap.Instance.Load(roomSplit);
  31. }
  32.  
  33. /// <summary>
  34. /// 设置标题是否带 *
  35. /// </summary>
  36. public void SetTitleDirty(bool value)
  37. {
  38. if (value)
  39. {
  40. S_Title.Instance.Text = _title + "*";
  41. }
  42. else
  43. {
  44. S_Title.Instance.Text = _title;
  45. }
  46. }
  47. //调整地图显示区域大小
  48. private void OnMapViewResized()
  49. {
  50. S_SubViewport.Instance.Size = S_Left.Instance.Size.AsVector2I() - new Vector2I(4, 4);
  51. }
  52. //保存地图数据
  53. private void OnSave()
  54. {
  55. S_TileMap.Instance.TryRunCheckHandler();
  56. //有错误的数据
  57. if (S_TileMap.Instance.HasError)
  58. {
  59. EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果现在保存并退出,运行游戏将不会刷出该房间!\n是否仍要保存?", (v) =>
  60. {
  61. if (v)
  62. {
  63. S_TileMap.Instance.TriggerSave();
  64. }
  65. });
  66. }
  67. else
  68. {
  69. S_TileMap.Instance.TriggerSave();
  70. }
  71. }
  72.  
  73. //点击返回
  74. private void OnBackClick()
  75. {
  76. S_TileMap.Instance.TryRunCheckHandler();
  77. if (S_TileMap.Instance.IsDirty) //有修改的数据, 不能直接退出, 需要询问用户是否保存
  78. {
  79. EditorWindowManager.ShowConfirm("提示", "当前房间修改的数据还未保存,是否退出编辑房间?",
  80. "保存并退出", "直接退出", "取消"
  81. , index =>
  82. {
  83. if (index == 0) //保存并退出
  84. {
  85. if (S_TileMap.Instance.HasError) //有错误
  86. {
  87. EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果现在保存并退出,运行游戏将不会刷出该房间!\n是否仍要保存?", (v) =>
  88. {
  89. if (v)
  90. {
  91. S_TileMap.Instance.TriggerSave();
  92. //返回上一个Ui
  93. OpenPrevUi();
  94. }
  95. else
  96. {
  97. //返回上一个Ui
  98. OpenPrevUi();
  99. }
  100. });
  101. }
  102. else //没有错误
  103. {
  104. S_TileMap.Instance.TriggerSave();
  105. //返回上一个Ui
  106. OpenPrevUi();
  107. }
  108. }
  109. else if (index == 1)
  110. {
  111. //返回上一个Ui
  112. OpenPrevUi();
  113. }
  114. });
  115. }
  116. else //没有修改数据
  117. {
  118. if (S_TileMap.Instance.HasError) //有错误
  119. {
  120. EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果不解决错误就退出,运行游戏将不会刷出该房间!\n是否仍要退出?", (v) =>
  121. {
  122. if (v)
  123. {
  124. //返回上一个Ui
  125. OpenPrevUi();
  126. }
  127. });
  128. }
  129. else //没有错误
  130. {
  131. //返回上一个Ui
  132. OpenPrevUi();
  133. }
  134. }
  135. }
  136. }