diff --git a/DungeonShooting_Godot/prefab/ui/EditorManager.tscn b/DungeonShooting_Godot/prefab/ui/EditorManager.tscn new file mode 100644 index 0000000..3069512 --- /dev/null +++ b/DungeonShooting_Godot/prefab/ui/EditorManager.tscn @@ -0,0 +1,78 @@ +[gd_scene load_steps=5 format=3 uid="uid://bmm3yekrokqlb"] + +[ext_resource type="Script" path="res://src/game/ui/editorManager/EditorManagerPanel.cs" id="1_6qnog"] +[ext_resource type="Texture2D" uid="uid://cajcnlimvoxk" path="res://resource/sprite/ui/commonIcon/Back.png" id="2_ykjr7"] +[ext_resource type="PackedScene" uid="uid://dh7y03tq6v0a2" path="res://prefab/ui/MapEditorProject.tscn" id="3_hlfkf"] +[ext_resource type="PackedScene" uid="uid://bxrpxwsvveq8i" path="res://prefab/ui/TileSetEditorProject.tscn" id="4_mejcx"] + +[node name="EditorManager" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource("1_6qnog") + +[node name="Bg" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="Bg"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 0 + +[node name="Head" type="Panel" parent="Bg/VBoxContainer"] +custom_minimum_size = Vector2(0, 70) +layout_mode = 2 + +[node name="Back" type="Button" parent="Bg/VBoxContainer/Head"] +layout_mode = 2 +offset_left = 2.0 +offset_top = 2.0 +offset_right = 62.0 +offset_bottom = 68.0 +size_flags_horizontal = 0 +icon = ExtResource("2_ykjr7") +icon_alignment = 1 + +[node name="Title" type="Label" parent="Bg/VBoxContainer/Head"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -4.5 +offset_top = -20.0 +offset_right = 4.5 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "地图管理器" + +[node name="TabContainer" type="TabContainer" parent="Bg/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Map" type="MarginContainer" parent="Bg/VBoxContainer/TabContainer"] +layout_mode = 2 +theme_override_constants/margin_top = 10 + +[node name="MapEditorProject" parent="Bg/VBoxContainer/TabContainer/Map" instance=ExtResource("3_hlfkf")] +layout_mode = 2 + +[node name="TileSet" type="MarginContainer" parent="Bg/VBoxContainer/TabContainer"] +visible = false +layout_mode = 2 +theme_override_constants/margin_top = 10 + +[node name="TileSetEditorProject" parent="Bg/VBoxContainer/TabContainer/TileSet" instance=ExtResource("4_mejcx")] +layout_mode = 2 diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn index 61097d1..f277c48 100644 --- a/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn +++ b/DungeonShooting_Godot/prefab/ui/MapEditorMapTile.tscn @@ -15,7 +15,6 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_gtth6") -Layer = null [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn index 6e0d75c..ba185f0 100644 --- a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn +++ b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn @@ -32,7 +32,6 @@ grow_vertical = 2 mouse_filter = 1 script = ExtResource("1_mqp1c") -Layer = null metadata/_edit_vertical_guides_ = [1900.0] [node name="ToolRoot" type="Control" parent="."] diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/Preview.png index c0adc9e..3078ae9 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/Preview.png +++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/Preview.png Binary files differ diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/RoomInfo.json index 42c5e3a..b31da81 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/RoomInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/RoomInfo.json @@ -1 +1 @@ -{"Position":{"X":-6,"Y":-7},"Size":{"X":19,"Y":13},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file +{"Position":{"X":-6,"Y":-7},"Size":{"X":21,"Y":13},"DoorAreaInfos":[],"GroupName":"Test1","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/TileInfo.json index 189d173..a92ac30 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/TileInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/Test1/inlet/Start1/TileInfo.json @@ -1 +1 @@ -{"NavigationVertices":[{"X":170,"Y":66},{"X":-58,"Y":66},{"X":-58,"Y":-58},{"X":170,"Y":-58}],"NavigationPolygon":[[0,1,2,3]],"Floor":[3,-2,0,3,2,-2,0,3,1,-2,0,3,0,-2,0,3,-1,-2,0,3,-2,-2,0,3,-2,-1,0,3,-1,-1,0,3,0,-1,0,3,1,-1,0,3,2,-1,0,3,3,-1,0,3,3,0,0,3,2,0,0,3,1,0,0,3,0,0,0,3,-1,0,0,3,-2,0,0,3,-2,1,0,3,-1,1,0,3,0,1,0,3,1,1,0,3,2,1,0,3,3,1,0,3,3,-3,0,3,2,-3,0,3,1,-3,0,3,0,-3,0,3,-1,-3,0,3,-2,-3,0,3,4,-3,0,3,5,-3,0,3,6,-3,0,3,7,-3,0,3,8,-2,0,3,9,-2,0,3,7,-2,0,3,6,-2,0,3,5,-2,0,3,4,-2,0,3,8,-3,0,3,9,-3,0,3,10,-3,0,3,9,-4,0,3,8,-4,0,3,7,-4,0,3,6,-4,0,3,5,-4,0,3,4,-4,0,3,3,-4,0,3,2,-4,0,3,1,-4,0,3,0,-4,0,3,-1,-4,0,3,-2,-4,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-4,1,0,3,-4,2,0,3,-3,2,0,3,-2,2,0,3,-1,2,0,3,0,2,0,3,1,2,0,3,2,2,0,3,3,2,0,3,4,2,0,3,4,1,0,3,4,0,0,3,4,-1,0,3,5,-1,0,3,6,-1,0,3,7,-1,0,3,8,-1,0,3,9,-1,0,3,10,-1,0,3,10,-2,0,3,10,0,0,3,9,0,0,3,8,0,0,3,7,0,0,3,6,0,0,3,5,0,0,3,5,1,0,3,6,1,0,3,7,1,0,3,8,1,0,3,9,1,0,3,9,2,0,3,10,2,0,3,8,2,0,3,7,2,0,3,6,2,0,3,5,2,0,3,10,1,0,3,10,3,0,3,9,3,0,3,8,3,0,3,7,3,0,3,6,3,0,3,5,3,0,3,4,3,0,3,3,3,0,3,2,3,0,3,1,3,0,3,0,3,0,3,-1,3,0,3,-2,3,0,3,-3,3,0,3,-4,0,0,3,-4,-1,0,3,-4,-2,0,3,-4,-3,0,3,-4,-4,0,3,-4,3,0,3,10,-4,0,3],"Middle":[-4,-6,63,1,-4,-5,2,2,-3,-6,63,1,-3,-5,2,2,-2,-6,63,1,-2,-5,2,2,-1,-6,63,1,-1,-5,2,2,0,-6,63,1,0,-5,2,2,1,-6,63,1,1,-5,2,2,2,-6,63,1,2,-5,2,2,3,-6,63,1,3,-5,2,2,4,-6,63,1,4,-5,2,2,5,-6,63,1,5,-5,2,2,6,-6,63,1,6,-5,2,2,7,-6,63,1,7,-5,2,2,8,-6,63,1,8,-5,2,2,9,-6,63,1,9,-5,2,2,10,-6,63,1,10,-5,2,2],"Top":[-6,-7,511,1,-6,-6,511,1,-6,-5,511,1,-6,-4,511,1,-6,-3,511,1,-6,-2,511,1,-6,-1,511,1,-6,0,511,1,-6,1,511,1,-6,2,511,1,-6,3,511,1,-6,4,511,1,-6,5,511,1,-5,-7,511,1,-5,-6,255,1,-5,-5,219,1,-5,-4,219,1,-5,-3,219,1,-5,-2,219,1,-5,-1,219,1,-5,0,219,1,-5,1,219,1,-5,2,219,1,-5,3,219,1,-5,4,507,1,-5,5,511,1,-4,-7,511,1,-4,4,504,1,-4,5,511,1,-3,-7,511,1,-3,4,504,1,-3,5,511,1,-2,-7,511,1,-2,4,504,1,-2,5,511,1,-1,-7,511,1,-1,4,504,1,-1,5,511,1,0,-7,511,1,0,4,504,1,0,5,511,1,1,-7,511,1,1,4,504,1,1,5,511,1,2,-7,511,1,2,4,504,1,2,5,511,1,3,-7,511,1,3,4,504,1,3,5,511,1,4,-7,511,1,4,4,504,1,4,5,511,1,5,-7,511,1,5,4,504,1,5,5,511,1,6,-7,511,1,6,4,504,1,6,5,511,1,7,-7,511,1,7,4,504,1,7,5,511,1,8,-7,511,1,8,4,504,1,8,5,511,1,9,-7,511,1,9,4,504,1,9,5,511,1,10,-7,511,1,10,4,504,1,10,5,511,1,11,-7,511,1,11,-6,447,1,11,-5,438,1,11,-4,438,1,11,-3,438,1,11,-2,438,1,11,-1,438,1,11,0,438,1,11,1,438,1,11,2,438,1,11,3,438,1,11,4,510,1,11,5,511,1,12,-7,511,1,12,-6,511,1,12,-5,511,1,12,-4,511,1,12,-3,511,1,12,-2,511,1,12,-1,511,1,12,0,511,1,12,1,511,1,12,2,511,1,12,3,511,1,12,4,511,1,12,5,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]} \ No newline at end of file +{"NavigationVertices":[{"X":202,"Y":-58},{"X":202,"Y":66},{"X":198,"Y":38},{"X":198,"Y":-14},{"X":-58,"Y":66},{"X":170,"Y":38},{"X":38,"Y":-10},{"X":38,"Y":-46},{"X":170,"Y":-14},{"X":-22,"Y":-10},{"X":-58,"Y":-58},{"X":-22,"Y":-46}],"NavigationPolygon":[[0,1,2,3],[2,1,4,5],[6,7,8,5],[6,5,4,9],[9,4,10,11],[11,10,0,7],[8,7,0,3]],"Floor":[3,-2,0,3,2,-2,0,3,-2,-2,0,3,-2,-1,0,3,-1,-1,0,3,0,-1,0,3,1,-1,0,3,2,-1,0,3,3,-1,0,3,3,0,0,3,2,0,0,3,1,0,0,3,0,0,0,3,-1,0,0,3,-2,0,0,3,-2,1,0,3,-1,1,0,3,0,1,0,3,1,1,0,3,2,1,0,3,3,1,0,3,3,-3,0,3,2,-3,0,3,-2,-3,0,3,4,-3,0,3,5,-3,0,3,6,-3,0,3,7,-3,0,3,8,-2,0,3,9,-2,0,3,7,-2,0,3,6,-2,0,3,5,-2,0,3,4,-2,0,3,8,-3,0,3,9,-3,0,3,10,-3,0,3,9,-4,0,3,8,-4,0,3,7,-4,0,3,6,-4,0,3,5,-4,0,3,4,-4,0,3,3,-4,0,3,2,-4,0,3,1,-4,0,3,0,-4,0,3,-1,-4,0,3,-2,-4,0,3,-3,-4,0,3,-3,-3,0,3,-3,-2,0,3,-3,-1,0,3,-3,0,0,3,-3,1,0,3,-4,1,0,3,-4,2,0,3,-3,2,0,3,-2,2,0,3,-1,2,0,3,0,2,0,3,1,2,0,3,2,2,0,3,3,2,0,3,4,2,0,3,4,1,0,3,4,0,0,3,4,-1,0,3,5,-1,0,3,6,-1,0,3,7,-1,0,3,8,-1,0,3,9,-1,0,3,10,-1,0,3,10,-2,0,3,10,0,0,3,9,0,0,3,8,0,0,3,7,0,0,3,6,0,0,3,5,0,0,3,5,1,0,3,6,1,0,3,7,1,0,3,8,1,0,3,9,1,0,3,9,2,0,3,10,2,0,3,8,2,0,3,7,2,0,3,6,2,0,3,5,2,0,3,10,1,0,3,10,3,0,3,9,3,0,3,8,3,0,3,7,3,0,3,6,3,0,3,5,3,0,3,4,3,0,3,3,3,0,3,2,3,0,3,1,3,0,3,0,3,0,3,-1,3,0,3,-2,3,0,3,-3,3,0,3,-4,0,0,3,-4,-1,0,3,-4,-2,0,3,-4,-3,0,3,-4,-4,0,3,-4,3,0,3,10,-4,0,3,12,-4,0,3,12,-3,0,3,12,-2,0,3,11,-2,0,3,11,-3,0,3,11,-4,0,3,12,-1,0,3,12,0,0,3,12,1,0,3,12,2,0,3,12,3,0,3,11,3,0,3,11,2,0,3],"Middle":[-4,-6,63,1,-4,-5,2,2,-3,-6,63,1,-3,-5,2,2,-2,-6,63,1,-2,-5,2,2,-1,-6,63,1,-1,-5,2,2,-1,-3,48,1,-1,-2,1,2,0,-6,63,1,0,-5,2,2,0,-3,56,1,0,-2,2,2,1,-6,63,1,1,-5,2,2,1,-3,24,1,1,-2,3,2,2,-6,63,1,2,-5,2,2,3,-6,63,1,3,-5,2,2,4,-6,63,1,4,-5,2,2,5,-6,63,1,5,-5,2,2,6,-6,63,1,6,-5,2,2,7,-6,63,1,7,-5,2,2,8,-6,63,1,8,-5,2,2,9,-6,63,1,9,-5,2,2,10,-6,63,1,10,-5,2,2,11,-6,63,1,11,-5,2,2,11,0,18,1,11,1,0,2,12,-6,63,1,12,-5,2,2],"Top":[-6,-7,511,1,-6,-6,511,1,-6,-5,511,1,-6,-4,511,1,-6,-3,511,1,-6,-2,511,1,-6,-1,511,1,-6,0,511,1,-6,1,511,1,-6,2,511,1,-6,3,511,1,-6,4,511,1,-6,5,511,1,-5,-7,511,1,-5,-6,255,1,-5,-5,219,1,-5,-4,219,1,-5,-3,219,1,-5,-2,219,1,-5,-1,219,1,-5,0,219,1,-5,1,219,1,-5,2,219,1,-5,3,219,1,-5,4,507,1,-5,5,511,1,-4,-7,511,1,-4,4,504,1,-4,5,511,1,-3,-7,511,1,-3,4,504,1,-3,5,511,1,-2,-7,511,1,-2,4,504,1,-2,5,511,1,-1,-7,511,1,-1,4,504,1,-1,5,511,1,0,-7,511,1,0,4,504,1,0,5,511,1,1,-7,511,1,1,4,504,1,1,5,511,1,2,-7,511,1,2,4,504,1,2,5,511,1,3,-7,511,1,3,4,504,1,3,5,511,1,4,-7,511,1,4,4,504,1,4,5,511,1,5,-7,511,1,5,4,504,1,5,5,511,1,6,-7,511,1,6,4,504,1,6,5,511,1,7,-7,511,1,7,4,504,1,7,5,511,1,8,-7,511,1,8,4,504,1,8,5,511,1,9,-7,511,1,9,4,504,1,9,5,511,1,10,-7,511,1,10,4,504,1,10,5,511,1,11,-7,511,1,11,-1,144,1,11,4,504,1,11,5,511,1,12,-7,511,1,12,4,504,1,12,5,511,1,13,-7,511,1,13,-6,447,1,13,-5,438,1,13,-4,438,1,13,-3,438,1,13,-2,438,1,13,-1,438,1,13,0,438,1,13,1,438,1,13,2,438,1,13,3,438,1,13,4,510,1,13,5,511,1,14,-7,511,1,14,-6,511,1,14,-5,511,1,14,-4,511,1,14,-3,511,1,14,-2,511,1,14,-1,511,1,14,0,511,1,14,1,511,1,14,2,511,1,14,3,511,1,14,4,511,1,14,5,511,1],"CustomFloor1":[],"CustomFloor2":[],"CustomFloor3":[],"CustomMiddle1":[],"CustomMiddle2":[],"CustomTop":[]} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs index d355f55..250aea8 100644 --- a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs +++ b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs @@ -95,7 +95,7 @@ return false; } - var size = control.Size * control.Scale; + var size = control.Size; return pos.X <= size.X - border && pos.Y <= size.Y - border; } diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs index 3f2bec8..821cfaf 100644 --- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs +++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs @@ -74,6 +74,7 @@ public const string prefab_ui_EditorImportCombination_tscn = "res://prefab/ui/EditorImportCombination.tscn"; public const string prefab_ui_EditorInfo_tscn = "res://prefab/ui/EditorInfo.tscn"; public const string prefab_ui_EditorInput_tscn = "res://prefab/ui/EditorInput.tscn"; + public const string prefab_ui_EditorManager_tscn = "res://prefab/ui/EditorManager.tscn"; public const string prefab_ui_EditorTips_tscn = "res://prefab/ui/EditorTips.tscn"; public const string prefab_ui_EditorTools_tscn = "res://prefab/ui/EditorTools.tscn"; public const string prefab_ui_EditorWindow_tscn = "res://prefab/ui/EditorWindow.tscn"; @@ -125,6 +126,7 @@ public const string resource_font_VonwaonBitmap16px_ttf = "res://resource/font/VonwaonBitmap-16px.ttf"; public const string resource_map_tileSet_TileSetConfig_json = "res://resource/map/tileSet/TileSetConfig.json"; public const string resource_map_tileSet_TileSet1_Main_png = "res://resource/map/tileSet/TileSet1/Main.png"; + public const string resource_map_tileSet_TileSet1_Test1_png = "res://resource/map/tileSet/TileSet1/Test1.png"; public const string resource_map_tileSet_TileSet1_TileSet_json = "res://resource/map/tileSet/TileSet1/TileSet.json"; public const string resource_map_tileSet_TileSet2_Main_png = "res://resource/map/tileSet/TileSet2/Main.png"; public const string resource_map_tileSet_TileSet2_Test2_png = "res://resource/map/tileSet/TileSet2/Test2.png"; diff --git a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs index 420d68e..95de4d9 100644 --- a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs +++ b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs @@ -12,6 +12,7 @@ public const string EditorImportCombination = "EditorImportCombination"; public const string EditorInfo = "EditorInfo"; public const string EditorInput = "EditorInput"; + public const string EditorManager = "EditorManager"; public const string EditorTips = "EditorTips"; public const string EditorTools = "EditorTools"; public const string EditorWindow = "EditorWindow"; @@ -376,6 +377,54 @@ } /// <summary> + /// 创建 EditorManager, 并返回UI实例, 该函数不会打开 Ui + /// </summary> + public static UI.EditorManager.EditorManagerPanel Create_EditorManager() + { + return CreateUi<UI.EditorManager.EditorManagerPanel>(UiNames.EditorManager); + } + + /// <summary> + /// 打开 EditorManager, 并返回UI实例 + /// </summary> + public static UI.EditorManager.EditorManagerPanel Open_EditorManager() + { + return OpenUi<UI.EditorManager.EditorManagerPanel>(UiNames.EditorManager); + } + + /// <summary> + /// 隐藏 EditorManager 的所有实例 + /// </summary> + public static void Hide_EditorManager() + { + var uiInstance = Get_EditorManager_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.HideUi(); + } + } + + /// <summary> + /// 销毁 EditorManager 的所有实例 + /// </summary> + public static void Destroy_EditorManager() + { + var uiInstance = Get_EditorManager_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.Destroy(); + } + } + + /// <summary> + /// 获取所有 EditorManager 的实例, 如果没有实例, 则返回一个空数组 + /// </summary> + public static UI.EditorManager.EditorManagerPanel[] Get_EditorManager_Instance() + { + return GetUiInstance<UI.EditorManager.EditorManagerPanel>(nameof(UI.EditorManager.EditorManager)); + } + + /// <summary> /// 创建 EditorTips, 并返回UI实例, 该函数不会打开 Ui /// </summary> public static UI.EditorTips.EditorTipsPanel Create_EditorTips() diff --git a/DungeonShooting_Godot/src/game/ui/editorManager/EditorManager.cs b/DungeonShooting_Godot/src/game/ui/editorManager/EditorManager.cs new file mode 100644 index 0000000..6edd3bd --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/editorManager/EditorManager.cs @@ -0,0 +1,313 @@ +namespace UI.EditorManager; + +/// <summary> +/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失 +/// </summary> +public abstract partial class EditorManager : UiBase +{ + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.Panel"/>, 节点路径: EditorManager.Bg + /// </summary> + public Bg L_Bg + { + get + { + if (_L_Bg == null) _L_Bg = new Bg((EditorManagerPanel)this, GetNode<Godot.Panel>("Bg")); + return _L_Bg; + } + } + private Bg _L_Bg; + + + public EditorManager() : base(nameof(EditorManager)) + { + } + + public sealed override void OnInitNestedUi() + { + + var inst1 = L_Bg.L_VBoxContainer.L_TabContainer.L_Map; + RecordNestedUi(inst1.L_MapEditorProject.Instance, inst1, UiManager.RecordType.Open); + inst1.L_MapEditorProject.Instance.OnCreateUi(); + inst1.L_MapEditorProject.Instance.OnInitNestedUi(); + + var inst2 = L_Bg.L_VBoxContainer.L_TabContainer.L_TileSet; + RecordNestedUi(inst2.L_TileSetEditorProject.Instance, inst2, UiManager.RecordType.Open); + inst2.L_TileSetEditorProject.Instance.OnCreateUi(); + inst2.L_TileSetEditorProject.Instance.OnInitNestedUi(); + + } + + /// <summary> + /// 类型: <see cref="Godot.Button"/>, 路径: EditorManager.Bg.VBoxContainer.Head.Back + /// </summary> + public class Back : UiNode<EditorManagerPanel, Godot.Button, Back> + { + public Back(EditorManagerPanel uiPanel, Godot.Button node) : base(uiPanel, node) { } + public override Back Clone() => new (UiPanel, (Godot.Button)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="Godot.Label"/>, 路径: EditorManager.Bg.VBoxContainer.Head.Title + /// </summary> + public class Title : UiNode<EditorManagerPanel, Godot.Label, Title> + { + public Title(EditorManagerPanel uiPanel, Godot.Label node) : base(uiPanel, node) { } + public override Title Clone() => new (UiPanel, (Godot.Label)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="Godot.Panel"/>, 路径: EditorManager.Bg.VBoxContainer.Head + /// </summary> + public class Head : UiNode<EditorManagerPanel, Godot.Panel, Head> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.Button"/>, 节点路径: EditorManager.Bg.VBoxContainer.Back + /// </summary> + public Back L_Back + { + get + { + if (_L_Back == null) _L_Back = new Back(UiPanel, Instance.GetNode<Godot.Button>("Back")); + return _L_Back; + } + } + private Back _L_Back; + + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.Label"/>, 节点路径: EditorManager.Bg.VBoxContainer.Title + /// </summary> + public Title L_Title + { + get + { + if (_L_Title == null) _L_Title = new Title(UiPanel, Instance.GetNode<Godot.Label>("Title")); + return _L_Title; + } + } + private Title _L_Title; + + public Head(EditorManagerPanel uiPanel, Godot.Panel node) : base(uiPanel, node) { } + public override Head Clone() => new (UiPanel, (Godot.Panel)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="UI.MapEditorProject.MapEditorProjectPanel"/>, 路径: EditorManager.Bg.VBoxContainer.TabContainer.Map.MapEditorProject + /// </summary> + public class MapEditorProject : UiNode<EditorManagerPanel, UI.MapEditorProject.MapEditorProjectPanel, MapEditorProject> + { + public MapEditorProject(EditorManagerPanel uiPanel, UI.MapEditorProject.MapEditorProjectPanel node) : base(uiPanel, node) { } + public override MapEditorProject Clone() + { + var uiNode = new MapEditorProject(UiPanel, (UI.MapEditorProject.MapEditorProjectPanel)Instance.Duplicate()); + UiPanel.RecordNestedUi(uiNode.Instance, this, UiManager.RecordType.Open); + uiNode.Instance.OnCreateUi(); + uiNode.Instance.OnInitNestedUi(); + return uiNode; + } + } + + /// <summary> + /// 类型: <see cref="Godot.MarginContainer"/>, 路径: EditorManager.Bg.VBoxContainer.TabContainer.Map + /// </summary> + public class Map : UiNode<EditorManagerPanel, Godot.MarginContainer, Map> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="UI.MapEditorProject.MapEditorProjectPanel"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.MapEditorProject + /// </summary> + public MapEditorProject L_MapEditorProject + { + get + { + if (_L_MapEditorProject == null) _L_MapEditorProject = new MapEditorProject(UiPanel, Instance.GetNode<UI.MapEditorProject.MapEditorProjectPanel>("MapEditorProject")); + return _L_MapEditorProject; + } + } + private MapEditorProject _L_MapEditorProject; + + public Map(EditorManagerPanel uiPanel, Godot.MarginContainer node) : base(uiPanel, node) { } + public override Map Clone() => new (UiPanel, (Godot.MarginContainer)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="UI.TileSetEditorProject.TileSetEditorProjectPanel"/>, 路径: EditorManager.Bg.VBoxContainer.TabContainer.TileSet.TileSetEditorProject + /// </summary> + public class TileSetEditorProject : UiNode<EditorManagerPanel, UI.TileSetEditorProject.TileSetEditorProjectPanel, TileSetEditorProject> + { + public TileSetEditorProject(EditorManagerPanel uiPanel, UI.TileSetEditorProject.TileSetEditorProjectPanel node) : base(uiPanel, node) { } + public override TileSetEditorProject Clone() + { + var uiNode = new TileSetEditorProject(UiPanel, (UI.TileSetEditorProject.TileSetEditorProjectPanel)Instance.Duplicate()); + UiPanel.RecordNestedUi(uiNode.Instance, this, UiManager.RecordType.Open); + uiNode.Instance.OnCreateUi(); + uiNode.Instance.OnInitNestedUi(); + return uiNode; + } + } + + /// <summary> + /// 类型: <see cref="Godot.MarginContainer"/>, 路径: EditorManager.Bg.VBoxContainer.TabContainer.TileSet + /// </summary> + public class TileSet : UiNode<EditorManagerPanel, Godot.MarginContainer, TileSet> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="UI.TileSetEditorProject.TileSetEditorProjectPanel"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.TileSetEditorProject + /// </summary> + public TileSetEditorProject L_TileSetEditorProject + { + get + { + if (_L_TileSetEditorProject == null) _L_TileSetEditorProject = new TileSetEditorProject(UiPanel, Instance.GetNode<UI.TileSetEditorProject.TileSetEditorProjectPanel>("TileSetEditorProject")); + return _L_TileSetEditorProject; + } + } + private TileSetEditorProject _L_TileSetEditorProject; + + public TileSet(EditorManagerPanel uiPanel, Godot.MarginContainer node) : base(uiPanel, node) { } + public override TileSet Clone() => new (UiPanel, (Godot.MarginContainer)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="Godot.TabContainer"/>, 路径: EditorManager.Bg.VBoxContainer.TabContainer + /// </summary> + public class TabContainer : UiNode<EditorManagerPanel, Godot.TabContainer, TabContainer> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.MarginContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer.Map + /// </summary> + public Map L_Map + { + get + { + if (_L_Map == null) _L_Map = new Map(UiPanel, Instance.GetNode<Godot.MarginContainer>("Map")); + return _L_Map; + } + } + private Map _L_Map; + + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.MarginContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer.TileSet + /// </summary> + public TileSet L_TileSet + { + get + { + if (_L_TileSet == null) _L_TileSet = new TileSet(UiPanel, Instance.GetNode<Godot.MarginContainer>("TileSet")); + return _L_TileSet; + } + } + private TileSet _L_TileSet; + + public TabContainer(EditorManagerPanel uiPanel, Godot.TabContainer node) : base(uiPanel, node) { } + public override TabContainer Clone() => new (UiPanel, (Godot.TabContainer)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="Godot.VBoxContainer"/>, 路径: EditorManager.Bg.VBoxContainer + /// </summary> + public class VBoxContainer : UiNode<EditorManagerPanel, Godot.VBoxContainer, VBoxContainer> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.Panel"/>, 节点路径: EditorManager.Bg.Head + /// </summary> + public Head L_Head + { + get + { + if (_L_Head == null) _L_Head = new Head(UiPanel, Instance.GetNode<Godot.Panel>("Head")); + return _L_Head; + } + } + private Head _L_Head; + + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.TabContainer"/>, 节点路径: EditorManager.Bg.TabContainer + /// </summary> + public TabContainer L_TabContainer + { + get + { + if (_L_TabContainer == null) _L_TabContainer = new TabContainer(UiPanel, Instance.GetNode<Godot.TabContainer>("TabContainer")); + return _L_TabContainer; + } + } + private TabContainer _L_TabContainer; + + public VBoxContainer(EditorManagerPanel uiPanel, Godot.VBoxContainer node) : base(uiPanel, node) { } + public override VBoxContainer Clone() => new (UiPanel, (Godot.VBoxContainer)Instance.Duplicate()); + } + + /// <summary> + /// 类型: <see cref="Godot.Panel"/>, 路径: EditorManager.Bg + /// </summary> + public class Bg : UiNode<EditorManagerPanel, Godot.Panel, Bg> + { + /// <summary> + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: <see cref="Godot.VBoxContainer"/>, 节点路径: EditorManager.VBoxContainer + /// </summary> + public VBoxContainer L_VBoxContainer + { + get + { + if (_L_VBoxContainer == null) _L_VBoxContainer = new VBoxContainer(UiPanel, Instance.GetNode<Godot.VBoxContainer>("VBoxContainer")); + return _L_VBoxContainer; + } + } + private VBoxContainer _L_VBoxContainer; + + public Bg(EditorManagerPanel uiPanel, Godot.Panel node) : base(uiPanel, node) { } + public override Bg Clone() => new (UiPanel, (Godot.Panel)Instance.Duplicate()); + } + + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.Button"/>, 节点路径: EditorManager.Bg.VBoxContainer.Head.Back + /// </summary> + public Back S_Back => L_Bg.L_VBoxContainer.L_Head.L_Back; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.Label"/>, 节点路径: EditorManager.Bg.VBoxContainer.Head.Title + /// </summary> + public Title S_Title => L_Bg.L_VBoxContainer.L_Head.L_Title; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.Panel"/>, 节点路径: EditorManager.Bg.VBoxContainer.Head + /// </summary> + public Head S_Head => L_Bg.L_VBoxContainer.L_Head; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="UI.MapEditorProject.MapEditorProjectPanel"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.Map.MapEditorProject + /// </summary> + public MapEditorProject S_MapEditorProject => L_Bg.L_VBoxContainer.L_TabContainer.L_Map.L_MapEditorProject; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.MarginContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.Map + /// </summary> + public Map S_Map => L_Bg.L_VBoxContainer.L_TabContainer.L_Map; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="UI.TileSetEditorProject.TileSetEditorProjectPanel"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.TileSet.TileSetEditorProject + /// </summary> + public TileSetEditorProject S_TileSetEditorProject => L_Bg.L_VBoxContainer.L_TabContainer.L_TileSet.L_TileSetEditorProject; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.MarginContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer.TileSet + /// </summary> + public TileSet S_TileSet => L_Bg.L_VBoxContainer.L_TabContainer.L_TileSet; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.TabContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer.TabContainer + /// </summary> + public TabContainer S_TabContainer => L_Bg.L_VBoxContainer.L_TabContainer; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.VBoxContainer"/>, 节点路径: EditorManager.Bg.VBoxContainer + /// </summary> + public VBoxContainer S_VBoxContainer => L_Bg.L_VBoxContainer; + + /// <summary> + /// 场景中唯一名称的节点, 节点类型: <see cref="Godot.Panel"/>, 节点路径: EditorManager.Bg + /// </summary> + public Bg S_Bg => L_Bg; + +} diff --git a/DungeonShooting_Godot/src/game/ui/editorManager/EditorManagerPanel.cs b/DungeonShooting_Godot/src/game/ui/editorManager/EditorManagerPanel.cs new file mode 100644 index 0000000..03876cc --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/editorManager/EditorManagerPanel.cs @@ -0,0 +1,18 @@ +using Godot; + +namespace UI.EditorManager; + +public partial class EditorManagerPanel : EditorManager +{ + + public override void OnCreateUi() + { + + } + + public override void OnDestroyUi() + { + + } + +} diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs index 38a0517..1434c94 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs @@ -105,8 +105,9 @@ private bool _initLayer = false; //--------- 配置数据 ------------- - private int _terrainSet = 0; - private int _terrain = 0; + private int _mainSource = 0; + private int _mainTerrainSet = 0; + private int _mainTerrain = 0; private AutoTileConfig _autoTileConfig; /// <summary> @@ -792,6 +793,8 @@ foreach (var item in CurrBrush) { SetCell(CurrLayer.Layer, position + item + _brushOffset, CurrSourceIndex, item); + //标记有修改数据 + EventManager.EmitEvent(EventEnum.OnTileMapDirty); } } } @@ -843,6 +846,8 @@ else //自定义层 { EraseCell(CurrLayer.Layer, position); + //标记有修改数据 + EventManager.EmitEvent(EventEnum.OnTileMapDirty); } } @@ -1014,7 +1019,7 @@ } var arr = new Array<Vector2I>(list); //绘制自动图块 - SetCellsTerrainConnect(MapLayer.AutoFloorLayer, arr, _terrainSet, _terrain, false); + SetCellsTerrainConnect(MapLayer.AutoFloorLayer, arr, _mainTerrainSet, _mainTerrain, false); //擦除临时边界 for (var i = 0; i < temp1.Count; i++) @@ -1088,7 +1093,7 @@ continue; } EraseCell(MapLayer.AutoFloorLayer, pos); - SetCell(layer, pos, CurrSourceIndex, atlasCoords); + SetCell(layer, pos, _mainSource, atlasCoords); } } } diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorMapTile/FreeTileTab.cs b/DungeonShooting_Godot/src/game/ui/mapEditorMapTile/FreeTileTab.cs index 9165e15..1d54ce1 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditorMapTile/FreeTileTab.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditorMapTile/FreeTileTab.cs @@ -55,7 +55,7 @@ if (@event is InputEventMouseButton mouseButton) { - if (mouseButton.ButtonIndex == MouseButton.Left) + if (mouseButton.ButtonIndex == MouseButton.Left && UiNode.L_TabRoot.Instance.IsMouseInRect()) { _leftPressed = mouseButton.Pressed; if (_leftPressed) @@ -71,7 +71,7 @@ } } } - else if (_leftPressed && @event is InputEventMouseMotion) + else if (_leftPressed && @event is InputEventMouseMotion && UiNode.L_TabRoot.Instance.IsMouseInRect()) { //多选格子 var atlasCoords = Utils.GetMouseCellPosition(UiNode.L_TabRoot.Instance);