From 214638ce2c80335ecd72f0a5ff203c6a00286695 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 25 Apr 2020 21:40:34 -0700 Subject: [PATCH] Add skip exterior for terrain set all https://github.com/kwsch/NHSE/issues/122#issuecomment-619472394 --- .../Acres/Terrain/TerrainManager.cs | 22 +++++++++++++++++++ NHSE.WinForms/Subforms/Map/TerrainEditor.cs | 5 +++-- NHSE.WinForms/Util/MessageStrings.cs | 1 + 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/NHSE.Core/Structures/Acres/Terrain/TerrainManager.cs b/NHSE.Core/Structures/Acres/Terrain/TerrainManager.cs index 269e4dd..c761bc0 100644 --- a/NHSE.Core/Structures/Acres/Terrain/TerrainManager.cs +++ b/NHSE.Core/Structures/Acres/Terrain/TerrainManager.cs @@ -60,5 +60,27 @@ public void ImportAcre(int acre, byte[] data) tile.CopyFrom(tiles[i]); } } + + public void SetAll(TerrainTile tile, in bool interiorOnly) + { + if (interiorOnly) + { + // skip outermost ring of tiles + int xmin = GridWidth; + int ymin = GridHeight; + int xmax = MapWidth - GridWidth; + int ymax = MapHeight - GridHeight; + for (int x = xmin; x < xmax; x++) + { + for (int y = ymin; y < ymax; y++) + GetTile(x, y).CopyFrom(tile); + } + } + else + { + foreach (var t in Tiles) + t.CopyFrom(tile); + } + } } } diff --git a/NHSE.WinForms/Subforms/Map/TerrainEditor.cs b/NHSE.WinForms/Subforms/Map/TerrainEditor.cs index ae59c6a..4b3f542 100644 --- a/NHSE.WinForms/Subforms/Map/TerrainEditor.cs +++ b/NHSE.WinForms/Subforms/Map/TerrainEditor.cs @@ -216,9 +216,10 @@ private void B_SetAll_Click(object sender, EventArgs e) { if (DialogResult.Yes != WinFormsUtil.Prompt(MessageBoxButtons.YesNo, MessageStrings.MsgTerrainSetAll)) return; + var pgt = (TerrainTile)PG_Tile.SelectedObject; - foreach (var t in Terrain.Tiles) - t.CopyFrom(pgt); + bool interiorOnly = DialogResult.Yes == WinFormsUtil.Prompt(MessageBoxButtons.YesNo, MessageStrings.MsgTerrainSetAllSkipExterior); + Terrain.SetAll(pgt, interiorOnly); LoadGrid(X, Y); System.Media.SystemSounds.Asterisk.Play(); } diff --git a/NHSE.WinForms/Util/MessageStrings.cs b/NHSE.WinForms/Util/MessageStrings.cs index 458f05c..67d077d 100644 --- a/NHSE.WinForms/Util/MessageStrings.cs +++ b/NHSE.WinForms/Util/MessageStrings.cs @@ -38,5 +38,6 @@ public static class MessageStrings public static string MsgTerrainSetElevation0 { get; set; } = "Set the elevation of all tiles on the map to 0?"; public static string MsgTerrainSetAll { get; set; } = "Set the tile from the Tile Editor to all tiles on the map?"; + public static string MsgTerrainSetAllSkipExterior { get; set; } = "Do you want to skip the tiles in exterior acres (beach/rocks)?"; } }