diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditor/TileSetEditorPanel.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditor/TileSetEditorPanel.cs
index 5695611..1c705ef 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditor/TileSetEditorPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditor/TileSetEditorPanel.cs
@@ -26,6 +26,11 @@
public TileSetSourceInfo TileSetSourceInfo { get; private set; }
///
+ /// 当前正在使用的 TileSetSourceInfo 的索引
+ ///
+ public int TileSetSourceIndex { get; private set; }
+
+ ///
/// 是否初始化过纹理
///
public bool InitTexture { get; private set; }
@@ -311,6 +316,7 @@
TabGrid.Visible = true;
TabGrid.SelectIndex = 0;
TileSetSourceInfo = TileSetInfo.Sources[(int)index];
+ TileSetSourceIndex = (int)index;
SetTextureData(TileSetSourceInfo.GetSourceImage());
}
else
@@ -318,6 +324,7 @@
TabGrid.Visible = false;
TabGrid.SelectIndex = -1;
TileSetSourceInfo = null;
+ TileSetSourceIndex = -1;
SetTextureData(null);
}
diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs
index 0f40a5d..ee83089 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrain.cs
@@ -39,6 +39,7 @@
public sealed override void OnInitNestedUi()
{
_ = L_VSplitContainer.L_PanelTop.L_MarginContainer.L_TopBg;
+ _ = L_VSplitContainer.L_PanelTop.L_MarginContainer.L_TopBg.L_TerrainRoot.L_Brush;
_ = L_VSplitContainer.L_PanelBottom.L_MarginContainer.L_BottomBg;
}
diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs
index 9e15f62..5ac8819 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs
@@ -61,8 +61,11 @@
var terrain = EditorPanel.TileSetSourceInfo.Terrain;
TopGrid1.ForEach(cell => RefreshConnectTerrainCell(terrain, cell));
- TopGrid2.ForEach(cell => RefreshConnectTerrainCell(terrain, cell));
- TopGrid3.ForEach(cell => RefreshConnectTerrainCell(terrain, cell));
+ if (EditorPanel.TileSetSourceIndex == 0) //必须选中Main Source
+ {
+ TopGrid2.ForEach(cell => RefreshConnectTerrainCell(terrain, cell));
+ TopGrid3.ForEach(cell => RefreshConnectTerrainCell(terrain, cell));
+ }
}
}
@@ -96,12 +99,32 @@
S_BottomBg.Instance.SetHoverCell(null);
//再加载Terrain
+ var sourceIndex = EditorPanel.TileSetSourceIndex;
if (obj != null)
{
var terrain = ((TileSetSourceInfo)obj).Terrain;
TopGrid1.ForEach(cell => SetTerrainCellData(terrain, cell));
- TopGrid2.ForEach(cell => SetTerrainCellData(terrain, cell));
- TopGrid3.ForEach(cell => SetTerrainCellData(terrain, cell));
+ if (sourceIndex == 0) //必须选中Main Source
+ {
+ S_TerrainTexture2.Instance.Visible = true;
+ S_TerrainTexture3.Instance.Visible = true;
+ TopGrid2.ForEach(cell => SetTerrainCellData(terrain, cell));
+ TopGrid3.ForEach(cell => SetTerrainCellData(terrain, cell));
+ }
+ else
+ {
+ S_TerrainTexture2.Instance.Visible = false;
+ S_TerrainTexture3.Instance.Visible = false;
+ }
+ }
+
+ if (sourceIndex == 0)
+ {
+ S_TerrainTexture1.L_Label.Instance.Text = "顶部墙壁";
+ }
+ else
+ {
+ S_TerrainTexture1.L_Label.Instance.Text = "地形";
}
}
@@ -146,20 +169,23 @@
flag = !((TerrainCell)cell).OnDropCell(maskCell);
return flag;
});
- if (flag)
+ if (EditorPanel.TileSetSourceIndex == 0) //必须选中Main Source
{
- TopGrid2.ForEach((cell) =>
+ if (flag)
{
- flag = !((TerrainCell)cell).OnDropCell(maskCell);
- return flag;
- });
- }
- if (flag)
- {
- TopGrid3.ForEach((cell) =>
+ TopGrid2.ForEach((cell) =>
+ {
+ flag = !((TerrainCell)cell).OnDropCell(maskCell);
+ return flag;
+ });
+ }
+ if (flag)
{
- return ((TerrainCell)cell).OnDropCell(maskCell);
- });
+ TopGrid3.ForEach((cell) =>
+ {
+ return ((TerrainCell)cell).OnDropCell(maskCell);
+ });
+ }
}
}
diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/down/TileEditArea.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/down/TileEditArea.cs
index e35107b..ec451c0 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/down/TileEditArea.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/down/TileEditArea.cs
@@ -12,7 +12,7 @@
base.SetUiNode(uiNode);
InitNode(UiNode.L_TileTexture.Instance, UiNode.L_Grid.Instance);
UiNode.L_TileTexture.L_MaskBrush.Instance.Init(UiNode.L_TileTexture.Instance, UiNode.UiPanel.EditorPanel);
-
+
UiNode.L_TileTexture.Instance.Texture = UiNode.UiPanel.EditorPanel.Texture;
//聚焦按钮点击
diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainBrush.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainBrush.cs
index 10881dc..96f1db6 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainBrush.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainBrush.cs
@@ -3,11 +3,22 @@
namespace UI.TileSetEditorTerrain;
-public partial class TerrainBrush : Control
+public partial class TerrainBrush : Control, IUiNodeScript
{
public Control Root { get; set; }
public List TerrainTextureList { get; } = new List();
-
+
+ private TileSetEditorTerrain.Brush _uiNode;
+
+ public void SetUiNode(IUiNode uiNode)
+ {
+ _uiNode = (TileSetEditorTerrain.Brush) uiNode;
+ }
+
+ public void OnDestroy()
+ {
+
+ }
public override void _Process(double delta)
{
@@ -17,24 +28,36 @@
public override void _Draw()
{
var scale = Root.Scale;
+ var sourceIndex = _uiNode.UiPanel.EditorPanel.TileSetSourceIndex;
+
//绘制区域
- foreach (var control in TerrainTextureList)
+ for (var i = 0; i < TerrainTextureList.Count; i++)
{
+ if (sourceIndex != 0 && i > 0)
+ {
+ break;
+ }
+ var control = TerrainTextureList[i];
DrawRect(
new Rect2(control.Position, control.Size.AsVector2I()), new Color(1, 1, 0, 0.5f), false,
2f / scale.X
);
}
-
+
//绘制鼠标悬停区域
- foreach (var control in TerrainTextureList)
+ for (var i = 0; i < TerrainTextureList.Count; i++)
{
+ if (sourceIndex != 0 && i > 0)
+ {
+ break;
+ }
+ var control = TerrainTextureList[i];
if (control.IsMouseInRect())
{
var pos = Utils.GetMouseCellPosition(control) * GameConfig.TileCellSize;
DrawRect(
- new Rect2(pos + control.Position,GameConfig.TileCellSizeVector2I),
+ new Rect2(pos + control.Position, GameConfig.TileCellSizeVector2I),
Colors.Green, false, 3f / scale.X
);
break;
diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TileEditTerrain.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TileEditTerrain.cs
index 4dd5630..6bf8aa5 100644
--- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TileEditTerrain.cs
+++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TileEditTerrain.cs
@@ -47,24 +47,28 @@
cell = tempCell;
}
}
- if (_panel.S_TerrainTexture2.Instance.IsMouseInRect())
+ //必须选中Main Source
+ if (_panel.EditorPanel.TileSetSourceIndex == 0)
{
- var cellPosition = Utils.GetMouseCellPosition(_panel.S_TerrainTexture2.Instance);
- var index = cellPosition.X + cellPosition.Y * _panel.TopGrid2.GetColumns();
- var tempCell = (TerrainCell)_panel.TopGrid2.GetCell(index);
- if (tempCell.ConnectMaskCell != null)
+ if (_panel.S_TerrainTexture2.Instance.IsMouseInRect())
{
- cell = tempCell;
+ var cellPosition = Utils.GetMouseCellPosition(_panel.S_TerrainTexture2.Instance);
+ var index = cellPosition.X + cellPosition.Y * _panel.TopGrid2.GetColumns();
+ var tempCell = (TerrainCell)_panel.TopGrid2.GetCell(index);
+ if (tempCell.ConnectMaskCell != null)
+ {
+ cell = tempCell;
+ }
}
- }
- if (_panel.S_TerrainTexture3.Instance.IsMouseInRect())
- {
- var cellPosition = Utils.GetMouseCellPosition(_panel.S_TerrainTexture3.Instance);
- var index = cellPosition.X + cellPosition.Y * _panel.TopGrid3.GetColumns();
- var tempCell = (TerrainCell)_panel.TopGrid3.GetCell(index);
- if (tempCell.ConnectMaskCell != null)
+ if (_panel.S_TerrainTexture3.Instance.IsMouseInRect())
{
- cell = tempCell;
+ var cellPosition = Utils.GetMouseCellPosition(_panel.S_TerrainTexture3.Instance);
+ var index = cellPosition.X + cellPosition.Y * _panel.TopGrid3.GetColumns();
+ var tempCell = (TerrainCell)_panel.TopGrid3.GetCell(index);
+ if (tempCell.ConnectMaskCell != null)
+ {
+ cell = tempCell;
+ }
}
}
}
@@ -95,8 +99,12 @@
//聚焦按钮点击
private void OnFocusClick()
{
- var root = UiNode.L_TerrainRoot.Instance;
- Utils.DoFocusNode(ContainerRoot, Size, root.Size);
+ var rootSize = UiNode.L_TerrainRoot.Instance.Size;
+ if (UiNode.UiPanel.EditorPanel.TileSetSourceIndex != 0)
+ {
+ rootSize.Y -= 2 * GameConfig.TileCellSize;
+ }
+ Utils.DoFocusNode(ContainerRoot, Size, rootSize);
RefreshGridTrans();
}
}
\ No newline at end of file