diff --git a/DungeonShooting_Godot/DungeonShooting.csproj b/DungeonShooting_Godot/DungeonShooting.csproj index 1c27fa0..ae650b1 100644 --- a/DungeonShooting_Godot/DungeonShooting.csproj +++ b/DungeonShooting_Godot/DungeonShooting.csproj @@ -14,7 +14,4 @@ - - - \ No newline at end of file diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs index 0915274..c6d9490 100644 --- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs +++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs @@ -5,19 +5,14 @@ using System.IO; using System.Text.Json; using System.Text.RegularExpressions; -using Config; -using Godot; -using NPOI.SS.UserModel; -using NPOI.XSSF.UserModel; -using Array = Godot.Collections.Array; +// using NPOI.SS.UserModel; +// using NPOI.XSSF.UserModel; using Environment = System.Environment; namespace Generator; public static class ExcelGenerator { - private static HashSet _excelNames = new HashSet(); - private enum CollectionsType { None, @@ -83,7 +78,7 @@ /// 代码输出路径 public static bool ExportExcel(string excelFilePath, string jsonOutPath, string codeOutPath) { - _excelNames.Clear(); + var excelNames = new HashSet(); Debug.Log("当前路径: " + Environment.CurrentDirectory); Debug.Log("excel路径: " + excelFilePath); Debug.Log("json输出路径: " + jsonOutPath); @@ -100,7 +95,7 @@ foreach (var fileInfo in fileInfos) { var fileName = Path.GetFileNameWithoutExtension(fileInfo.Name).FirstToUpper(); - _excelNames.Add(fileName); + excelNames.Add(fileName); } //读取配置文件 foreach (var fileInfo in fileInfos) @@ -112,7 +107,7 @@ throw new Exception("excel表文件名称不允许叫'ExcelConfig.xlsx'!"); } Debug.Log("excel表: " + fileInfo.FullName); - excelDataList.Add(ReadExcel(fileInfo.FullName)); + excelDataList.Add(ReadExcel(excelNames, fileInfo.FullName)); } } } @@ -319,7 +314,7 @@ return code; } - private static ExcelData ReadExcel(string excelPath) + private static ExcelData ReadExcel(HashSet excelNames, string excelPath) { var excelData = new ExcelData(); //文件名称 @@ -403,7 +398,7 @@ MappingData mappingData; try { - mappingData = ConvertToType(typeString.Replace(" ", "")); + mappingData = ConvertToType(excelNames, typeString.Replace(" ", "")); } catch (Exception e) { @@ -615,7 +610,7 @@ return bool.Parse(value); } - private static MappingData ConvertToType(string str, int depth = 0) + private static MappingData ConvertToType(HashSet excelNames, string str, int depth = 0) { if (Regex.IsMatch(str, "^\\w+$")) { @@ -626,7 +621,7 @@ else if (Regex.IsMatch(str, "^\\$\\w+$")) //引用其他表 { var realName = str.Substring(1); - if (!_excelNames.Contains(realName)) + if (!excelNames.Contains(realName)) { throw new Exception($"引用表数据失败, 未找到表: {realName}!"); } @@ -653,8 +648,8 @@ throw new Exception($"字典key类型必须是基础类型!"); } - var type1 = ConvertToType(keyStr, depth + 1); - var type2 = ConvertToType(tempStr.Substring(index + 1), depth + 1); + var type1 = ConvertToType(excelNames, keyStr, depth + 1); + var type2 = ConvertToType(excelNames, tempStr.Substring(index + 1), depth + 1); var typeStr = $"Dictionary<{type1.TypeStr}, {type2.TypeStr}>"; var typeName = $"System.Collections.Generic.Dictionary`2[[{type1.TypeName}],[{type2.TypeName}]]"; @@ -670,7 +665,7 @@ else if (str.StartsWith('[')) //数组 { var tempStr = str.Substring(1, str.Length - 2); - var typeData = ConvertToType(tempStr, depth + 1); + var typeData = ConvertToType(excelNames, tempStr, depth + 1); var typeStr = typeData.TypeStr + "[]"; var typeName = typeData.TypeName + "[]"; diff --git a/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn b/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn new file mode 100644 index 0000000..26cf649 --- /dev/null +++ b/DungeonShooting_Godot/prefab/ui/EditorImportCombination.tscn @@ -0,0 +1,63 @@ +[gd_scene load_steps=2 format=3 uid="uid://dl0u8eggomust"] + +[ext_resource type="Script" path="res://src/game/ui/editorImportCombination/EditorImportCombinationPanel.cs" id="1_4wd6k"] + +[node name="EditorImportCombination" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource("1_4wd6k") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 50 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 20 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="NameLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 20.0 +text = "组名称:" +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="NameInput" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 80.0 +placeholder_text = "请输入组合名称" + +[node name="HBoxContainer2" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="PreviewLabel" type="Label" parent="MarginContainer/VBoxContainer/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 0 +size_flags_stretch_ratio = 20.0 +text = "预览:" +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="RemarkInput" type="TextureRect" parent="MarginContainer/VBoxContainer/HBoxContainer2"] +custom_minimum_size = Vector2(0, 300) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 80.0 +expand_mode = 2 +stretch_mode = 5 diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn index 2ab686e..5bb24aa 100644 --- a/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn +++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorCombination.tscn @@ -56,7 +56,7 @@ [node name="LeftTop" type="Panel" parent="HSplitContainer/VSplitContainer"] layout_mode = 2 size_flags_vertical = 3 -size_flags_stretch_ratio = 40.0 +size_flags_stretch_ratio = 60.0 [node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/VSplitContainer/LeftTop"] layout_mode = 1 @@ -160,7 +160,7 @@ layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -size_flags_stretch_ratio = 60.0 +size_flags_stretch_ratio = 40.0 [node name="MarginContainer" type="MarginContainer" parent="HSplitContainer/VSplitContainer/LeftBottom"] layout_mode = 1 diff --git a/DungeonShooting_Godot/src/game/manager/EditorWindowManager.cs b/DungeonShooting_Godot/src/game/manager/EditorWindowManager.cs index 2d9ed4e..9c93ece 100644 --- a/DungeonShooting_Godot/src/game/manager/EditorWindowManager.cs +++ b/DungeonShooting_Godot/src/game/manager/EditorWindowManager.cs @@ -426,6 +426,33 @@ }; } + public static void ShowImportCombination(string showName, Action onSelectObject, UiBase parentUi = null) + { + var window = CreateWindowInstance(parentUi); + window.S_Window.Instance.Size = new Vector2I(600, 500); + window.SetWindowTitle("导入组合"); + var body = window.OpenBody(UiManager.UiNames.EditorImportCombination); + window.SetButtonList( + new EditorWindowPanel.ButtonData("确定", () => + { + var selectObject = body.GetSelectData(); + if (selectObject == null) + { + ShowTips("提示", "您未选择任何物体"); + } + else + { + window.CloseWindow(); + onSelectObject(""); + } + }), + new EditorWindowPanel.ButtonData("取消", () => + { + window.CloseWindow(); + }) + ); + } + private static EditorWindowPanel CreateWindowInstance(UiBase parentUi = null) { if (parentUi != null) diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs index c77d205..c8c468d 100644 --- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs +++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs @@ -6,8 +6,6 @@ public const string default_bus_layout_tres = "res://default_bus_layout.tres"; public const string default_env_tres = "res://default_env.tres"; public const string icon_png = "res://icon.png"; - public const string excel_DungeonShooting_ExcelTool_deps_json = "res://excel/DungeonShooting_ExcelTool.deps.json"; - public const string excel_DungeonShooting_ExcelTool_runtimeconfig_json = "res://excel/DungeonShooting_ExcelTool.runtimeconfig.json"; public const string prefab_Cursor_tscn = "res://prefab/Cursor.tscn"; public const string prefab_bullet_explode_Explode0001_tscn = "res://prefab/bullet/explode/Explode0001.tscn"; public const string prefab_bullet_laser_Laser0001_tscn = "res://prefab/bullet/laser/Laser0001.tscn"; @@ -64,6 +62,7 @@ public const string prefab_ui_BottomTips_tscn = "res://prefab/ui/BottomTips.tscn"; public const string prefab_ui_Debugger_tscn = "res://prefab/ui/Debugger.tscn"; public const string prefab_ui_EditorColorPicker_tscn = "res://prefab/ui/EditorColorPicker.tscn"; + public const string prefab_ui_EditorImportCombination_tscn = "res://prefab/ui/EditorImportCombination.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"; @@ -292,6 +291,7 @@ public const string resource_sprite_ui_commonIcon_Block_png = "res://resource/sprite/ui/commonIcon/Block.png"; public const string resource_sprite_ui_commonIcon_CenterTool_png = "res://resource/sprite/ui/commonIcon/CenterTool.png"; public const string resource_sprite_ui_commonIcon_Delete_png = "res://resource/sprite/ui/commonIcon/Delete.png"; + public const string resource_sprite_ui_commonIcon_Delete2_png = "res://resource/sprite/ui/commonIcon/Delete2.png"; public const string resource_sprite_ui_commonIcon_DoorTool_png = "res://resource/sprite/ui/commonIcon/DoorTool.png"; public const string resource_sprite_ui_commonIcon_Down_png = "res://resource/sprite/ui/commonIcon/Down.png"; public const string resource_sprite_ui_commonIcon_DragTool_png = "res://resource/sprite/ui/commonIcon/DragTool.png"; diff --git a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs index b4eb5bf..d110658 100644 --- a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs +++ b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs @@ -8,6 +8,7 @@ public const string BottomTips = "BottomTips"; public const string Debugger = "Debugger"; public const string EditorColorPicker = "EditorColorPicker"; + public const string EditorImportCombination = "EditorImportCombination"; public const string EditorTips = "EditorTips"; public const string EditorTools = "EditorTools"; public const string EditorWindow = "EditorWindow"; @@ -180,6 +181,54 @@ } /// + /// 创建 EditorImportCombination, 并返回UI实例, 该函数不会打开 Ui + /// + public static UI.EditorImportCombination.EditorImportCombinationPanel Create_EditorImportCombination() + { + return CreateUi(UiNames.EditorImportCombination); + } + + /// + /// 打开 EditorImportCombination, 并返回UI实例 + /// + public static UI.EditorImportCombination.EditorImportCombinationPanel Open_EditorImportCombination() + { + return OpenUi(UiNames.EditorImportCombination); + } + + /// + /// 隐藏 EditorImportCombination 的所有实例 + /// + public static void Hide_EditorImportCombination() + { + var uiInstance = Get_EditorImportCombination_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.HideUi(); + } + } + + /// + /// 销毁 EditorImportCombination 的所有实例 + /// + public static void Destroy_EditorImportCombination() + { + var uiInstance = Get_EditorImportCombination_Instance(); + foreach (var uiPanel in uiInstance) + { + uiPanel.Destroy(); + } + } + + /// + /// 获取所有 EditorImportCombination 的实例, 如果没有实例, 则返回一个空数组 + /// + public static UI.EditorImportCombination.EditorImportCombinationPanel[] Get_EditorImportCombination_Instance() + { + return GetUiInstance(nameof(UI.EditorImportCombination.EditorImportCombination)); + } + + /// /// 创建 EditorTips, 并返回UI实例, 该函数不会打开 Ui /// public static UI.EditorTips.EditorTipsPanel Create_EditorTips() diff --git a/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombination.cs b/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombination.cs new file mode 100644 index 0000000..d457f82 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombination.cs @@ -0,0 +1,235 @@ +namespace UI.EditorImportCombination; + +/// +/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失 +/// +public abstract partial class EditorImportCombination : UiBase +{ + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer + /// + public MarginContainer L_MarginContainer + { + get + { + if (_L_MarginContainer == null) _L_MarginContainer = new MarginContainer((EditorImportCombinationPanel)this, GetNode("MarginContainer")); + return _L_MarginContainer; + } + } + private MarginContainer _L_MarginContainer; + + + public EditorImportCombination() : base(nameof(EditorImportCombination)) + { + } + + public sealed override void OnInitNestedUi() + { + + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer.NameLabel + /// + public class NameLabel : UiNode + { + public NameLabel(EditorImportCombinationPanel uiPanel, Godot.Label node) : base(uiPanel, node) { } + public override NameLabel Clone() => new (UiPanel, (Godot.Label)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer.NameInput + /// + public class NameInput : UiNode + { + public NameInput(EditorImportCombinationPanel uiPanel, Godot.LineEdit node) : base(uiPanel, node) { } + public override NameInput Clone() => new (UiPanel, (Godot.LineEdit)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer + /// + public class HBoxContainer : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.NameLabel + /// + public NameLabel L_NameLabel + { + get + { + if (_L_NameLabel == null) _L_NameLabel = new NameLabel(UiPanel, Instance.GetNode("NameLabel")); + return _L_NameLabel; + } + } + private NameLabel _L_NameLabel; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.NameInput + /// + public NameInput L_NameInput + { + get + { + if (_L_NameInput == null) _L_NameInput = new NameInput(UiPanel, Instance.GetNode("NameInput")); + return _L_NameInput; + } + } + private NameInput _L_NameInput; + + public HBoxContainer(EditorImportCombinationPanel uiPanel, Godot.HBoxContainer node) : base(uiPanel, node) { } + public override HBoxContainer Clone() => new (UiPanel, (Godot.HBoxContainer)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2.PreviewLabel + /// + public class PreviewLabel : UiNode + { + public PreviewLabel(EditorImportCombinationPanel uiPanel, Godot.Label node) : base(uiPanel, node) { } + public override PreviewLabel Clone() => new (UiPanel, (Godot.Label)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2.RemarkInput + /// + public class RemarkInput : UiNode + { + public RemarkInput(EditorImportCombinationPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { } + public override RemarkInput Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2 + /// + public class HBoxContainer2 : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.PreviewLabel + /// + public PreviewLabel L_PreviewLabel + { + get + { + if (_L_PreviewLabel == null) _L_PreviewLabel = new PreviewLabel(UiPanel, Instance.GetNode("PreviewLabel")); + return _L_PreviewLabel; + } + } + private PreviewLabel _L_PreviewLabel; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.RemarkInput + /// + public RemarkInput L_RemarkInput + { + get + { + if (_L_RemarkInput == null) _L_RemarkInput = new RemarkInput(UiPanel, Instance.GetNode("RemarkInput")); + return _L_RemarkInput; + } + } + private RemarkInput _L_RemarkInput; + + public HBoxContainer2(EditorImportCombinationPanel uiPanel, Godot.HBoxContainer node) : base(uiPanel, node) { } + public override HBoxContainer2 Clone() => new (UiPanel, (Godot.HBoxContainer)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer.VBoxContainer + /// + public class VBoxContainer : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.HBoxContainer + /// + public HBoxContainer L_HBoxContainer + { + get + { + if (_L_HBoxContainer == null) _L_HBoxContainer = new HBoxContainer(UiPanel, Instance.GetNode("HBoxContainer")); + return _L_HBoxContainer; + } + } + private HBoxContainer _L_HBoxContainer; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.HBoxContainer2 + /// + public HBoxContainer2 L_HBoxContainer2 + { + get + { + if (_L_HBoxContainer2 == null) _L_HBoxContainer2 = new HBoxContainer2(UiPanel, Instance.GetNode("HBoxContainer2")); + return _L_HBoxContainer2; + } + } + private HBoxContainer2 _L_HBoxContainer2; + + public VBoxContainer(EditorImportCombinationPanel uiPanel, Godot.VBoxContainer node) : base(uiPanel, node) { } + public override VBoxContainer Clone() => new (UiPanel, (Godot.VBoxContainer)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: EditorImportCombination.MarginContainer + /// + public class MarginContainer : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorImportCombination.VBoxContainer + /// + public VBoxContainer L_VBoxContainer + { + get + { + if (_L_VBoxContainer == null) _L_VBoxContainer = new VBoxContainer(UiPanel, Instance.GetNode("VBoxContainer")); + return _L_VBoxContainer; + } + } + private VBoxContainer _L_VBoxContainer; + + public MarginContainer(EditorImportCombinationPanel uiPanel, Godot.MarginContainer node) : base(uiPanel, node) { } + public override MarginContainer Clone() => new (UiPanel, (Godot.MarginContainer)Instance.Duplicate()); + } + + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer.NameLabel + /// + public NameLabel S_NameLabel => L_MarginContainer.L_VBoxContainer.L_HBoxContainer.L_NameLabel; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer.NameInput + /// + public NameInput S_NameInput => L_MarginContainer.L_VBoxContainer.L_HBoxContainer.L_NameInput; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer + /// + public HBoxContainer S_HBoxContainer => L_MarginContainer.L_VBoxContainer.L_HBoxContainer; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2.PreviewLabel + /// + public PreviewLabel S_PreviewLabel => L_MarginContainer.L_VBoxContainer.L_HBoxContainer2.L_PreviewLabel; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2.RemarkInput + /// + public RemarkInput S_RemarkInput => L_MarginContainer.L_VBoxContainer.L_HBoxContainer2.L_RemarkInput; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer.HBoxContainer2 + /// + public HBoxContainer2 S_HBoxContainer2 => L_MarginContainer.L_VBoxContainer.L_HBoxContainer2; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer.VBoxContainer + /// + public VBoxContainer S_VBoxContainer => L_MarginContainer.L_VBoxContainer; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: EditorImportCombination.MarginContainer + /// + public MarginContainer S_MarginContainer => L_MarginContainer; + +} diff --git a/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombinationPanel.cs b/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombinationPanel.cs new file mode 100644 index 0000000..2caeb49 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/editorImportCombination/EditorImportCombinationPanel.cs @@ -0,0 +1,18 @@ +using Godot; + +namespace UI.EditorImportCombination; + +public partial class EditorImportCombinationPanel : EditorImportCombination +{ + + public override void OnCreateUi() + { + + } + + public override void OnDestroyUi() + { + + } + +} diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/TileSetEditorCombinationPanel.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/TileSetEditorCombinationPanel.cs index 6a9e253..78f12e6 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/TileSetEditorCombinationPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/TileSetEditorCombinationPanel.cs @@ -18,6 +18,8 @@ AddEventListener(EventEnum.OnSetTileTexture, OnSetTileTexture); //改变背景颜色事件 AddEventListener(EventEnum.OnSetTileSetBgColor, OnSetTileSetBgColor); + + } public override void OnShowUi() diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/leftTop/TileEditCombination.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/leftTop/TileEditCombination.cs index 751e698..72ff60b 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/leftTop/TileEditCombination.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorCombination/leftTop/TileEditCombination.cs @@ -29,7 +29,6 @@ private bool _canvasDirty = false; // ----------------------------------------------------------------------- - public override void SetUiNode(IUiNode uiNode) { base.SetUiNode(uiNode); @@ -170,11 +169,14 @@ if (size == Vector2.Zero) { EditorWindowManager.ShowTips("警告", "请先绘制组合图块!"); + return; } else if (size == GameConfig.TileCellSizeVector2I) { EditorWindowManager.ShowTips("警告", "导入一格大小的组合图块没有任何意义!"); + return; } + } //绘制笔刷