diff --git a/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn b/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn index 9e02b0b..a2e0da3 100644 --- a/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn +++ b/DungeonShooting_Godot/prefab/ui/TileSetEditorTerrain.tscn @@ -1,9 +1,13 @@ -[gd_scene load_steps=5 format=3 uid="uid://dfqb73y4br8yd"] +[gd_scene load_steps=9 format=3 uid="uid://dfqb73y4br8yd"] [ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs" id="1_6jjk7"] [ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/left/TileEditArea.cs" id="2_ynf0r"] [ext_resource type="Script" path="res://src/game/common/ui/EditorMaskBrush.cs" id="3_gydh0"] +[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/right/TileEditTerrain.cs" id="5_0x7yx"] [ext_resource type="Texture2D" uid="uid://d2wslibovwv7w" path="res://resource/sprite/ui/commonIcon/CenterTool.png" id="5_08bc4"] +[ext_resource type="Texture2D" uid="uid://18dira1me63t" path="res://resource/sprite/map/PreviewMap.png" id="5_m0oxr"] +[ext_resource type="Texture2D" uid="uid://bqdrgtiyilkma" path="res://resource/sprite/map/PreviewMapShadow.png" id="7_68ntx"] +[ext_resource type="Script" path="res://src/game/ui/tileSetEditorTerrain/right/TerrainBrush.cs" id="7_lmu64"] [node name="TileSetEditorTerrain" type="Control"] layout_mode = 3 @@ -13,6 +17,7 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_6jjk7") +Layer = null [node name="HSplitContainer" type="HSplitContainer" parent="."] layout_mode = 1 @@ -116,7 +121,42 @@ clip_children = 2 z_index = 1 layout_mode = 2 -color = Color(0.203922, 0.203922, 0.203922, 1) +color = Color(0, 0, 0, 1) +script = ExtResource("5_0x7yx") + +[node name="TileTexture" type="TextureRect" parent="HSplitContainer/LeftBottom2/MarginContainer/LeftBottomBg"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -64.0 +offset_top = -72.0 +offset_right = 64.0 +offset_bottom = 72.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("5_m0oxr") +stretch_mode = 2 + +[node name="TileShadow" type="TextureRect" parent="HSplitContainer/LeftBottom2/MarginContainer/LeftBottomBg/TileTexture"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("7_68ntx") +stretch_mode = 2 + +[node name="Brush" type="Control" parent="HSplitContainer/LeftBottom2/MarginContainer/LeftBottomBg/TileTexture"] +layout_mode = 1 +anchors_preset = 0 +offset_right = 1.0 +offset_bottom = 1.0 +script = ExtResource("7_lmu64") [node name="Grid" type="ColorRect" parent="HSplitContainer/LeftBottom2/MarginContainer/LeftBottomBg"] layout_mode = 1 diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png index 6887735..10ab06e 100644 --- a/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png +++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMap.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png new file mode 100644 index 0000000..d68ed77 --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import new file mode 100644 index 0000000..917949a --- /dev/null +++ b/DungeonShooting_Godot/resource/sprite/map/PreviewMapShadow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqdrgtiyilkma" +path="res://.godot/imported/PreviewMapShadow.png-3130416368f768977b52443934e01dc1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/sprite/map/PreviewMapShadow.png" +dest_files=["res://.godot/imported/PreviewMapShadow.png-3130416368f768977b52443934e01dc1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png index 13d2000..8f3d4af 100644 --- a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png +++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png index 4c71a5f..f35e713 100644 --- a/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png +++ b/DungeonShooting_Godot/resource/sprite/map/PreviewTransition2.png Binary files differ diff --git a/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png b/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png index f01f30b..da720ec 100644 --- a/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png +++ b/DungeonShooting_Godot/resource/sprite/map/WallTransition2.png Binary files differ diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs index c4349c5..392b88e 100644 --- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs +++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs @@ -216,6 +216,8 @@ public const string resource_sprite_explode_Explode_pit0001_png = "res://resource/sprite/explode/Explode_pit0001.png"; public const string resource_sprite_map_door_png = "res://resource/sprite/map/door.png"; public const string resource_sprite_map_door1_down_png = "res://resource/sprite/map/door1_down.png"; + public const string resource_sprite_map_PreviewMap_png = "res://resource/sprite/map/PreviewMap.png"; + public const string resource_sprite_map_PreviewMapShadow_png = "res://resource/sprite/map/PreviewMapShadow.png"; public const string resource_sprite_map_PreviewTransition_png = "res://resource/sprite/map/PreviewTransition.png"; public const string resource_sprite_map_PreviewTransition2_png = "res://resource/sprite/map/PreviewTransition2.png"; public const string resource_sprite_map_WallTransition1_png = "res://resource/sprite/map/WallTransition1.png"; diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs index 42f6ca9..24d8abe 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs @@ -26,6 +26,8 @@ public sealed override void OnInitNestedUi() { _ = L_HSplitContainer.L_LeftBottom.L_MarginContainer.L_LeftBg; + _ = L_HSplitContainer.L_LeftBottom2.L_MarginContainer.L_LeftBottomBg; + _ = L_HSplitContainer.L_LeftBottom2.L_MarginContainer.L_LeftBottomBg.L_TileTexture.L_Brush; } @@ -171,6 +173,59 @@ } /// + /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileTexture.TileShadow + /// + public class TileShadow : UiNode + { + public TileShadow(TileSetEditorTerrainPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { } + public override TileShadow Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileTexture.Brush + /// + public class Brush : UiNode + { + public Brush(TileSetEditorTerrainPanel uiPanel, UI.TileSetEditorTerrain.TerrainBrush node) : base(uiPanel, node) { } + public override Brush Clone() => new (UiPanel, (UI.TileSetEditorTerrain.TerrainBrush)Instance.Duplicate()); + } + + /// + /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileTexture + /// + public class TileTexture_1 : UiNode + { + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileShadow + /// + public TileShadow L_TileShadow + { + get + { + if (_L_TileShadow == null) _L_TileShadow = new TileShadow(UiPanel, Instance.GetNode("TileShadow")); + return _L_TileShadow; + } + } + private TileShadow _L_TileShadow; + + /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.Brush + /// + public Brush L_Brush + { + get + { + if (_L_Brush == null) _L_Brush = new Brush(UiPanel, Instance.GetNode("Brush")); + return _L_Brush; + } + } + private Brush _L_Brush; + + public TileTexture_1(TileSetEditorTerrainPanel uiPanel, Godot.TextureRect node) : base(uiPanel, node) { } + public override TileTexture_1 Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate()); + } + + /// /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.Grid /// public class Grid_1 : UiNode @@ -189,11 +244,24 @@ } /// - /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg + /// 类型: , 路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg /// - public class LeftBottomBg : UiNode + public class LeftBottomBg : UiNode { /// + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.TileTexture + /// + public TileTexture_1 L_TileTexture + { + get + { + if (_L_TileTexture == null) _L_TileTexture = new TileTexture_1(UiPanel, Instance.GetNode("TileTexture")); + return _L_TileTexture; + } + } + private TileTexture_1 _L_TileTexture; + + /// /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.Grid /// public Grid_1 L_Grid @@ -219,8 +287,8 @@ } private FocusBtn_1 _L_FocusBtn; - public LeftBottomBg(TileSetEditorTerrainPanel uiPanel, Godot.ColorRect node) : base(uiPanel, node) { } - public override LeftBottomBg Clone() => new (UiPanel, (Godot.ColorRect)Instance.Duplicate()); + public LeftBottomBg(TileSetEditorTerrainPanel uiPanel, UI.TileSetEditorTerrain.TileEditTerrain node) : base(uiPanel, node) { } + public override LeftBottomBg Clone() => new (UiPanel, (UI.TileSetEditorTerrain.TileEditTerrain)Instance.Duplicate()); } /// @@ -229,13 +297,13 @@ public class MarginContainer_1 : UiNode { /// - /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.LeftBottomBg + /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.LeftBottomBg /// public LeftBottomBg L_LeftBottomBg { get { - if (_L_LeftBottomBg == null) _L_LeftBottomBg = new LeftBottomBg(UiPanel, Instance.GetNode("LeftBottomBg")); + if (_L_LeftBottomBg == null) _L_LeftBottomBg = new LeftBottomBg(UiPanel, Instance.GetNode("LeftBottomBg")); return _L_LeftBottomBg; } } @@ -309,11 +377,6 @@ public MaskBrush S_MaskBrush => L_HSplitContainer.L_LeftBottom.L_MarginContainer.L_LeftBg.L_TileTexture.L_MaskBrush; /// - /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom.MarginContainer.LeftBg.TileTexture - /// - public TileTexture S_TileTexture => L_HSplitContainer.L_LeftBottom.L_MarginContainer.L_LeftBg.L_TileTexture; - - /// /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom.MarginContainer.LeftBg /// public LeftBg S_LeftBg => L_HSplitContainer.L_LeftBottom.L_MarginContainer.L_LeftBg; @@ -324,7 +387,17 @@ public LeftBottom S_LeftBottom => L_HSplitContainer.L_LeftBottom; /// - /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg + /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileTexture.TileShadow + /// + public TileShadow S_TileShadow => L_HSplitContainer.L_LeftBottom2.L_MarginContainer.L_LeftBottomBg.L_TileTexture.L_TileShadow; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg.TileTexture.Brush + /// + public Brush S_Brush => L_HSplitContainer.L_LeftBottom2.L_MarginContainer.L_LeftBottomBg.L_TileTexture.L_Brush; + + /// + /// 场景中唯一名称的节点, 节点类型: , 节点路径: TileSetEditorTerrain.HSplitContainer.LeftBottom2.MarginContainer.LeftBottomBg /// public LeftBottomBg S_LeftBottomBg => L_HSplitContainer.L_LeftBottom2.L_MarginContainer.L_LeftBottomBg; diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/left/TileEditArea.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/left/TileEditArea.cs index 95f738b..c66b3f6 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/left/TileEditArea.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/left/TileEditArea.cs @@ -21,8 +21,6 @@ /// public void OnChangeTileSetTexture() { - // var width = UiNode.UiPanel.EditorPanel.CellHorizontal; - // var height = UiNode.UiPanel.EditorPanel.CellVertical; UiNode.L_TileTexture.Instance.Size = UiNode.L_TileTexture.Instance.Texture.GetSize(); OnFocusClick(); } diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TerrainBrush.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TerrainBrush.cs new file mode 100644 index 0000000..4793d95 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TerrainBrush.cs @@ -0,0 +1,33 @@ +using Godot; + +namespace UI.TileSetEditorTerrain; + +public partial class TerrainBrush : Control, IUiNodeScript +{ + public TileSetEditorTerrain.TileTexture_1 TileTexture { get; set; } + + private TileSetEditorTerrain.Brush _brush; + + public void SetUiNode(IUiNode uiNode) + { + _brush = (TileSetEditorTerrain.Brush)uiNode; + } + + public void OnDestroy() + { + + } + + public override void _Process(double delta) + { + QueueRedraw(); + } + + public override void _Draw() + { + DrawRect( + new Rect2(GameConfig.TileCellSizeVector2I, + TileTexture.Instance.Texture.GetSize() - GameConfig.TileCellSizeVector2I * 2), Colors.Green, false, + 2f / TileTexture.Instance.Scale.X); + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TileEditTerrain.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TileEditTerrain.cs new file mode 100644 index 0000000..d7d1a52 --- /dev/null +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/right/TileEditTerrain.cs @@ -0,0 +1,40 @@ +using Godot; + +namespace UI.TileSetEditorTerrain; + +public partial class TileEditTerrain : EditorGridBg +{ + public override void SetUiNode(IUiNode uiNode) + { + base.SetUiNode(uiNode); + InitNode(UiNode.L_TileTexture.Instance, UiNode.L_Grid.Instance); + UiNode.L_TileTexture.L_Brush.Instance.TileTexture = UiNode.L_TileTexture; + + //聚焦按钮点击 + UiNode.L_FocusBtn.Instance.Pressed += OnFocusClick; + } + + public override void _Process(double delta) + { + var isMouseInRect = UiNode.L_TileTexture.Instance.IsMouseInRect(); + UiNode.L_Grid.Instance.Visible = isMouseInRect; + UiNode.L_TileTexture.L_Brush.Instance.Visible = isMouseInRect; + } + + /// + /// 改变TileSet纹理 + /// + public void OnChangeTileSetTexture() + { + //UiNode.L_TileTexture.Instance.Size = UiNode.L_TileTexture.Instance.Texture.GetSize(); + OnFocusClick(); + } + + //聚焦按钮点击 + private void OnFocusClick() + { + var texture = UiNode.L_TileTexture.Instance.Texture; + Utils.DoFocusNode(ContainerRoot, Size, texture != null ? texture.GetSize() : Vector2.Zero); + RefreshGridTrans(); + } +} \ No newline at end of file