mirror of
https://github.com/kwsch/NHSE.git
synced 2026-04-20 07:27:25 -05:00
Show plaza on generated map
This commit is contained in:
parent
6f228a72f7
commit
3482eebe5a
|
|
@ -88,26 +88,40 @@ private static Bitmap DrawReticle(Bitmap map, int x, int y, int scale)
|
|||
return map;
|
||||
}
|
||||
|
||||
public static Bitmap GetMapWithBuildings(TerrainManager mgr, IReadOnlyList<Building> buildings, Font f, int scale = 4, int index = -1)
|
||||
public static Bitmap GetMapWithBuildings(TerrainManager mgr, IReadOnlyList<Building> buildings, ushort plazaX, ushort plazaY, Font f, int scale = 4, int index = -1)
|
||||
{
|
||||
// Although there is terrain in the Top Row and Left Column, no buildings can be placed there.
|
||||
// Adjust the building coordinates down-right by an acre.
|
||||
const int buildingShift = TerrainManager.GridWidth;
|
||||
var map = CreateMap(mgr, scale);
|
||||
using var gfx = Graphics.FromImage(map);
|
||||
|
||||
gfx.DrawPlaza(plazaX, plazaY, scale);
|
||||
gfx.DrawBuildings(buildings, f, scale, index);
|
||||
return map;
|
||||
}
|
||||
|
||||
private static void DrawPlaza(this Graphics gfx, ushort px, ushort py, int scale)
|
||||
{
|
||||
var plaza = Brushes.RosyBrown;
|
||||
GetBuildingCoordinate(px, py, scale, out var x, out var y);
|
||||
|
||||
var width = scale * 2 * 6;
|
||||
var height = scale * 2 * 5;
|
||||
|
||||
gfx.FillRectangle(plaza, x, y, width, height);
|
||||
}
|
||||
|
||||
private static void DrawBuildings(this Graphics gfx, IReadOnlyList<Building> buildings, Font f, int scale, int index = -1)
|
||||
{
|
||||
var selected = Brushes.Red;
|
||||
var others = Brushes.Yellow;
|
||||
var text = Brushes.White;
|
||||
var stringFormat = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
|
||||
var stringFormat = new StringFormat {Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center};
|
||||
|
||||
for (int i = 0; i < buildings.Count; i++)
|
||||
{
|
||||
var b = buildings[i];
|
||||
if (b.BuildingType == 0)
|
||||
continue;
|
||||
var x = (int)(((b.X / 2f) - buildingShift) * scale);
|
||||
var y = (int)(((b.Y / 2f) - buildingShift) * scale);
|
||||
GetBuildingCoordinate(b.X, b.Y, scale, out var x, out var y);
|
||||
|
||||
var pen = index == i ? selected : others;
|
||||
gfx.FillRectangle(pen, x - scale, y - scale, scale * 2, scale * 2);
|
||||
|
|
@ -115,8 +129,15 @@ public static Bitmap GetMapWithBuildings(TerrainManager mgr, IReadOnlyList<Build
|
|||
var name = b.BuildingType.ToString();
|
||||
gfx.DrawString(name, f, text, new PointF(x, y - (scale * 2)), stringFormat);
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
private static void GetBuildingCoordinate(ushort bx, ushort by, int scale, out int x, out int y)
|
||||
{
|
||||
// Although there is terrain in the Top Row and Left Column, no buildings can be placed there.
|
||||
// Adjust the building coordinates down-right by an acre.
|
||||
const int buildingShift = TerrainManager.GridWidth;
|
||||
x = (int) (((bx / 2f) - buildingShift) * scale);
|
||||
y = (int) (((by / 2f) - buildingShift) * scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -365,6 +365,7 @@ private void InitializeComponent()
|
|||
this.NUD_PlazaX.Name = "NUD_PlazaX";
|
||||
this.NUD_PlazaX.Size = new System.Drawing.Size(45, 20);
|
||||
this.NUD_PlazaX.TabIndex = 103;
|
||||
this.NUD_PlazaX.ValueChanged += new System.EventHandler(this.NUD_PlazaCoordinate_ValueChanged);
|
||||
//
|
||||
// L_PlazaY
|
||||
//
|
||||
|
|
@ -386,6 +387,7 @@ private void InitializeComponent()
|
|||
this.NUD_PlazaY.Name = "NUD_PlazaY";
|
||||
this.NUD_PlazaY.Size = new System.Drawing.Size(45, 20);
|
||||
this.NUD_PlazaY.TabIndex = 101;
|
||||
this.NUD_PlazaY.ValueChanged += new System.EventHandler(this.NUD_PlazaCoordinate_ValueChanged);
|
||||
//
|
||||
// BuildingEditor
|
||||
//
|
||||
|
|
|
|||
|
|
@ -16,22 +16,22 @@ public partial class BuildingEditor : Form
|
|||
public BuildingEditor(IReadOnlyList<Building> buildings, MainSave sav)
|
||||
{
|
||||
InitializeComponent();
|
||||
Buildings = buildings;
|
||||
SAV = sav;
|
||||
DialogResult = DialogResult.Cancel;
|
||||
Buildings = buildings;
|
||||
Terrain = new TerrainManager(sav.GetTerrain());
|
||||
|
||||
NUD_PlazaX.Value = sav.PlazaX;
|
||||
NUD_PlazaY.Value = sav.PlazaY;
|
||||
|
||||
foreach (var obj in buildings)
|
||||
LB_Items.Items.Add(obj.ToString());
|
||||
|
||||
Terrain = new TerrainManager(sav.GetTerrain());
|
||||
|
||||
LB_Items.SelectedIndex = 0;
|
||||
foreach (var entry in HelpDictionary)
|
||||
CB_StructureType.Items.Add(entry.Key);
|
||||
CB_StructureType.SelectedIndex = 0;
|
||||
|
||||
NUD_PlazaX.Value = sav.PlazaX;
|
||||
NUD_PlazaY.Value = sav.PlazaY;
|
||||
DialogResult = DialogResult.Cancel;
|
||||
}
|
||||
|
||||
private void B_Cancel_Click(object sender, EventArgs e) => Close();
|
||||
|
|
@ -47,7 +47,15 @@ private void B_Save_Click(object sender, EventArgs e)
|
|||
|
||||
private int Index;
|
||||
private bool Loading;
|
||||
private void DrawMap(in int index) => PB_Map.Image = TerrainSprite.GetMapWithBuildings(Terrain, Buildings, B_Save.Font, 4, index);
|
||||
|
||||
private void DrawMap(in int index)
|
||||
{
|
||||
var font = B_Save.Font;
|
||||
const int scale = 4;
|
||||
var px = (ushort) NUD_PlazaX.Value;
|
||||
var py = (ushort) NUD_PlazaY.Value;
|
||||
PB_Map.Image = TerrainSprite.GetMapWithBuildings(Terrain, Buildings, px, py, font, scale, index);
|
||||
}
|
||||
|
||||
private void LB_Items_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
|
@ -106,5 +114,7 @@ private void CB_StructureType_SelectedIndexChanged(object sender, EventArgs e)
|
|||
CB_StructureValues.Items.Add(item);
|
||||
CB_StructureValues.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private void NUD_PlazaCoordinate_ValueChanged(object sender, EventArgs e) => DrawMap(Index);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user