diff --git a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
index 6531b94..d4d4e18 100644
--- a/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
+++ b/DungeonShooting_Godot/prefab/ui/MapEditorTools.tscn
@@ -1,6 +1,7 @@
-[gd_scene load_steps=6 format=3 uid="uid://b4u66mxndxbrg"]
+[gd_scene load_steps=7 format=3 uid="uid://b4u66mxndxbrg"]
[ext_resource type="Script" path="res://src/game/ui/mapEditorTools/MapEditorToolsPanel.cs" id="1_mqp1c"]
+[ext_resource type="Script" path="res://src/game/ui/mapEditorTools/DoorHoverArea.cs" id="2_6qfy3"]
[ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="2_rwvbg"]
[ext_resource type="Script" path="res://src/game/ui/mapEditorTools/DoorDragArea.cs" id="3_3w0w6"]
[ext_resource type="Script" path="res://src/game/ui/mapEditorTools/DoorDragButton.cs" id="3_45muq"]
@@ -16,6 +17,134 @@
mouse_filter = 1
script = ExtResource("1_mqp1c")
+[node name="DoorToolRoot" type="Control" parent="."]
+anchors_preset = 0
+offset_right = 40.0
+offset_bottom = 40.0
+
+[node name="N_HoverRoot" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+
+[node name="N_HoverArea" type="ColorRect" parent="DoorToolRoot/N_HoverRoot"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_top = -36.0
+offset_right = 160.0
+grow_vertical = 0
+color = Color(1, 1, 1, 0)
+script = ExtResource("2_6qfy3")
+
+[node name="E_HoverRoot" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+rotation = 1.5708
+
+[node name="E_HoverArea" type="ColorRect" parent="DoorToolRoot/E_HoverRoot"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_top = -36.0
+offset_right = 160.0
+grow_vertical = 0
+color = Color(1, 1, 1, 0)
+script = ExtResource("2_6qfy3")
+
+[node name="S_HoverRoot" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+rotation = 3.14159
+scale = Vector2(-1, 1)
+
+[node name="S_HoverArea" type="ColorRect" parent="DoorToolRoot/S_HoverRoot"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_top = -36.0
+offset_right = 160.0
+grow_vertical = 0
+color = Color(1, 1, 1, 0)
+script = ExtResource("2_6qfy3")
+
+[node name="W_HoverRoot" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+rotation = 4.71239
+scale = Vector2(-1, 1)
+
+[node name="W_HoverArea" type="ColorRect" parent="DoorToolRoot/W_HoverRoot"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_top = -36.0
+offset_right = 160.0
+grow_vertical = 0
+color = Color(1, 1, 1, 0)
+script = ExtResource("2_6qfy3")
+
+[node name="HoverPrevRoot" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+mouse_filter = 2
+
+[node name="HoverPrev" type="TextureRect" parent="DoorToolRoot/HoverPrevRoot"]
+layout_mode = 1
+anchors_preset = 7
+anchor_left = 0.5
+anchor_top = 1.0
+anchor_right = 0.5
+anchor_bottom = 1.0
+offset_left = -1.5
+offset_top = -36.0
+offset_right = 1.5
+grow_horizontal = 2
+grow_vertical = 0
+mouse_filter = 2
+texture = ExtResource("3_trbb5")
+
+[node name="DoorToolTemplate" type="Control" parent="DoorToolRoot"]
+anchors_preset = 0
+script = ExtResource("3_3w0w6")
+
+[node name="DoorArea" type="ColorRect" parent="DoorToolRoot/DoorToolTemplate"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_top = -32.0
+offset_right = 64.0
+grow_vertical = 0
+color = Color(0.184314, 1, 0.0392157, 0.188235)
+
+[node name="StartBtn" type="TextureButton" parent="DoorToolRoot/DoorToolTemplate"]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -3.0
+offset_top = -36.0
+grow_horizontal = 0
+grow_vertical = 0
+mouse_filter = 1
+texture_normal = ExtResource("3_trbb5")
+stretch_mode = 0
+script = ExtResource("3_45muq")
+
+[node name="EndBtn" type="TextureButton" parent="DoorToolRoot/DoorToolTemplate"]
+layout_mode = 1
+anchors_preset = 2
+anchor_top = 1.0
+anchor_bottom = 1.0
+offset_left = 64.0
+offset_top = -36.0
+offset_right = 67.0
+grow_vertical = 0
+texture_normal = ExtResource("3_trbb5")
+stretch_mode = 0
+script = ExtResource("3_45muq")
+
[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 1
@@ -50,45 +179,3 @@
texture_normal = ExtResource("2_rwvbg")
texture_pressed = ExtResource("2_rwvbg")
texture_hover = ExtResource("2_rwvbg")
-
-[node name="DoorToolTemplate" type="Control" parent="."]
-anchors_preset = 0
-script = ExtResource("3_3w0w6")
-
-[node name="DoorArea" type="ColorRect" parent="DoorToolTemplate"]
-layout_mode = 1
-anchors_preset = 2
-anchor_top = 1.0
-anchor_bottom = 1.0
-offset_top = -32.0
-offset_right = 64.0
-grow_vertical = 0
-color = Color(0.184314, 1, 0.0392157, 0.188235)
-
-[node name="StartBtn" type="TextureButton" parent="DoorToolTemplate"]
-layout_mode = 1
-anchors_preset = 3
-anchor_left = 1.0
-anchor_top = 1.0
-anchor_right = 1.0
-anchor_bottom = 1.0
-offset_left = -2.0
-offset_top = -36.0
-grow_horizontal = 0
-grow_vertical = 0
-texture_normal = ExtResource("3_trbb5")
-stretch_mode = 0
-script = ExtResource("3_45muq")
-
-[node name="EndBtn" type="TextureButton" parent="DoorToolTemplate"]
-layout_mode = 1
-anchors_preset = 2
-anchor_top = 1.0
-anchor_bottom = 1.0
-offset_left = 64.0
-offset_top = -36.0
-offset_right = 66.0
-grow_vertical = 0
-texture_normal = ExtResource("3_trbb5")
-stretch_mode = 0
-script = ExtResource("3_45muq")
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/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs
index 765ece3..2148b40 100644
--- a/DungeonShooting_Godot/src/framework/common/Utils.cs
+++ b/DungeonShooting_Godot/src/framework/common/Utils.cs
@@ -158,9 +158,10 @@
///
public static bool IsPositionOver(this Control control, Vector2 position)
{
- var rect = control.GetRect();
- return position.X >= rect.Position.X && position.X <= rect.End.X &&
- position.Y >= rect.Position.Y && position.Y <= rect.End.Y;
+ var globalPosition = control.GlobalPosition;
+ var size = control.Size * control.Scale;
+ return position.X >= globalPosition.X && position.X <= (globalPosition.X + size.X) &&
+ position.Y >= globalPosition.Y && position.Y <= (globalPosition.Y + size.Y);
}
diff --git a/DungeonShooting_Godot/src/framework/map/data/DoorAreaInfo.cs b/DungeonShooting_Godot/src/framework/map/data/DoorAreaInfo.cs
index 8d2263c..0ee84b0 100644
--- a/DungeonShooting_Godot/src/framework/map/data/DoorAreaInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/data/DoorAreaInfo.cs
@@ -5,7 +5,7 @@
///
/// 用于描述门生成区域
///
-public class DoorAreaInfo
+public class DoorAreaInfo : IClone
{
///
/// 门方向
@@ -68,4 +68,15 @@
break;
}
}
+
+ public DoorAreaInfo Clone()
+ {
+ var data = new DoorAreaInfo();
+ data.Start = Start;
+ data.End = End;
+ data.Direction = Direction;
+ return data;
+ }
+
+
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/GameConfig.cs b/DungeonShooting_Godot/src/game/GameConfig.cs
index 9cb8fec..2eeb673 100644
--- a/DungeonShooting_Godot/src/game/GameConfig.cs
+++ b/DungeonShooting_Godot/src/game/GameConfig.cs
@@ -26,6 +26,10 @@
///
public const int TileCellSize = 16;
///
+ /// 游戏地图网格大小, 向量表示
+ ///
+ public static readonly Vector2I TileCellSizeVector2I = new Vector2I(TileCellSize, TileCellSize);
+ ///
/// 房间最小间距
///
public const int RoomSpace = 4;
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/TileView/EditorTileMap.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/TileView/EditorTileMap.cs
index b7ee115..bdfa6f9 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditor/TileView/EditorTileMap.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditor/TileView/EditorTileMap.cs
@@ -114,7 +114,10 @@
private DungeonRoomSplit _roomSplit;
//变动过的数据
+
+ //地图位置, 单位: 格
private Vector2I _roomPosition;
+ //地图大小, 单位: 格
private Vector2I _roomSize;
private List _doorConfigs = new List();
//-------------------------------
@@ -371,9 +374,12 @@
var tileInfo = roomSplit.TileInfo;
_roomPosition = roomInfo.Position.AsVector2I();
- _roomSize = roomInfo.Size.AsVector2I();
+ SetMapSize(roomInfo.Size.AsVector2I());
_doorConfigs.Clear();
- _doorConfigs.AddRange(roomInfo.DoorAreaInfos);
+ foreach (var doorAreaInfo in roomInfo.DoorAreaInfos)
+ {
+ _doorConfigs.Add(doorAreaInfo.Clone());
+ }
//初始化层级数据
InitLayer();
@@ -389,8 +395,12 @@
//聚焦
//MapEditorPanel.CallDelay(0.1f, OnClickCenterTool);
CallDeferred(nameof(OnClickCenterTool));
-
- MapEditorToolsPanel.S_DoorToolTemplate.Instance.SetDoorAreaPosition(_roomPosition * GameConfig.TileCellSize);
+
+ var doorPos = (_roomPosition + new Vector2I(_roomSize.X - 1, 1)) * GameConfig.TileCellSize;
+ MapEditorToolsPanel.CreateDoorTool(
+ doorPos, DoorDirection.E,
+ 0 * GameConfig.TileCellSize, 4 * GameConfig.TileCellSize
+ );
return true;
}
@@ -547,7 +557,7 @@
{
var rect = GetUsedRect();
_roomPosition = rect.Position;
- _roomSize = rect.Size;
+ SetMapSize(rect.Size);
}
//检测是否有不合规的图块, 返回true表示图块正常
@@ -732,6 +742,11 @@
}
}
+ public void Create_N_DoorArea()
+ {
+
+ }
+
//保存房间配置
private void SaveRoomInfoConfig()
{
@@ -786,4 +801,14 @@
Position = pos;
MapEditorToolsPanel.SetDoorToolTransform(pos, Scale);
}
+
+ //设置地图大小
+ private void SetMapSize(Vector2I size)
+ {
+ if (_roomSize != size)
+ {
+ _roomSize = size;
+ MapEditorToolsPanel.SetDoorHoverToolTransform(_roomPosition, _roomSize);
+ }
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragArea.cs b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragArea.cs
index daa9955..d393db6 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragArea.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragArea.cs
@@ -5,7 +5,7 @@
public partial class DoorDragArea : Control
{
///
- /// 当前区域所占大小
+ /// 当前区域所占大小, 单位: 像素
///
public Vector2 AreaSize => new Vector2(_areaSize, GameConfig.TileCellSize * 2);
@@ -23,21 +23,15 @@
//默认颜色
private Color _defaultColor;
//区域大小, 单位: 像素
- private int _areaSize;
+ private int _areaSize = GameConfig.TileCellSize * 4;
//拖拽松手后是否可以提交
private bool _canComment = true;
//开始拖拽时的区域
private Vector2I _startDragRange;
- //原始缩放
- private Vector2 _originScale;
- //原始坐标
- private Vector2 _originPosition;
public void SetDoorDragAreaNode(MapEditorTools.DoorToolTemplate node)
{
_node = node;
- _originScale = Scale;
- _originPosition = Position;
_defaultColor = _node.L_DoorArea.Instance.Color;
_node.L_StartBtn.Instance.DragEvent += OnStartAreaDrag;
_node.L_EndBtn.Instance.DragEvent += OnEndAreaDrag;
@@ -47,11 +41,11 @@
}
///
- /// 设置门区域的位置
+ /// 设置门区域的位置, 单位: 像素
///
public void SetDoorAreaPosition(Vector2 position)
{
- _originPosition = position;
+ Position = position;
}
///
@@ -62,66 +56,55 @@
Direction = direction;
if (direction == DoorDirection.N)
{
- _originScale = new Vector2(1, 1);
+ Scale = new Vector2(1, 1);
RotationDegrees = 0;
}
else if (direction == DoorDirection.E)
{
- _originScale = new Vector2(1, 1);
+ Scale = new Vector2(1, 1);
RotationDegrees = 90;
}
else if (direction == DoorDirection.S)
{
- _originScale = new Vector2(-1, 1);
+ Scale = new Vector2(-1, 1);
RotationDegrees = 180;
}
else
{
- _originScale = new Vector2(-1, 1);
+ Scale = new Vector2(-1, 1);
RotationDegrees = 270;
}
}
-
- ///
- /// 设置位置和缩放, 用于跟随地图
- ///
- public void SetDoorAreaTransform(Vector2 pos, Vector2 scale)
- {
- Position = _originPosition * scale + pos;
- Scale = _originScale * scale;
- }
-
+
///
/// 获取门区域所占范围, 单位: 像素, 返回的 Vector2I 的 x 代表起始坐标, y 代表结束坐标
///
///
public Vector2I GetDoorAreaRange()
{
- return new Vector2I((int)_node.L_StartBtn.Instance.Position.X, _areaSize);
+ return new Vector2I((int)(_node.L_StartBtn.Instance.Position.X + _node.L_StartBtn.Instance.Size.X), _areaSize);
}
///
- /// 设置门区域所占范围,
+ /// 设置门区域所占范围, 单位: 像素
///
public void SetDoorAreaRange(int start, int size)
{
var startPosition = _node.L_StartBtn.Instance.Position;
- startPosition.X = start;
+ startPosition.X = start - _node.L_StartBtn.Instance.Size.X;
_node.L_StartBtn.Instance.Position = startPosition;
SetDoorAreaSize(size);
}
-
+
///
- /// 设置区域大小
+ /// 设置区域大小, 单位: 像素
///
public void SetDoorAreaSize(int value)
{
- if (_areaSize != value)
- {
- _areaSize = value;
- RefreshArea();
- }
+ _areaSize = value;
+ RefreshArea();
+ GD.Print("size: " + GetDoorAreaRange());
}
//刷新区域位置
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragButton.cs b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragButton.cs
index a3aa53c..3a54a10 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragButton.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorDragButton.cs
@@ -6,6 +6,7 @@
public partial class DoorDragButton : TextureButton
{
private static Vector2 _stepValue = new Vector2(GameConfig.TileCellSize, GameConfig.TileCellSize);
+
///
/// 拖拽当前物体的回调函数, 第一个参数为拖拽状态, 第二个参数为相对于初始点的拖拽偏移坐标
@@ -16,6 +17,7 @@
private bool _down;
private Vector2 _startPos;
private Vector2 _prevPos;
+ private MapEditorToolsPanel _mapEditorToolsPanel;
public override void _Ready()
{
@@ -24,13 +26,19 @@
ButtonUp += OnButtonUp;
}
+ public void SetMapEditorToolsPanel(MapEditorToolsPanel panel)
+ {
+ _mapEditorToolsPanel = panel;
+ }
+
public override void _Process(double delta)
{
if (_down)
{
if (DragEvent != null)
{
- var offset = Utils.Adsorption((GetGlobalMousePosition() - _startPos) / _parent.Scale, _stepValue);
+ var value = (GetGlobalMousePosition() - _startPos) / _parent.Scale / _mapEditorToolsPanel.S_DoorToolRoot.Instance.Scale;
+ var offset = Utils.Adsorption(value, _stepValue);
//处理朝向问题
if (_parent.Direction == DoorDirection.E)
{
@@ -72,7 +80,8 @@
Modulate = new Color(1, 1, 1, 1);
if (DragEvent != null)
{
- var offset = Utils.Adsorption((GetGlobalMousePosition() - _startPos) / _parent.Scale, _stepValue);
+ var value = (GetGlobalMousePosition() - _startPos) / _parent.Scale / _mapEditorToolsPanel.S_DoorToolRoot.Instance.Scale;
+ var offset = Utils.Adsorption(value, _stepValue);
_prevPos = offset;
DragEvent(DragState.DragEnd, offset);
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorHoverArea.cs b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorHoverArea.cs
new file mode 100644
index 0000000..c2c017c
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorTools/DoorHoverArea.cs
@@ -0,0 +1,83 @@
+using Godot;
+using UI.MapEditorTools;
+
+public partial class DoorHoverArea : ColorRect
+{
+ ///
+ /// 所属 Ui 对象
+ ///
+ public MapEditorToolsPanel MapEditorToolsPanel { get; private set; }
+
+ ///
+ /// 房间门的朝向
+ ///
+ public DoorDirection Direction { get; private set; }
+
+ private bool _mouseHover;
+ private bool _isDrag;
+ private Control _parent;
+
+ private MapEditorTools.DoorToolTemplate _dragArea;
+ private MapEditorTools.HoverPrevRoot _cloneRoot;
+
+ public override void _Ready()
+ {
+ _parent = GetParent();
+ MouseEntered += OnMouseEnter;
+ MouseExited += OnMouseExit;
+ }
+
+ public void Init(MapEditorToolsPanel panel, DoorDirection direction)
+ {
+ MapEditorToolsPanel = panel;
+ Direction = direction;
+ }
+
+ public override void _Process(double delta)
+ {
+
+ if (_mouseHover && MapEditorToolsPanel.ActiveHoverArea == this)
+ {
+ var globalPosition = _parent.GlobalPosition;
+ var start = Utils.Adsorption(_parent.GetLocalMousePosition().X, GameConfig.TileCellSize);
+ //MapEditorToolsPanel.S_HoverPrevRoot.Instance.Visible = true;
+ //MapEditorToolsPanel.S_HoverPrevRoot.Instance.GlobalPosition = new Vector2();
+
+ if (!_isDrag)
+ {
+ if (Input.IsMouseButtonPressed(MouseButton.Left))
+ {
+ _isDrag = true;
+ _dragArea = MapEditorToolsPanel.CreateDoorTool(globalPosition, Direction, start, 4 * GameConfig.TileCellSize);
+ }
+ }
+ else
+ {
+ if (!Input.IsMouseButtonPressed(MouseButton.Left))
+ {
+ _isDrag = false;
+ MapEditorToolsPanel.RemoveDoorTool(_dragArea);
+ _dragArea = null;
+ }
+ }
+ }
+ }
+
+ private void OnMouseEnter()
+ {
+ if (MapEditorToolsPanel.ActiveHoverArea == null || !MapEditorToolsPanel.ActiveHoverArea._isDrag)
+ {
+ _mouseHover = true;
+ MapEditorToolsPanel.SetActiveHoverArea(this);
+ }
+ }
+
+ private void OnMouseExit()
+ {
+ if (MapEditorToolsPanel.ActiveHoverArea == null || !MapEditorToolsPanel.ActiveHoverArea._isDrag)
+ {
+ _mouseHover = false;
+ MapEditorToolsPanel.S_HoverPrevRoot.Instance.Visible = false;
+ }
+ }
+}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorTools.cs b/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorTools.cs
index ce76bfd..8d6ccc4 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorTools.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorTools.cs
@@ -6,6 +6,19 @@
public abstract partial class MapEditorTools : UiBase
{
///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot
+ ///
+ public DoorToolRoot L_DoorToolRoot
+ {
+ get
+ {
+ if (_L_DoorToolRoot == null) _L_DoorToolRoot = new DoorToolRoot(this, GetNodeOrNull("DoorToolRoot"));
+ return _L_DoorToolRoot;
+ }
+ }
+ private DoorToolRoot _L_DoorToolRoot;
+
+ ///
/// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.HBoxContainer
///
public HBoxContainer L_HBoxContainer
@@ -18,19 +31,6 @@
}
private HBoxContainer _L_HBoxContainer;
- ///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate
- ///
- public DoorToolTemplate L_DoorToolTemplate
- {
- get
- {
- if (_L_DoorToolTemplate == null) _L_DoorToolTemplate = new DoorToolTemplate(this, GetNodeOrNull("DoorToolTemplate"));
- return _L_DoorToolTemplate;
- }
- }
- private DoorToolTemplate _L_DoorToolTemplate;
-
public MapEditorTools() : base(nameof(MapEditorTools))
{
@@ -41,6 +41,323 @@
}
///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.N_HoverRoot.N_HoverArea
+ ///
+ public class N_HoverArea : UiNode
+ {
+ public N_HoverArea(MapEditorTools uiPanel, DoorHoverArea node) : base(uiPanel, node) { }
+ public override N_HoverArea Clone() => new (UiPanel, (DoorHoverArea)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.N_HoverRoot
+ ///
+ public class N_HoverRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.N_HoverArea
+ ///
+ public N_HoverArea L_N_HoverArea
+ {
+ get
+ {
+ if (_L_N_HoverArea == null) _L_N_HoverArea = new N_HoverArea(UiPanel, Instance.GetNodeOrNull("N_HoverArea"));
+ return _L_N_HoverArea;
+ }
+ }
+ private N_HoverArea _L_N_HoverArea;
+
+ public N_HoverRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override N_HoverRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.E_HoverRoot.E_HoverArea
+ ///
+ public class E_HoverArea : UiNode
+ {
+ public E_HoverArea(MapEditorTools uiPanel, DoorHoverArea node) : base(uiPanel, node) { }
+ public override E_HoverArea Clone() => new (UiPanel, (DoorHoverArea)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.E_HoverRoot
+ ///
+ public class E_HoverRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.E_HoverArea
+ ///
+ public E_HoverArea L_E_HoverArea
+ {
+ get
+ {
+ if (_L_E_HoverArea == null) _L_E_HoverArea = new E_HoverArea(UiPanel, Instance.GetNodeOrNull("E_HoverArea"));
+ return _L_E_HoverArea;
+ }
+ }
+ private E_HoverArea _L_E_HoverArea;
+
+ public E_HoverRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override E_HoverRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.S_HoverRoot.S_HoverArea
+ ///
+ public class S_HoverArea : UiNode
+ {
+ public S_HoverArea(MapEditorTools uiPanel, DoorHoverArea node) : base(uiPanel, node) { }
+ public override S_HoverArea Clone() => new (UiPanel, (DoorHoverArea)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.S_HoverRoot
+ ///
+ public class S_HoverRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.S_HoverArea
+ ///
+ public S_HoverArea L_S_HoverArea
+ {
+ get
+ {
+ if (_L_S_HoverArea == null) _L_S_HoverArea = new S_HoverArea(UiPanel, Instance.GetNodeOrNull("S_HoverArea"));
+ return _L_S_HoverArea;
+ }
+ }
+ private S_HoverArea _L_S_HoverArea;
+
+ public S_HoverRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override S_HoverRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.W_HoverRoot.W_HoverArea
+ ///
+ public class W_HoverArea : UiNode
+ {
+ public W_HoverArea(MapEditorTools uiPanel, DoorHoverArea node) : base(uiPanel, node) { }
+ public override W_HoverArea Clone() => new (UiPanel, (DoorHoverArea)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.W_HoverRoot
+ ///
+ public class W_HoverRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.W_HoverArea
+ ///
+ public W_HoverArea L_W_HoverArea
+ {
+ get
+ {
+ if (_L_W_HoverArea == null) _L_W_HoverArea = new W_HoverArea(UiPanel, Instance.GetNodeOrNull("W_HoverArea"));
+ return _L_W_HoverArea;
+ }
+ }
+ private W_HoverArea _L_W_HoverArea;
+
+ public W_HoverRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override W_HoverRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.HoverPrevRoot.HoverPrev
+ ///
+ public class HoverPrev : UiNode
+ {
+ public HoverPrev(MapEditorTools uiPanel, Godot.TextureRect node) : base(uiPanel, node) { }
+ public override HoverPrev Clone() => new (UiPanel, (Godot.TextureRect)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.HoverPrevRoot
+ ///
+ public class HoverPrevRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.HoverPrev
+ ///
+ public HoverPrev L_HoverPrev
+ {
+ get
+ {
+ if (_L_HoverPrev == null) _L_HoverPrev = new HoverPrev(UiPanel, Instance.GetNodeOrNull("HoverPrev"));
+ return _L_HoverPrev;
+ }
+ }
+ private HoverPrev _L_HoverPrev;
+
+ public HoverPrevRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override HoverPrevRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.DoorArea
+ ///
+ public class DoorArea : UiNode
+ {
+ public DoorArea(MapEditorTools uiPanel, Godot.ColorRect node) : base(uiPanel, node) { }
+ public override DoorArea Clone() => new (UiPanel, (Godot.ColorRect)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.StartBtn
+ ///
+ public class StartBtn : UiNode
+ {
+ public StartBtn(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragButton node) : base(uiPanel, node) { }
+ public override StartBtn Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragButton)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.EndBtn
+ ///
+ public class EndBtn : UiNode
+ {
+ public EndBtn(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragButton node) : base(uiPanel, node) { }
+ public override EndBtn Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragButton)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot.DoorToolTemplate
+ ///
+ public class DoorToolTemplate : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.DoorArea
+ ///
+ public DoorArea L_DoorArea
+ {
+ get
+ {
+ if (_L_DoorArea == null) _L_DoorArea = new DoorArea(UiPanel, Instance.GetNodeOrNull("DoorArea"));
+ return _L_DoorArea;
+ }
+ }
+ private DoorArea _L_DoorArea;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.StartBtn
+ ///
+ public StartBtn L_StartBtn
+ {
+ get
+ {
+ if (_L_StartBtn == null) _L_StartBtn = new StartBtn(UiPanel, Instance.GetNodeOrNull("StartBtn"));
+ return _L_StartBtn;
+ }
+ }
+ private StartBtn _L_StartBtn;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.EndBtn
+ ///
+ public EndBtn L_EndBtn
+ {
+ get
+ {
+ if (_L_EndBtn == null) _L_EndBtn = new EndBtn(UiPanel, Instance.GetNodeOrNull("EndBtn"));
+ return _L_EndBtn;
+ }
+ }
+ private EndBtn _L_EndBtn;
+
+ public DoorToolTemplate(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragArea node) : base(uiPanel, node) { }
+ public override DoorToolTemplate Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragArea)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: MapEditorTools.DoorToolRoot
+ ///
+ public class DoorToolRoot : UiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.N_HoverRoot
+ ///
+ public N_HoverRoot L_N_HoverRoot
+ {
+ get
+ {
+ if (_L_N_HoverRoot == null) _L_N_HoverRoot = new N_HoverRoot(UiPanel, Instance.GetNodeOrNull("N_HoverRoot"));
+ return _L_N_HoverRoot;
+ }
+ }
+ private N_HoverRoot _L_N_HoverRoot;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.E_HoverRoot
+ ///
+ public E_HoverRoot L_E_HoverRoot
+ {
+ get
+ {
+ if (_L_E_HoverRoot == null) _L_E_HoverRoot = new E_HoverRoot(UiPanel, Instance.GetNodeOrNull("E_HoverRoot"));
+ return _L_E_HoverRoot;
+ }
+ }
+ private E_HoverRoot _L_E_HoverRoot;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.S_HoverRoot
+ ///
+ public S_HoverRoot L_S_HoverRoot
+ {
+ get
+ {
+ if (_L_S_HoverRoot == null) _L_S_HoverRoot = new S_HoverRoot(UiPanel, Instance.GetNodeOrNull("S_HoverRoot"));
+ return _L_S_HoverRoot;
+ }
+ }
+ private S_HoverRoot _L_S_HoverRoot;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.W_HoverRoot
+ ///
+ public W_HoverRoot L_W_HoverRoot
+ {
+ get
+ {
+ if (_L_W_HoverRoot == null) _L_W_HoverRoot = new W_HoverRoot(UiPanel, Instance.GetNodeOrNull("W_HoverRoot"));
+ return _L_W_HoverRoot;
+ }
+ }
+ private W_HoverRoot _L_W_HoverRoot;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.HoverPrevRoot
+ ///
+ public HoverPrevRoot L_HoverPrevRoot
+ {
+ get
+ {
+ if (_L_HoverPrevRoot == null) _L_HoverPrevRoot = new HoverPrevRoot(UiPanel, Instance.GetNodeOrNull("HoverPrevRoot"));
+ return _L_HoverPrevRoot;
+ }
+ }
+ private HoverPrevRoot _L_HoverPrevRoot;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate
+ ///
+ public DoorToolTemplate L_DoorToolTemplate
+ {
+ get
+ {
+ if (_L_DoorToolTemplate == null) _L_DoorToolTemplate = new DoorToolTemplate(UiPanel, Instance.GetNodeOrNull("DoorToolTemplate"));
+ return _L_DoorToolTemplate;
+ }
+ }
+ private DoorToolTemplate _L_DoorToolTemplate;
+
+ public DoorToolRoot(MapEditorTools uiPanel, Godot.Control node) : base(uiPanel, node) { }
+ public override DoorToolRoot Clone() => new (UiPanel, (Godot.Control)Instance.Duplicate());
+ }
+
+ ///
/// 类型: , 路径: MapEditorTools.HBoxContainer.HandTool
///
public class HandTool : UiNode
@@ -137,81 +454,81 @@
public override HBoxContainer Clone() => new (UiPanel, (Godot.HBoxContainer)Instance.Duplicate());
}
- ///
- /// 类型: , 路径: MapEditorTools.DoorToolTemplate.DoorArea
- ///
- public class DoorArea : UiNode
- {
- public DoorArea(MapEditorTools uiPanel, Godot.ColorRect node) : base(uiPanel, node) { }
- public override DoorArea Clone() => new (UiPanel, (Godot.ColorRect)Instance.Duplicate());
- }
///
- /// 类型: , 路径: MapEditorTools.DoorToolTemplate.StartBtn
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.N_HoverRoot.N_HoverArea
///
- public class StartBtn : UiNode
- {
- public StartBtn(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragButton node) : base(uiPanel, node) { }
- public override StartBtn Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragButton)Instance.Duplicate());
- }
+ public N_HoverArea S_N_HoverArea => L_DoorToolRoot.L_N_HoverRoot.L_N_HoverArea;
///
- /// 类型: , 路径: MapEditorTools.DoorToolTemplate.EndBtn
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.N_HoverRoot
///
- public class EndBtn : UiNode
- {
- public EndBtn(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragButton node) : base(uiPanel, node) { }
- public override EndBtn Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragButton)Instance.Duplicate());
- }
+ public N_HoverRoot S_N_HoverRoot => L_DoorToolRoot.L_N_HoverRoot;
///
- /// 类型: , 路径: MapEditorTools.DoorToolTemplate
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.E_HoverRoot.E_HoverArea
///
- public class DoorToolTemplate : UiNode
- {
- ///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.DoorArea
- ///
- public DoorArea L_DoorArea
- {
- get
- {
- if (_L_DoorArea == null) _L_DoorArea = new DoorArea(UiPanel, Instance.GetNodeOrNull("DoorArea"));
- return _L_DoorArea;
- }
- }
- private DoorArea _L_DoorArea;
+ public E_HoverArea S_E_HoverArea => L_DoorToolRoot.L_E_HoverRoot.L_E_HoverArea;
- ///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.StartBtn
- ///
- public StartBtn L_StartBtn
- {
- get
- {
- if (_L_StartBtn == null) _L_StartBtn = new StartBtn(UiPanel, Instance.GetNodeOrNull("StartBtn"));
- return _L_StartBtn;
- }
- }
- private StartBtn _L_StartBtn;
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.E_HoverRoot
+ ///
+ public E_HoverRoot S_E_HoverRoot => L_DoorToolRoot.L_E_HoverRoot;
- ///
- /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: MapEditorTools.EndBtn
- ///
- public EndBtn L_EndBtn
- {
- get
- {
- if (_L_EndBtn == null) _L_EndBtn = new EndBtn(UiPanel, Instance.GetNodeOrNull("EndBtn"));
- return _L_EndBtn;
- }
- }
- private EndBtn _L_EndBtn;
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.S_HoverRoot.S_HoverArea
+ ///
+ public S_HoverArea S_S_HoverArea => L_DoorToolRoot.L_S_HoverRoot.L_S_HoverArea;
- public DoorToolTemplate(MapEditorTools uiPanel, UI.MapEditorTools.DoorDragArea node) : base(uiPanel, node) { }
- public override DoorToolTemplate Clone() => new (UiPanel, (UI.MapEditorTools.DoorDragArea)Instance.Duplicate());
- }
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.S_HoverRoot
+ ///
+ public S_HoverRoot S_S_HoverRoot => L_DoorToolRoot.L_S_HoverRoot;
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.W_HoverRoot.W_HoverArea
+ ///
+ public W_HoverArea S_W_HoverArea => L_DoorToolRoot.L_W_HoverRoot.L_W_HoverArea;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.W_HoverRoot
+ ///
+ public W_HoverRoot S_W_HoverRoot => L_DoorToolRoot.L_W_HoverRoot;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.HoverPrevRoot.HoverPrev
+ ///
+ public HoverPrev S_HoverPrev => L_DoorToolRoot.L_HoverPrevRoot.L_HoverPrev;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.HoverPrevRoot
+ ///
+ public HoverPrevRoot S_HoverPrevRoot => L_DoorToolRoot.L_HoverPrevRoot;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.DoorArea
+ ///
+ public DoorArea S_DoorArea => L_DoorToolRoot.L_DoorToolTemplate.L_DoorArea;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.StartBtn
+ ///
+ public StartBtn S_StartBtn => L_DoorToolRoot.L_DoorToolTemplate.L_StartBtn;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.DoorToolTemplate.EndBtn
+ ///
+ public EndBtn S_EndBtn => L_DoorToolRoot.L_DoorToolTemplate.L_EndBtn;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot.DoorToolTemplate
+ ///
+ public DoorToolTemplate S_DoorToolTemplate => L_DoorToolRoot.L_DoorToolTemplate;
+
+ ///
+ /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolRoot
+ ///
+ public DoorToolRoot S_DoorToolRoot => L_DoorToolRoot;
///
/// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.HBoxContainer.HandTool
@@ -238,24 +555,4 @@
///
public HBoxContainer S_HBoxContainer => L_HBoxContainer;
- ///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate.DoorArea
- ///
- public DoorArea S_DoorArea => L_DoorToolTemplate.L_DoorArea;
-
- ///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate.StartBtn
- ///
- public StartBtn S_StartBtn => L_DoorToolTemplate.L_StartBtn;
-
- ///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate.EndBtn
- ///
- public EndBtn S_EndBtn => L_DoorToolTemplate.L_EndBtn;
-
- ///
- /// 场景中唯一名称的节点, 节点类型: , 节点路径: MapEditorTools.DoorToolTemplate
- ///
- public DoorToolTemplate S_DoorToolTemplate => L_DoorToolTemplate;
-
}
diff --git a/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorToolsPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorToolsPanel.cs
index 366923d..1def4ae 100644
--- a/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorToolsPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/mapEditorTools/MapEditorToolsPanel.cs
@@ -1,12 +1,24 @@
+using System.Collections.Generic;
using Godot;
namespace UI.MapEditorTools;
public partial class MapEditorToolsPanel : MapEditorTools
{
+ ///
+ /// 鼠标悬停区域
+ ///
+ public DoorHoverArea ActiveHoverArea { get; private set; }
+
+ private List _doorTools = new List();
+
public override void OnCreateUi()
{
- S_DoorToolTemplate.Instance.SetDoorDragAreaNode(S_DoorToolTemplate);
+ S_N_HoverArea.Instance.Init(this, DoorDirection.N);
+ S_S_HoverArea.Instance.Init(this, DoorDirection.S);
+ S_W_HoverArea.Instance.Init(this, DoorDirection.W);
+ S_E_HoverArea.Instance.Init(this, DoorDirection.E);
+ S_DoorToolRoot.Instance.RemoveChild(S_DoorToolTemplate.Instance);
}
public override void OnShowUi()
@@ -14,14 +26,88 @@
S_PenTool.Instance.EmitSignal(BaseButton.SignalName.Pressed);
}
- public override void OnHideUi()
+ public override void OnDestroyUi()
{
-
+ S_DoorToolTemplate.Instance.QueueFree();
}
+ ///
+ /// 设置活动的鼠标悬停的区域
+ ///
+ public void SetActiveHoverArea(DoorHoverArea hoverArea)
+ {
+ ActiveHoverArea = hoverArea;
+ // if (hoverArea != null)
+ // {
+ // S_HoverPrevRoot.Instance.Reparent(hoverArea.GetParent(), false);
+ // S_HoverPrevRoot.Instance.Visible = false;
+ // }
+ }
+
+ ///
+ /// 创建门区域设置工具
+ ///
+ /// 原点坐标, 单位: 像素
+ /// 方向
+ /// 起始位置, 单位: 像素
+ /// 区域大小, 单位: 像素
+ public DoorToolTemplate CreateDoorTool(Vector2 position, DoorDirection direction, int start, int size)
+ {
+ var inst = CreateDoorToolInstance();
+ inst.Instance.SetDoorAreaPosition(position);
+ inst.Instance.SetDoorAreaDirection(direction);
+ inst.Instance.SetDoorAreaRange(start, size);
+ return inst;
+ }
+
+ ///
+ /// 移除门区域设置工具
+ ///
+ public void RemoveDoorTool(DoorToolTemplate toolInstance)
+ {
+ _doorTools.Remove(toolInstance);
+ toolInstance.Instance.QueueFree();
+ }
+
+ ///
+ /// 设置门区域工具的大小和缩放
+ ///
+ /// 坐标
+ /// 缩放
public void SetDoorToolTransform(Vector2 pos, Vector2 scale)
{
- S_DoorToolTemplate.Instance.SetDoorAreaTransform(pos, scale);
+ S_DoorToolRoot.Instance.Position = pos;
+ S_DoorToolRoot.Instance.Scale = scale;
}
+ ///
+ /// 设置鼠标悬停区域位置和大小
+ ///
+ /// 房间起始点, 单位: 格
+ /// 房间大小, 单位: 格
+ public void SetDoorHoverToolTransform(Vector2I position, Vector2I size)
+ {
+ position *= GameConfig.TileCellSize;
+ size *= GameConfig.TileCellSize;
+ S_N_HoverRoot.Instance.Position = position + GameConfig.TileCellSizeVector2I;
+ S_E_HoverRoot.Instance.Position = new Vector2(position.X + size.X - GameConfig.TileCellSize, position.Y + GameConfig.TileCellSize);
+ S_S_HoverRoot.Instance.Position = new Vector2(position.X + GameConfig.TileCellSize, position.Y + size.Y - GameConfig.TileCellSize);
+ S_W_HoverRoot.Instance.Position = position + GameConfig.TileCellSizeVector2I;
+
+ S_N_HoverArea.Instance.Size = new Vector2(size.X - GameConfig.TileCellSize * 2, S_N_HoverArea.Instance.Size.Y);
+ S_E_HoverArea.Instance.Size = new Vector2(size.Y - GameConfig.TileCellSize * 2, S_E_HoverArea.Instance.Size.Y);
+ S_S_HoverArea.Instance.Size = new Vector2(size.X - GameConfig.TileCellSize * 2, S_S_HoverArea.Instance.Size.Y);
+ S_W_HoverArea.Instance.Size = new Vector2(size.Y - GameConfig.TileCellSize * 2, S_W_HoverArea.Instance.Size.Y);
+ }
+
+ private DoorToolTemplate CreateDoorToolInstance()
+ {
+ var doorTool = S_DoorToolTemplate.Clone();
+ S_DoorToolRoot.Instance.AddChild(doorTool.Instance);
+ doorTool.Instance.SetDoorDragAreaNode(doorTool);
+ doorTool.L_StartBtn.Instance.SetMapEditorToolsPanel(this);
+ doorTool.L_EndBtn.Instance.SetMapEditorToolsPanel(this);
+ _doorTools.Add(doorTool);
+ return doorTool;
+ }
}