using Godot; namespace UI.MapEditor; public partial class MapEditorPanel : MapEditor { private string _title; public override void OnCreateUi() { S_TabContainer.Instance.SetTabTitle(0, "地图"); S_TabContainer.Instance.SetTabTitle(1, "对象"); //S_MapLayer.Instance.Init(S_MapLayer); S_Left.Instance.Resized += OnMapViewResized; S_Back.Instance.Pressed += OnBackClick; S_Save.Instance.Pressed += OnSave; } public override void OnShowUi() { OnMapViewResized(); } /// <summary> /// 加载地牢, 返回是否加载成功 /// </summary> public bool LoadMap(DungeonRoomSplit roomSplit) { _title = "正在编辑:" + roomSplit.RoomInfo.RoomName; S_Title.Instance.Text = _title; return S_TileMap.Instance.Load(roomSplit); } /// <summary> /// 设置标题是否带 * /// </summary> public void SetTitleDirty(bool value) { if (value) { S_Title.Instance.Text = _title + "*"; } else { S_Title.Instance.Text = _title; } } //调整地图显示区域大小 private void OnMapViewResized() { S_SubViewport.Instance.Size = S_Left.Instance.Size.AsVector2I() - new Vector2I(4, 4); } //保存地图数据 private void OnSave() { S_TileMap.Instance.TryRunCheckHandler(); //有错误的数据 if (S_TileMap.Instance.HasError) { EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果现在保存并退出,运行游戏将不会刷出该房间!\n是否仍要保存?", (v) => { if (v) { S_TileMap.Instance.TriggerSave(); } }); } else { S_TileMap.Instance.TriggerSave(); } } //点击返回 private void OnBackClick() { S_TileMap.Instance.TryRunCheckHandler(); if (S_TileMap.Instance.IsDirty) //有修改的数据, 不能直接退出, 需要询问用户是否保存 { EditorWindowManager.ShowConfirm("提示", "当前房间修改的数据还未保存,是否退出编辑房间?", "保存并退出", "直接退出", "取消" , index => { if (index == 0) //保存并退出 { if (S_TileMap.Instance.HasError) //有错误 { EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果现在保存并退出,运行游戏将不会刷出该房间!\n是否仍要保存?", (v) => { if (v) { S_TileMap.Instance.TriggerSave(); //返回上一个Ui OpenPrevUi(); } else { //返回上一个Ui OpenPrevUi(); } }); } else //没有错误 { S_TileMap.Instance.TriggerSave(); //返回上一个Ui OpenPrevUi(); } } else if (index == 1) { //返回上一个Ui OpenPrevUi(); } }); } else //没有修改数据 { if (S_TileMap.Instance.HasError) //有错误 { EditorWindowManager.ShowConfirm("提示", "当前房间地块存在绘制错误,如果不解决错误就退出,运行游戏将不会刷出该房间!\n是否仍要退出?", (v) => { if (v) { //返回上一个Ui OpenPrevUi(); } }); } else //没有错误 { //返回上一个Ui OpenPrevUi(); } } } }