mirror of
https://github.com/kwsch/NHSE.git
synced 2026-08-11 03:56:27 -05:00
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.
This commit is contained in:
@@ -115,14 +115,14 @@ public Bitmap UpdateViewportItems(int transparency)
|
||||
/// <summary>
|
||||
/// Updates the viewport terrain bitmap.
|
||||
/// </summary>
|
||||
/// <param name="f">Font to use for building labels.</param>
|
||||
/// <param name="textFont">Font to use for building labels.</param>
|
||||
/// <param name="transparencyBuilding">Transparency for building shapes drawn on terrain.</param>
|
||||
/// <param name="transparencyTerrain">Transparency for terrain layer.</param>
|
||||
/// <param name="selectedBuildingIndex">Index of building to highlight, or -1 for none.</param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<int> scal
|
||||
/// </remarks>
|
||||
/// <param name="img">The bitmap onto which the viewport will be drawn.</param>
|
||||
/// <param name="m">The map editor instance providing map data, building information, and viewport configuration.</param>
|
||||
/// <param name="f">The font used to render building and terrain tile names within the viewport.</param>
|
||||
/// <param name="textFont">The font used to render building and terrain tile names within the viewport.</param>
|
||||
/// <param name="scale1">A span representing the primary scaling factors for rendering terrain pixels.</param>
|
||||
/// <param name="scaleX">A span used for horizontal scaling and pixel data manipulation during rendering.</param>
|
||||
/// <param name="selectedBuildingIndex">
|
||||
@@ -105,7 +105,7 @@ public static Bitmap GetMapWithBuildings(Bitmap map, MapEditor m, Span<int> scal
|
||||
/// The transparency level to apply when rendering terrain tile names.
|
||||
/// A value of 0xFF is fully opaque; lower values increase transparency.
|
||||
/// </param>
|
||||
public static void LoadViewport(Bitmap img, MapEditor m, Font f,
|
||||
public static void LoadViewport(Bitmap img, MapEditor m, Font textFont,
|
||||
Span<int> scale1, Span<int> scaleX,
|
||||
int selectedBuildingIndex, byte transparencyBuilding, byte transTerrain)
|
||||
{
|
||||
@@ -132,28 +132,35 @@ public static Bitmap GetMapWithBuildings(Bitmap map, MapEditor m, Span<int> 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<Building>
|
||||
}
|
||||
}
|
||||
|
||||
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<Building>
|
||||
|
||||
// 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<int> data, Span<int> scaleX, int imgScale)
|
||||
|
||||
@@ -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<SysBotRAMEdit>();
|
||||
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<ImageFetcher>();
|
||||
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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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<TerrainTile> 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<TerrainTile>? 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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -93,7 +93,7 @@ private void B_Inject_Click(object sender, EventArgs e)
|
||||
var exist = WinFormsUtil.FirstFormOfType<SysBotUI>();
|
||||
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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user