diff --git a/DungeonShooting_Godot/prefab/ui/EditorTools.tscn b/DungeonShooting_Godot/prefab/ui/EditorTools.tscn index 27e37f9..1089ea7 100644 --- a/DungeonShooting_Godot/prefab/ui/EditorTools.tscn +++ b/DungeonShooting_Godot/prefab/ui/EditorTools.tscn @@ -166,9 +166,10 @@ [node name="Confirm" type="ConfirmationDialog" parent="."] initial_position = 1 -size = Vector2i(200, 124) +size = Vector2i(350, 200) unresizable = true [node name="Tips" type="AcceptDialog" parent="."] initial_position = 1 +size = Vector2i(350, 200) unresizable = true diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorCreateRoom.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorCreateRoom.tscn new file mode 100644 index 0000000..eb89af9 --- /dev/null +++ b/DungeonShooting_Godot/prefab/ui/MapEditorCreateRoom.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=3 uid="uid://bfx6u04j0pbnu"] + +[ext_resource type="Script" path="res://src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs" id="1_dep3f"] + +[node name="MapEditorCreateRoom" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource("1_dep3f") +Layer = 3 diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import index b20c9a6..c36be94 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://chd2vtesap5cf" -path="res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex" +path="res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/enemy0001.png" -dest_files=["res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex"] +source_file="res://resource/sprite/role/enemy0001/Enemy0001.png" +dest_files=["res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"] [params] diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import index 56388a2..d563acf 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://d2f55lu60x64i" -path="res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex" +path="res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" -dest_files=["res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex"] +source_file="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png" +dest_files=["res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"] [params] diff --git a/DungeonShooting_Godot/src/framework/ui/UiManager.cs b/DungeonShooting_Godot/src/framework/ui/UiManager.cs index a9b5a61..15c8aa5 100644 --- a/DungeonShooting_Godot/src/framework/ui/UiManager.cs +++ b/DungeonShooting_Godot/src/framework/ui/UiManager.cs @@ -109,15 +109,34 @@ } /// - /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承 + /// 根据Ui资源路径创建Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承
+ /// 该函数不会自动打开Ui, 需要手动调用 ShowUi() 函数来显示Ui ///
- public static UiBase OpenUi(string uiName) + public static UiBase CreateUi(string uiName) { var packedScene = ResourceManager.Load("res://" + GameConfig.UiPrefabDir + uiName + ".tscn"); var uiBase = packedScene.Instantiate(); var canvasLayer = GetUiLayer(uiBase.Layer); canvasLayer.AddChild(uiBase); uiBase.OnCreateUi(); + return uiBase; + } + + /// + /// 根据Ui资源路径创建Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承
+ /// 该函数不会自动打开Ui, 需要手动调用 ShowUi() 函数来显示Ui + ///
+ public static T CreateUi(string uiName) where T : UiBase + { + return (T)CreateUi(uiName); + } + + /// + /// 根据Ui资源路径打开Ui, 并返回Ui实例, 该Ui资源的场景根节点必须继承 + /// + public static UiBase OpenUi(string uiName) + { + var uiBase = CreateUi(uiName); uiBase.ShowUi(); return uiBase; } diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs index faf53ee..4dfc545 100644 --- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs +++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs @@ -52,6 +52,7 @@ public const string prefab_ui_Loading_tscn = "res://prefab/ui/Loading.tscn"; public const string prefab_ui_Main_tscn = "res://prefab/ui/Main.tscn"; public const string prefab_ui_MapEditor_tscn = "res://prefab/ui/MapEditor.tscn"; + public const string prefab_ui_MapEditorCreateRoom_tscn = "res://prefab/ui/MapEditorCreateRoom.tscn"; public const string prefab_ui_MapEditorProject_tscn = "res://prefab/ui/MapEditorProject.tscn"; public const string prefab_ui_MapEditorTools_tscn = "res://prefab/ui/MapEditorTools.tscn"; public const string prefab_ui_RoomUI_tscn = "res://prefab/ui/RoomUI.tscn"; diff --git a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs index 5144e3b..f1444e5 100644 --- a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs +++ b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs @@ -11,6 +11,7 @@ public const string Loading = "Loading"; public const string Main = "Main"; public const string MapEditor = "MapEditor"; + public const string MapEditorCreateRoom = "MapEditorCreateRoom"; public const string MapEditorProject = "MapEditorProject"; public const string MapEditorTools = "MapEditorTools"; public const string RoomUI = "RoomUI"; @@ -218,6 +219,46 @@ } /// + /// 打开 MapEditorCreateRoom, 并返回UI实例 + /// + public static UI.MapEditorCreateRoom.MapEditorCreateRoomPanel Open_MapEditorCreateRoom() + { + return OpenUi(UiName.MapEditorCreateRoom); + } + + /// + /// 隐藏 MapEditorCreateRoom 的所有实例 + /// + public static void Hide_MapEditorCreateRoom() + { + var uiInstance = Get_MapEditorCreateRoom_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.HideUi(); + } + } + + /// + /// 销毁 MapEditorCreateRoom 的所有实例 + /// + public static void Dispose_MapEditorCreateRoom() + { + var uiInstance = Get_MapEditorCreateRoom_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.DisposeUi(); + } + } + + /// + /// 获取所有 MapEditorCreateRoom 的实例, 如果没有实例, 则返回一个空数组 + /// + public static UI.MapEditorCreateRoom.MapEditorCreateRoomPanel[] Get_MapEditorCreateRoom_Instance() + { + return GetUiInstance(nameof(UI.MapEditorCreateRoom.MapEditorCreateRoom)); + } + + /// /// 打开 MapEditorProject, 并返回UI实例 /// public static UI.MapEditorProject.MapEditorProjectPanel Open_MapEditorProject() diff --git a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs index 98bbdf7..7e9eaf8 100644 --- a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs @@ -186,7 +186,7 @@ /// 当窗口关闭时的回调 public void ShowTips(string title, string message, Action onClose = null) { - ShowTips(title, message, 200, 124, onClose); + ShowTips(title, message, 350, 200, onClose); } /// @@ -224,7 +224,7 @@ /// 当窗口关闭时的回调, 参数如果为 true 表示点击了确定按钮 public void ShowConfirm(string title, string message, Action onClose = null) { - ShowConfirm(title, message, 200, 124, onClose); + ShowConfirm(title, message, 350, 200, onClose); } /// diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoom.cs b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoom.cs new file mode 100644 index 0000000..ff99457 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoom.cs @@ -0,0 +1,14 @@ +namespace UI.MapEditorCreateRoom; + +/// +/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失 +/// +public abstract partial class MapEditorCreateRoom : UiBase +{ + + public MapEditorCreateRoom() : base(nameof(MapEditorCreateRoom)) + { + } + + +} diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs new file mode 100644 index 0000000..81fcff8 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/mapEditorCreateRoom/MapEditorCreateRoomPanel.cs @@ -0,0 +1,36 @@ +using Godot; + +namespace UI.MapEditorCreateRoom; + +public partial class MapEditorCreateRoomPanel : MapEditorCreateRoom +{ + + public override void OnCreateUi() + { + //S_ConfirmationDialog.Instance.Title = "创建地牢房间"; + } + + public override void OnShowUi() + { + //S_ConfirmationDialog.Instance.VisibilityChanged += OnVisibilityChanged; + } + + public override void OnHideUi() + { + //S_ConfirmationDialog.Instance.VisibilityChanged -= OnVisibilityChanged; + } + + public override void OnDisposeUi() + { + + } + + private void OnVisibilityChanged() + { + //if (!S_ConfirmationDialog.Instance.Visible) + { + GD.Print("关闭UI"); + DisposeUi(); + } + } +} diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs index d5d8d93..c9d36d6 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditorProject/MapEditorProjectPanel.cs @@ -42,9 +42,17 @@ public override void OnShowUi() { + S_GroupSearchButton.Instance.Pressed += OnSearchButtonClick; + S_RoomAddButton.Instance.Pressed += OnCreateRoomClick; RefreshGroup(); } + public override void OnHideUi() + { + S_GroupSearchButton.Instance.Pressed -= OnSearchButtonClick; + S_RoomAddButton.Instance.Pressed -= OnCreateRoomClick; + } + public override void OnDisposeUi() { _groupGrid.Destroy(); @@ -54,10 +62,13 @@ _roomGrid = null; } + /// + /// 刷新组数据 + /// public void RefreshGroup() { MapProjectManager.RefreshMapGroup(); - _groupGrid.SetDataList(MapProjectManager.GroupData.Values.ToArray()); + OnSearchButtonClick(); } public void SelectGroup(MapProjectManager.MapGroupInfo group) @@ -76,4 +87,30 @@ //加载地牢 mapEditor.LoadMap(room.RootPath, room.Group, room.RoomType, room.Name); } + + //搜索组按钮点击 + private void OnSearchButtonClick() + { + //输入文本 + var text = S_GroupSearchInput.Instance.Text; + if (!string.IsNullOrEmpty(text)) + { + var str = text.Trim().ToLower(); + var result = MapProjectManager.GroupData.Values.Where(info => + { + return info.Name.Trim().ToLower().Contains(str); + }); + _groupGrid.SetDataList(result.ToArray()); + } + else + { + _groupGrid.SetDataList(MapProjectManager.GroupData.Values.ToArray()); + } + } + + //创建地牢房间按钮点击 + private void OnCreateRoomClick() + { + UiManager.Open_MapEditorCreateRoom(); + } }