From e6f45d1805cf64945cbf87f46ff2eec45c0ed838 Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 30 Jan 2026 22:55:26 -0600 Subject: [PATCH] Fix terrain brush popup Closes #729 1. Dark mode now applied correctly (was previously lacking) 2. Fixed terrain brush action (brush active is higher priority than drag, fix tile fetch) 3. Fixed writing of Building/structure labels; apply after Terrain 4. Single terrain brush form allowed, center to Field Editor on launch Somewhat related: fix Show() load for non-ShowDialog() forms to center to parent. --- NHSE.Sprites/Field/MapRenderer.cs | 6 +- NHSE.Sprites/Field/TerrainSprite.cs | 50 ++- NHSE.WinForms/Editor.cs | 15 +- NHSE.WinForms/Main.cs | 4 +- .../Subforms/Map/FieldItemEditor.Designer.cs | 48 +-- NHSE.WinForms/Subforms/Map/FieldItemEditor.cs | 53 ++-- .../Subforms/Map/TerrainBrushEditor.cs | 288 ++++-------------- NHSE.WinForms/Subforms/PlayerItemEditor.cs | 4 +- .../Subforms/Program/ImageFetcher.cs | 6 + .../Subforms/SysBot/SysBotRAMEdit.cs | 6 + NHSE.WinForms/Subforms/SysBot/SysBotUI.cs | 6 + 11 files changed, 170 insertions(+), 316 deletions(-) diff --git a/NHSE.Sprites/Field/MapRenderer.cs b/NHSE.Sprites/Field/MapRenderer.cs index 7bf8ace..e55d08d 100644 --- a/NHSE.Sprites/Field/MapRenderer.cs +++ b/NHSE.Sprites/Field/MapRenderer.cs @@ -115,14 +115,14 @@ public Bitmap UpdateViewportItems(int transparency) /// /// Updates the viewport terrain bitmap. /// - /// Font to use for building labels. + /// Font to use for building labels. /// Transparency for building shapes drawn on terrain. /// Transparency for terrain layer. /// Index of building to highlight, or -1 for none. /// - public Bitmap UpdateViewportTerrain(Font f, byte transparencyBuilding, byte transparencyTerrain, int selectedBuildingIndex = -1) + public Bitmap UpdateViewportTerrain(Font textFont, byte transparencyBuilding, byte transparencyTerrain, int selectedBuildingIndex = -1) { - TerrainSprite.LoadViewport(ViewportTerrainImage, Map, f, ViewportTerrain1, ViewportTerrainX, selectedBuildingIndex, transparencyBuilding, transparencyTerrain); + TerrainSprite.LoadViewport(ViewportTerrainImage, Map, textFont, ViewportTerrain1, ViewportTerrainX, selectedBuildingIndex, transparencyBuilding, transparencyTerrain); return ViewportTerrainImage; } diff --git a/NHSE.Sprites/Field/TerrainSprite.cs b/NHSE.Sprites/Field/TerrainSprite.cs index dd88237..e6fe70f 100644 --- a/NHSE.Sprites/Field/TerrainSprite.cs +++ b/NHSE.Sprites/Field/TerrainSprite.cs @@ -12,7 +12,7 @@ public static class TerrainSprite { private static readonly Brush Selected = Brushes.Red; private static readonly Brush Others = Brushes.Yellow; - private static readonly Brush Text = Brushes.White; + private static readonly Brush Text = Brushes.Black; private static readonly Brush Tile = Brushes.Black; private static readonly Brush Plaza = Brushes.RosyBrown; private static readonly Color PlazaColor = Color.RosyBrown; @@ -90,7 +90,7 @@ public static Bitmap GetMapWithBuildings(Bitmap map, MapEditor m, Span scal /// /// The bitmap onto which the viewport will be drawn. /// The map editor instance providing map data, building information, and viewport configuration. - /// The font used to render building and terrain tile names within the viewport. + /// The font used to render building and terrain tile names within the viewport. /// A span representing the primary scaling factors for rendering terrain pixels. /// A span used for horizontal scaling and pixel data manipulation during rendering. /// @@ -105,7 +105,7 @@ public static Bitmap GetMapWithBuildings(Bitmap map, MapEditor m, Span scal /// The transparency level to apply when rendering terrain tile names. /// A value of 0xFF is fully opaque; lower values increase transparency. /// - public static void LoadViewport(Bitmap img, MapEditor m, Font f, + public static void LoadViewport(Bitmap img, MapEditor m, Font textFont, Span scale1, Span scaleX, int selectedBuildingIndex, byte transparencyBuilding, byte transTerrain) { @@ -132,28 +132,35 @@ public static Bitmap GetMapWithBuildings(Bitmap map, MapEditor m, Span scal // Switch back to graphics mode img.SetBitmapData(scaleX); + + // Draw Text of Terrain Tile Names + if (transTerrain != 0) + gfx.DrawViewTerrainTileNames(m.Terrain, cfg, textFont, relX, relY, m.ViewScale * 2, transTerrain); + // Draw Text of Building Names + if (transparencyBuilding != 0) + gfx.DrawViewBuildingNames(m, textFont, transparencyBuilding); + + // Done. + } + + private static void DrawViewBuildingNames(this Graphics gfx, MapEditor m, Font textFont, byte transparency) + { + var brush = Text; + if (transparency != byte.MaxValue) + brush = new SolidBrush(Color.FromArgb(transparency, Color.Black)); + foreach (var b in m.Buildings.Buildings) { var (x, y) = m.GetViewCoordinatesBuilding(b.X, b.Y); - const int cellsAbove = 2; // Show label above the building, 2 cells up. + const int cellsAbove = -2; // Show label inside the building square, 2 cells inside. y -= (m.ViewScale * cellsAbove); - // Don't bother drawing if not in view. - if (!m.Mutator.View.IsWithinView(m.ViewScale, x, y)) - continue; - var type = b.BuildingType; var name = type.ToString(); var labelPosition = new PointF(x, y - (m.ViewScale * 2)); - gfx.DrawString(name, f, Text, labelPosition, BuildingTextFormat); + gfx.DrawString(name, textFont, brush, labelPosition, BuildingTextFormat); } - - // Draw Text of Terrain Tile Names - if (transTerrain != 0) - gfx.DrawViewTerrainTileNames(m.Terrain, cfg, f, relX, relY, m.ViewScale * 2, transTerrain); - - // Done. } private static void DrawViewBuildings(this Graphics gfx, MapEditor m, int selectedBuildingIndex, byte transBuild) @@ -170,7 +177,7 @@ private static void DrawViewBuildings(this Graphics gfx, MapEditor m, int select var orig = ((SolidBrush)pen).Color; pen = new SolidBrush(Color.FromArgb(transBuild, orig)); } - gfx.DrawViewBuilding(m, b, pen, m.ViewScale, Text); + gfx.DrawViewBuilding(m, b, pen, m.ViewScale); } } @@ -250,8 +257,7 @@ private static void DrawMapBuildings(this Graphics gfx, IReadOnlyList } } - private static void DrawViewBuilding(this Graphics gfx, MapEditor m, Building b, Brush bBrush, - int imgScale, Brush textBrush, Font? textFont = null) + private static void DrawViewBuilding(this Graphics gfx, MapEditor m, Building b, Brush bBrush, int imgScale) { var (x, y) = m.GetViewCoordinatesBuilding(b.X, b.Y); var type = b.BuildingType; @@ -261,14 +267,6 @@ private static void DrawMapBuildings(this Graphics gfx, IReadOnlyList // Draw the building. gfx.FillRectangle(bBrush, x, y, width * imgScale * 2, height * imgScale * 2); - - if (textFont == null) - return; - - // Draw the text label above it. - const int cellsAbove = 2; - var name = type.ToString(); - gfx.DrawString(name, textFont, textBrush, new PointF(x, y - (imgScale * cellsAbove)), BuildingTextFormat); } private static void SetViewTerrainPixels(LayerTerrain t, LayerPositionConfig cfg, int relX, int relY, Span data, Span scaleX, int imgScale) diff --git a/NHSE.WinForms/Editor.cs b/NHSE.WinForms/Editor.cs index bac7ae1..a2f9603 100644 --- a/NHSE.WinForms/Editor.cs +++ b/NHSE.WinForms/Editor.cs @@ -38,7 +38,12 @@ public Editor(HorizonSave file) // this.TranslateInterface(GameInfo.CurrentLanguage); Text = SAV.GetSaveTitle("NHSE"); + } + + protected override void OnLoad(EventArgs e) + { CenterToParent(); + base.OnLoad(e); } private void Menu_Settings_Click(object sender, EventArgs e) @@ -135,12 +140,13 @@ private void Menu_RAMEdit_Click(object sender, EventArgs e) var exist = WinFormsUtil.FirstFormOfType(); if (exist != null) { - exist.Show(); + exist.Show(this); + exist.BringToFront(); return; } var sysbot = new SysBotRAMEdit(InjectionType.Generic); - sysbot.Show(); + sysbot.Show(this); } private void Menu_ItemImages_Click(object sender, EventArgs e) @@ -148,12 +154,13 @@ private void Menu_ItemImages_Click(object sender, EventArgs e) var exist = WinFormsUtil.FirstFormOfType(); if (exist != null) { - exist.Show(); + exist.Show(this); + exist.BringToFront(); return; } var imgfetcher = new ImageFetcher(); - imgfetcher.Show(); + imgfetcher.Show(this); } private void Menu_Theme_System_Click(object sender, EventArgs e) diff --git a/NHSE.WinForms/Main.cs b/NHSE.WinForms/Main.cs index c38d7cc..8aeb3a4 100644 --- a/NHSE.WinForms/Main.cs +++ b/NHSE.WinForms/Main.cs @@ -120,12 +120,12 @@ private void Main_KeyDown(object sender, KeyEventArgs e) } } - private static bool TryOpenSaveFile(string path) + private bool TryOpenSaveFile(string path) { if (!SaveFileLoader.TryGetSaveFile(path, out var sav)) return false; var editor = new Editor(sav); - editor.Show(); + editor.Show(this); return true; } } \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Map/FieldItemEditor.Designer.cs b/NHSE.WinForms/Subforms/Map/FieldItemEditor.Designer.cs index 7fe0b96..7f68588 100644 --- a/NHSE.WinForms/Subforms/Map/FieldItemEditor.Designer.cs +++ b/NHSE.WinForms/Subforms/Map/FieldItemEditor.Designer.cs @@ -114,9 +114,9 @@ private void InitializeComponent() FLP_Transparency = new System.Windows.Forms.FlowLayoutPanel(); L_TerrainTileLabelTransparency = new System.Windows.Forms.Label(); TR_Terrain = new System.Windows.Forms.TrackBar(); - TR_BuildingTransparency = new System.Windows.Forms.TrackBar(); - L_BuildingTransparency = new System.Windows.Forms.Label(); L_FieldItemTransparency = new System.Windows.Forms.Label(); + L_BuildingTransparency = new System.Windows.Forms.Label(); + TR_BuildingTransparency = new System.Windows.Forms.TrackBar(); B_TerrainBrush = new System.Windows.Forms.Button(); PG_TerrainTile = new System.Windows.Forms.PropertyGrid(); B_DumpLoadTerrain = new System.Windows.Forms.Button(); @@ -1073,6 +1073,28 @@ private void InitializeComponent() TR_Terrain.TickFrequency = 32; TR_Terrain.Scroll += TR_Terrain_Scroll; // + // L_FieldItemTransparency + // + L_FieldItemTransparency.AutoSize = true; + FLP_Transparency.SetFlowBreak(L_FieldItemTransparency, true); + L_FieldItemTransparency.Location = new System.Drawing.Point(4, 49); + L_FieldItemTransparency.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_FieldItemTransparency.Name = "L_FieldItemTransparency"; + L_FieldItemTransparency.Size = new System.Drawing.Size(145, 17); + L_FieldItemTransparency.TabIndex = 42; + L_FieldItemTransparency.Text = "Field Item Transparency"; + // + // L_BuildingTransparency + // + L_BuildingTransparency.AutoSize = true; + FLP_Transparency.SetFlowBreak(L_BuildingTransparency, true); + L_BuildingTransparency.Location = new System.Drawing.Point(4, 98); + L_BuildingTransparency.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_BuildingTransparency.Name = "L_BuildingTransparency"; + L_BuildingTransparency.Size = new System.Drawing.Size(135, 17); + L_BuildingTransparency.TabIndex = 44; + L_BuildingTransparency.Text = "Building Transparency"; + // // TR_BuildingTransparency // TR_BuildingTransparency.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; @@ -1088,28 +1110,6 @@ private void InitializeComponent() TR_BuildingTransparency.Value = 255; TR_BuildingTransparency.Scroll += TR_BuildingTransparency_Scroll; // - // L_BuildingTransparency - // - L_BuildingTransparency.AutoSize = true; - FLP_Transparency.SetFlowBreak(L_BuildingTransparency, true); - L_BuildingTransparency.Location = new System.Drawing.Point(4, 98); - L_BuildingTransparency.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - L_BuildingTransparency.Name = "L_BuildingTransparency"; - L_BuildingTransparency.Size = new System.Drawing.Size(135, 17); - L_BuildingTransparency.TabIndex = 44; - L_BuildingTransparency.Text = "Building Transparency"; - // - // L_FieldItemTransparency - // - L_FieldItemTransparency.AutoSize = true; - FLP_Transparency.SetFlowBreak(L_FieldItemTransparency, true); - L_FieldItemTransparency.Location = new System.Drawing.Point(4, 49); - L_FieldItemTransparency.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - L_FieldItemTransparency.Name = "L_FieldItemTransparency"; - L_FieldItemTransparency.Size = new System.Drawing.Size(145, 17); - L_FieldItemTransparency.TabIndex = 42; - L_FieldItemTransparency.Text = "Field Item Transparency"; - // // B_TerrainBrush // B_TerrainBrush.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; diff --git a/NHSE.WinForms/Subforms/Map/FieldItemEditor.cs b/NHSE.WinForms/Subforms/Map/FieldItemEditor.cs index bcf6f53..284c8f7 100644 --- a/NHSE.WinForms/Subforms/Map/FieldItemEditor.cs +++ b/NHSE.WinForms/Subforms/Map/FieldItemEditor.cs @@ -1,4 +1,8 @@ -using System; +using NHSE.Core; +using NHSE.Sprites; +using NHSE.WinForms.Subforms.Map; +using System; +using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Drawing; @@ -6,9 +10,6 @@ using System.IO; using System.Linq; using System.Windows.Forms; -using NHSE.Core; -using NHSE.Sprites; -using NHSE.WinForms.Subforms.Map; namespace NHSE.WinForms; @@ -237,16 +238,23 @@ private void OmniTileTerrain(MouseEventArgs e) List selectedTiles = []; int radius = tbeForm.Slider_thickness.Value; int threshold = (radius * radius) / 2; + var cfg = Editor.Mutator.Manager.ConfigTerrain; for (int i = -radius; i < radius; i++) { for (int j = -radius; j < radius; j++) { if ((i * i) + (j * j) < threshold) - selectedTiles.Add(Editor.Terrain.GetTile(relX + i, relY + j)); + { + var x = relX + i; + var y = relY + j; + if (cfg.IsCoordinateValidRelative(x, y)) + selectedTiles.Add(Editor.Terrain.GetTile(x, y)); + } } } - SetTiles(selectedTiles); + if (selectedTiles.Count != 0) + SetTiles(selectedTiles); } private void OmniTile(Item tile, int relX, int relY) @@ -349,7 +357,7 @@ private bool GetTile(MouseEventArgs e, LayerTerrain layerField, [NotNullWhen(tru private bool GetTile(LayerTerrain layerField, int absX, int absY, [NotNullWhen(true)] out TileCheck? item) { - var cfg = Editor.Mutator.Manager.ConfigItems; + var cfg = Editor.Mutator.Manager.ConfigTerrain; var (relX, relY) = cfg.GetCoordinatesRelative(absX, absY); if (!cfg.IsCoordinateValidRelative(relX, relY)) { @@ -375,17 +383,21 @@ private void UpdateHoveredCoordinates(MouseEventArgs e) private void ViewportMouseMove(object sender, MouseEventArgs e) { - var l = CurrentLayer; - if (e.Button == MouseButtons.Left && CHK_MoveOnDrag.Checked) + if (e.Button == MouseButtons.Left) { - MoveDrag(e); - return; - } - if (e.Button == MouseButtons.Left && tbeForm?.IsBrushSelected == true) - { - OmniTileTerrain(e); + if (tbeForm?.IsBrushSelected == true) + { + OmniTileTerrain(e); + return; + } + if (CHK_MoveOnDrag.Checked) + { + MoveDrag(e); + return; + } } + var l = CurrentLayer; // Update hover tooltip if it is a different tile // Can't compare coordinates if redirection of extension tiles hijacks to return the root tile. // Just check the (root) tile returns for each. @@ -1260,14 +1272,13 @@ private void Menu_Bulk_Click(object sender, EventArgs e) private void B_TerrainBrush_Click(object sender, EventArgs e) { - tbeForm = new TerrainBrushEditor(PG_TerrainTile, this); - tbeForm.Show(); + if (tbeForm is null || tbeForm.IsDisposed) + tbeForm = new TerrainBrushEditor(PG_TerrainTile, this); + tbeForm.Show(this); + tbeForm.BringToFront(); } - private void FieldItemEditor_FormClosed(object sender, FormClosedEventArgs e) - { - tbeForm?.Close(); - } + private void FieldItemEditor_FormClosed(object sender, FormClosedEventArgs e) => tbeForm?.Close(); } public interface IItemLayerEditor diff --git a/NHSE.WinForms/Subforms/Map/TerrainBrushEditor.cs b/NHSE.WinForms/Subforms/Map/TerrainBrushEditor.cs index 1c51b07..4cd4ad9 100644 --- a/NHSE.WinForms/Subforms/Map/TerrainBrushEditor.cs +++ b/NHSE.WinForms/Subforms/Map/TerrainBrushEditor.cs @@ -1,6 +1,7 @@ using NHSE.Core; using System; using System.Windows.Forms; +using static NHSE.Core.TerrainUnitModel; namespace NHSE.WinForms.Subforms.Map; @@ -20,265 +21,84 @@ public TerrainBrushEditor(PropertyGrid pG_TerrainTile, FieldItemEditor fieWindow PG_TerrainTile = pG_TerrainTile; FIEWindow = fieWindow; InitializeComponent(); + this.TranslateInterface(GameInfo.CurrentLanguage); + } + + protected override void OnLoad(EventArgs e) + { + CenterToParent(); + base.OnLoad(e); } #region Tiles buttons #region Dirt tiles - private void NW_Rounded_Tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3B, - LandMakingAngle = 0, - Elevation = (ushort)slider_elevation.Value, - }; + private void NW_Rounded_Tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3B); + private void N_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff5B, 3); + private void NE_rounded_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3B, 3); + private void W_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff5B); + private void Middle_tile_Click(object sender, EventArgs e) => SelectTerrainTile(); + private void E_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff5B, 2); + private void SW_rounded_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3B, 1); + private void S_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff5B, 1); + private void SE_rounded_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3B, 2); + private void NW_angular_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3C); + private void NE_angular_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3C, 3); + private void SW_angular_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3C, 1); + private void SE_angular_tile_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff3C, 2); - private void N_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff5B, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NE_rounded_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3B, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void W_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff5B, - LandMakingAngle = 0, - Elevation = (ushort)slider_elevation.Value, - }; - - private void Middle_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - Elevation = (ushort)slider_elevation.Value, - }; - - private void E_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff5B, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SW_rounded_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3B, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void S_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff5B, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SE_rounded_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3B, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NW_angular_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3C, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NE_angular_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3C, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SW_angular_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3C, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SE_angular_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff3C, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void TR_dirt_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff7A, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void DL_dirt_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff7A, - Elevation = (ushort)slider_elevation.Value, - }; - - private void DR_dirt_inside_Click(object sender, EventArgs e) - { - PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff7A, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - } + private void TR_dirt_inside_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff7A, 2); + private void DL_dirt_inside_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff7A); + private void DR_dirt_inside_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff7A, 1); #endregion Dirt tiles #region Water tiles - private void NW_diagonal_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3B, - Elevation = (ushort)slider_elevation.Value, - }; - - private void N_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River5B, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NE_diagonal_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3B, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void W_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River5B, - Elevation = (ushort)slider_elevation.Value, - }; - - private void Center_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River8A, - Elevation = (ushort)slider_elevation.Value, - }; - - private void e_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River5B, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void sw_diagonal_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3B, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void s_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River5B, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SE_diagonal_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3B, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NW_angular_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3C, - Elevation = (ushort)slider_elevation.Value, - }; - - private void NE_angular_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3C, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SW_angular_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3C, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; - - private void SE_angular_water_tile_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River3C, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void TL_dirt_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.Cliff7A, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void TL_water_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River7A, - LandMakingAngle = 3, - Elevation = (ushort)slider_elevation.Value, - }; - - private void TR_water_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River7A, - LandMakingAngle = 2, - Elevation = (ushort)slider_elevation.Value, - }; - - private void DL_water_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River7A, - Elevation = (ushort)slider_elevation.Value, - }; - - private void DR_water_inside_Click(object sender, EventArgs e) => PG_TerrainTile.SelectedObject = new TerrainTile - { - UnitModel = TerrainUnitModel.River7A, - LandMakingAngle = 1, - Elevation = (ushort)slider_elevation.Value, - }; + private void NW_diagonal_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3B); + private void N_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River5B, 3); + private void NE_diagonal_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3B, 3); + private void W_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River5B); + private void Center_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River8A); + private void e_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River5B, 2); + private void sw_diagonal_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3B, 1); + private void s_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River5B, 1); + private void SE_diagonal_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3B, 2); + private void NW_angular_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3C); + private void NE_angular_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3C, 3); + private void SW_angular_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3C, 1); + private void SE_angular_water_tile_Click(object sender, EventArgs e) => SelectTerrainTile(River3C, 2); + private void TL_dirt_inside_Click(object sender, EventArgs e) => SelectTerrainTile(Cliff7A, 3); + private void TL_water_inside_Click(object sender, EventArgs e) => SelectTerrainTile(River7A, 3); + private void TR_water_inside_Click(object sender, EventArgs e) => SelectTerrainTile(River7A, 2); + private void DL_water_inside_Click(object sender, EventArgs e) => SelectTerrainTile(River7A); + private void DR_water_inside_Click(object sender, EventArgs e) => SelectTerrainTile(River7A, 1); #endregion Water tiles #endregion Tiles buttons - private void SliderThicknessValueChanged(object sender, EventArgs e) - { - lbl_size_count.Text = slider_thickness.Value.ToString(); - } + private void SliderThicknessValueChanged(object sender, EventArgs e) => lbl_size_count.Text = slider_thickness.Value.ToString(); private void SliderElevationValueChanged(object sender, EventArgs e) { lbl_elevation_count.Text = slider_elevation.Value.ToString(); - TerrainTile currentTile = (TerrainTile)PG_TerrainTile.SelectedObject!; + var currentTile = (TerrainTile)PG_TerrainTile.SelectedObject!; currentTile.Elevation = (ushort)slider_elevation.Value; PG_TerrainTile.SelectedObject = currentTile; } + private TerrainTile CreateTerrainTile(TerrainUnitModel unitModel = Base, ushort landMakingAngle = 0) => new() + { + Elevation = (ushort)slider_elevation.Value, + UnitModel = unitModel, + LandMakingAngle = landMakingAngle + }; + + private void SelectTerrainTile(TerrainUnitModel unitModel = Base, ushort landMakingAngle = 0) + => PG_TerrainTile.SelectedObject = CreateTerrainTile(unitModel, landMakingAngle); + private void B_Brush_Click(object sender, EventArgs e) => IsBrushSelected = true; private void TerrainBrushEditor_FormClosed(object sender, FormClosedEventArgs e) => IsBrushSelected = false; private void B_Normal_Click(object sender, EventArgs e) => IsBrushSelected = false; diff --git a/NHSE.WinForms/Subforms/PlayerItemEditor.cs b/NHSE.WinForms/Subforms/PlayerItemEditor.cs index 5984e66..8be05b3 100644 --- a/NHSE.WinForms/Subforms/PlayerItemEditor.cs +++ b/NHSE.WinForms/Subforms/PlayerItemEditor.cs @@ -93,7 +93,7 @@ private void B_Inject_Click(object sender, EventArgs e) var exist = WinFormsUtil.FirstFormOfType(); if (exist != null) { - exist.Show(); + exist.Show(this); exist.BringToFront(); exist.CenterToForm(this); return; @@ -120,7 +120,7 @@ static void AfterWrite(InjectionResult r) ItemGrid.ItemChanged = () => ai.Write(); var sysbot = new SysBotUI(ai, sb, aiUSB, ub); - sysbot.Show(); + sysbot.Show(this); } private void ItemEditor_DragEnter(object? sender, DragEventArgs e) diff --git a/NHSE.WinForms/Subforms/Program/ImageFetcher.cs b/NHSE.WinForms/Subforms/Program/ImageFetcher.cs index fb790cc..c9d4948 100644 --- a/NHSE.WinForms/Subforms/Program/ImageFetcher.cs +++ b/NHSE.WinForms/Subforms/Program/ImageFetcher.cs @@ -31,6 +31,12 @@ public ImageFetcher() CheckFileStatusLabel(); } + protected override void OnLoad(EventArgs e) + { + CenterToParent(); + base.OnLoad(e); + } + private static string[] LoadHosts() { var hosts = Properties.Resources.hosts_images; diff --git a/NHSE.WinForms/Subforms/SysBot/SysBotRAMEdit.cs b/NHSE.WinForms/Subforms/SysBot/SysBotRAMEdit.cs index a871356..de683b7 100644 --- a/NHSE.WinForms/Subforms/SysBot/SysBotRAMEdit.cs +++ b/NHSE.WinForms/Subforms/SysBot/SysBotRAMEdit.cs @@ -21,6 +21,12 @@ public SysBotRAMEdit(InjectionType type) Bot.PopPrompt(); } + protected override void OnLoad(EventArgs e) + { + CenterToParent(); + base.OnLoad(e); + } + private void B_Connect_Click(object sender, EventArgs e) { if (!Bot.Connect(TB_IP.Text, TB_Port.Text)) diff --git a/NHSE.WinForms/Subforms/SysBot/SysBotUI.cs b/NHSE.WinForms/Subforms/SysBot/SysBotUI.cs index 5842e88..01f9d7b 100644 --- a/NHSE.WinForms/Subforms/SysBot/SysBotUI.cs +++ b/NHSE.WinForms/Subforms/SysBot/SysBotUI.cs @@ -36,6 +36,12 @@ public SysBotUI(AutoInjector injector, SysBotController c, AutoInjector injector TIM_Interval.Tick += (s, e) => injector.Read(); } + protected override void OnLoad(EventArgs e) + { + CenterToParent(); + base.OnLoad(e); + } + private void B_Connect_Click(object sender, EventArgs e) { if (!Bot.Connect(TB_IP.Text, TB_Port.Text))