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