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