Initial attempt at road generation
This commit is contained in:
@ -13,7 +13,8 @@ namespace TransportGame.MapViewer
|
||||
None = 0,
|
||||
Elevation = 1,
|
||||
Population = 2,
|
||||
All = Elevation | Population
|
||||
RoadArticulations = 3,
|
||||
All = Elevation | Population | RoadArticulations
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
@ -57,9 +58,13 @@ namespace TransportGame.MapViewer
|
||||
// Create texture on which to draw
|
||||
Bitmap24 bitmap = new Bitmap24(Convert.ToInt32(map.Width * Scale), Convert.ToInt32(map.Height * Scale));
|
||||
|
||||
// First layer - cells
|
||||
// Elevation, population
|
||||
DrawPixels(bitmap, map, (layers & Layers.Elevation) > 0, (layers & Layers.Population) > 0);
|
||||
|
||||
// Roads
|
||||
if ((layers & Layers.RoadArticulations) > 0)
|
||||
DrawRoads(bitmap, map);
|
||||
|
||||
// Done
|
||||
return bitmap;
|
||||
}
|
||||
@ -83,6 +88,12 @@ namespace TransportGame.MapViewer
|
||||
int mapX = Convert.ToInt32(x / Scale);
|
||||
int mapY = Convert.ToInt32(y / Scale);
|
||||
|
||||
if (mapX >= map.Width)
|
||||
mapX = map.Width - 1;
|
||||
|
||||
if (mapY >= map.Height)
|
||||
mapY = map.Height - 1;
|
||||
|
||||
// Draw water
|
||||
if (map.IsWater(mapX, mapY))
|
||||
bitmap[x, y] = WaterColor;
|
||||
@ -108,5 +119,18 @@ namespace TransportGame.MapViewer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawRoads(Bitmap24 bitmap, Map map)
|
||||
{
|
||||
// Draw road segments
|
||||
foreach (var pair in map.RoadNetwork.ArticulationSegments)
|
||||
{
|
||||
bitmap.DrawLine(Convert.ToInt32(pair.Value.Terminal1.X * Scale),
|
||||
Convert.ToInt32(pair.Value.Terminal1.Y * Scale),
|
||||
Convert.ToInt32(pair.Value.Terminal2.X * Scale),
|
||||
Convert.ToInt32(pair.Value.Terminal2.Y * Scale),
|
||||
Colors.Black);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -62,6 +62,7 @@
|
||||
<CheckBox IsChecked="{Binding LayersAll}">(All)</CheckBox>
|
||||
<CheckBox IsChecked="{Binding LayerElevation}">Elevation</CheckBox>
|
||||
<CheckBox IsChecked="{Binding LayerPopulation}">Population</CheckBox>
|
||||
<CheckBox IsChecked="{Binding LayerRoadArticulations}">Roads (articulation map)</CheckBox>
|
||||
|
||||
<Button Name="buttonRender" Grid.Column="1" Content="Render" Click="buttonRender_Click" />
|
||||
|
||||
|
@ -109,10 +109,10 @@ namespace TransportGame.MapViewer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (LayerElevation && LayerPopulation)
|
||||
if (LayerElevation && LayerPopulation && LayerRoadArticulations)
|
||||
return true;
|
||||
|
||||
if (!LayerElevation && !LayerPopulation)
|
||||
if (!LayerElevation && !LayerPopulation && !LayerRoadArticulations)
|
||||
return false;
|
||||
|
||||
return null;
|
||||
@ -171,6 +171,28 @@ namespace TransportGame.MapViewer
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the population layer flag
|
||||
/// </summary>
|
||||
public bool LayerRoadArticulations
|
||||
{
|
||||
get
|
||||
{
|
||||
return _layers.HasFlag(MapRenderer.Layers.RoadArticulations);
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value) _layers |= MapRenderer.Layers.RoadArticulations;
|
||||
else _layers &= ~MapRenderer.Layers.RoadArticulations;
|
||||
|
||||
if (PropertyChanged != null)
|
||||
{
|
||||
PropertyChanged(this, new PropertyChangedEventArgs("LayerRoadArticulations"));
|
||||
PropertyChanged(this, new PropertyChangedEventArgs("LayersAll"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
|
@ -68,5 +68,35 @@ namespace TransportGame.MapViewer.Model
|
||||
|
||||
return 3 * (x + y * Width);
|
||||
}
|
||||
|
||||
public void DrawLine(int x0, int y0, int x1, int y1, Color color)
|
||||
{
|
||||
int dx = Math.Abs(x1 - x0);
|
||||
int sx = x0 < x1 ? 1 : -1;
|
||||
|
||||
int dy = Math.Abs(y1 - y0);
|
||||
int sy = y0 < y1 ? 1 : -1;
|
||||
|
||||
int err = (dx > dy ? dx : -dy) / 2, e2;
|
||||
|
||||
for (; ; )
|
||||
{
|
||||
this[x0, y0] = color;
|
||||
if (x0 == x1 && y0 == y1)
|
||||
break;
|
||||
|
||||
e2 = err;
|
||||
if (e2 > -dx)
|
||||
{
|
||||
err -= dy;
|
||||
x0 += sx;
|
||||
}
|
||||
if (e2 < dy)
|
||||
{
|
||||
err += dx;
|
||||
y0 += sy;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,20 @@ namespace TransportGame.MapViewer.Storage
|
||||
{
|
||||
public static Map Read(string file)
|
||||
{
|
||||
return SerializationHelper.DeserializeXml<Map>(file);
|
||||
Map map = SerializationHelper.DeserializeXml<Map>(file);
|
||||
|
||||
// Fix road network issue
|
||||
foreach (var pair in map.RoadNetwork.ArticulationSegments)
|
||||
pair.Value.ParentNetwork = map.RoadNetwork;
|
||||
|
||||
foreach (var pair in map.RoadNetwork.IntersectionSegments)
|
||||
pair.Value.ParentNetwork = map.RoadNetwork;
|
||||
|
||||
foreach (var pair in map.RoadNetwork.Nodes)
|
||||
pair.Value.ParentNetwork = map.RoadNetwork;
|
||||
|
||||
// Done
|
||||
return map;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user