Added lot allocation.

This commit is contained in:
Tiberiu Chibici 2015-06-03 23:54:22 +03:00
parent f9b20b0226
commit 352f212ae9
28 changed files with 488 additions and 65 deletions

View File

@ -48,6 +48,7 @@
<ItemGroup>
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\MouseLook.cs" />
<Compile Include="Assets\Standard Assets\Environment\Water (Basic)\Scripts\WaterBasic.cs" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -48,6 +48,7 @@
<ItemGroup>
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\MouseLook.cs" />
<Compile Include="Assets\Standard Assets\Environment\Water (Basic)\Scripts\WaterBasic.cs" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -47,12 +47,14 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigurationManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
<Compile Include="Assets\Scripts\Model\Biome.cs" />
<Compile Include="Assets\Scripts\Model\Config\RoadGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\Config\TerrainGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\IPositionable.cs" />
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
@ -79,6 +81,7 @@
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
<Compile Include="Assets\Scripts\Utils\Task.cs" />
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -47,12 +47,14 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigurationManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
<Compile Include="Assets\Scripts\Model\Biome.cs" />
<Compile Include="Assets\Scripts\Model\Config\RoadGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\Config\TerrainGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\IPositionable.cs" />
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
@ -79,6 +81,7 @@
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
<Compile Include="Assets\Scripts\Utils\Task.cs" />
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -50,6 +50,7 @@
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\FPSInputController.js" />
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\FlyCam.js" />
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\PlatformInputController.js" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -50,6 +50,7 @@
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\FPSInputController.js" />
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\FlyCam.js" />
<Compile Include="Assets\Standard Assets\Character Controllers\Sources\Scripts\PlatformInputController.js" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
<None Include="Assets\Data\Biomes\Grassland.xml" />

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<RoadGeneratorConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<DefaultSegmentLength>24</DefaultSegmentLength>
<HighwaySegmentLength>60</HighwaySegmentLength>
<DefaultBranchProbability>0.2</DefaultBranchProbability>
<DefaultBranchPopulationTreshold>0.12</DefaultBranchPopulationTreshold>
<HighwayBranchProbability>0.01</HighwayBranchProbability>
<HighwayBranchPopulationTreshold>0.4</HighwayBranchPopulationTreshold>
<HighwayBranchDelay>3</HighwayBranchDelay>
<SteepnessLimit>10</SteepnessLimit>
<SlopeLimit>0.448798954</SlopeLimit>
<RoadSegmentAngleLimit>0.7853982</RoadSegmentAngleLimit>
<MinNodeDistance>12</MinNodeDistance>
<RoadSnapDistance>19</RoadSnapDistance>
<MaximumRandomStraightAngle>45</MaximumRandomStraightAngle>
<MaximumBranchAngleVariation>12</MaximumBranchAngleVariation>
<MaximumIntersectingRoads>5</MaximumIntersectingRoads>
<SidewalkWidth>0.8</SidewalkWidth>
<LaneWidth>1</LaneWidth>
<RaiseOffset>0.8</RaiseOffset>
<SidewalkHeight>0.1</SidewalkHeight>
<SideCoverHeight>0.1</SideCoverHeight>
</RoadGeneratorConfig>

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b97fa810c6224244a5ec1c8d5b27493
timeCreated: 1433342482
licenseType: Free
TextScriptImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -29,7 +29,7 @@ namespace TransportGame.Business
/// </summary>
public static void LoadBiomes()
{
foreach (var file in Directory.GetFiles(ConfigurationManager.BiomeDirectory, "*.xml", SearchOption.AllDirectories))
foreach (var file in Directory.GetFiles(ConfigManager.BiomeDirectory, "*.xml", SearchOption.AllDirectories))
{
try
{

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using TransportGame.Model.Config;
using TransportGame.Utils;
namespace TransportGame.Business
{
public static class ConfigManager
{
public static readonly string BiomeDirectory = "Assets\\Data\\Biomes";
public static readonly string ConfigurationDirectory = "Assets\\Data\\Config";
public static readonly string TerrGenConfigFile = "tergen.xml";
public static readonly string RoadGenConfigFile = "roadgen.xml";
public static TerrainGeneratorConfig Tergen { get; private set; }
public static RoadGeneratorConfig Roadgen { get; private set; }
public static BuildingGeneratorConfig Buildgen { get; private set; }
public static void LoadConfiguration()
{
// Terrain generator
string tergenPath = Path.Combine(ConfigurationDirectory, TerrGenConfigFile);
if (File.Exists(tergenPath))
{
Tergen = SerializationHelper.DeserializeXml<TerrainGeneratorConfig>(Path.Combine(ConfigurationDirectory, TerrGenConfigFile));
}
else
{
Tergen = new TerrainGeneratorConfig();
Tergen.SerializeXml(tergenPath);
}
// Road generator
string roadgenPath = Path.Combine(ConfigurationDirectory, RoadGenConfigFile);
if (File.Exists(roadgenPath))
{
Roadgen = SerializationHelper.DeserializeXml<RoadGeneratorConfig>(Path.Combine(ConfigurationDirectory, RoadGenConfigFile));
}
else
{
Roadgen = new RoadGeneratorConfig();
Roadgen.SerializeXml(roadgenPath);
}
// Building generator
Buildgen = new BuildingGeneratorConfig();
}
}
}

View File

@ -1,27 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Assets.Scripts.Model.Config;
using TransportGame.Utils;
namespace TransportGame.Business
{
public static class ConfigurationManager
{
public static readonly string BiomeDirectory = "Assets\\Data\\Biomes";
public static readonly string ConfigurationDirectory = "Assets\\Data\\Config";
public static readonly string TerrGenConfigFile = "tergen.xml";
public static TerrainGeneratorConfig TerrGenConfig { get; private set; }
public static void LoadConfiguration()
{
// Load terrgen config
TerrGenConfig = SerializationHelper.DeserializeXml<TerrainGeneratorConfig>(Path.Combine(ConfigurationDirectory, TerrGenConfigFile));
}
}
}

View File

@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TransportGame.Business;
using TransportGame.Model;
using TransportGame.Model.Road;
using TransportGame.Utils;
namespace TransportGame.Generator
{
public class BuildingGenerator
{
private const float LotSquareSize = 1f;
private const float LotSpacing = 0.1f;
private Map map;
QuadTree<RoadNode> nodeTree;
QuadTree<BuildingLot> lotTree;
private void AllocateLots()
{
float advance = LotSquareSize + LotSpacing;
// Generate lots for every segment
foreach (var pair in map.RoadNetwork.ArticulationSegments)
{
var seg = pair.Value;
var dir = seg.Direction;
var perp = dir.RotateDeg(90);
float width0 = ConfigManager.Roadgen.SidewalkWidth + ConfigManager.Roadgen.LaneWidth * seg.LanesTo1;
float width1 = ConfigManager.Roadgen.SidewalkWidth + ConfigManager.Roadgen.LaneWidth * seg.LanesTo2;
for (Vector2 pos = seg.Terminal1.Position; (pos - seg.Terminal2.Position).LengthSq > advance * advance; pos += dir * advance)
{
// Build lot squares
Vector2[] left = new Vector2[4];
left[0] = pos + perp * (width0 + LotSpacing + LotSquareSize);
left[1] = pos + perp * (width0 + LotSpacing);
left[2] = pos + dir * LotSquareSize + perp * (width0 + LotSpacing);
left[3] = pos + dir * LotSquareSize + perp * (width0 + LotSpacing + LotSquareSize);
Vector2[] right = new Vector2[4];
right[0] = pos - perp * (width0 + LotSpacing + LotSquareSize);
right[1] = pos - perp * (width0 + LotSpacing);
right[2] = pos + dir * LotSquareSize - perp * (width0 + LotSpacing);
right[3] = pos + dir * LotSquareSize - perp * (width0 + LotSpacing + LotSquareSize);
BuildingLot lot0 = new BuildingLot(left);
BuildingLot lot1 = new BuildingLot(right);
// Test for intersections
if (CanAllocate(pos, lot0))
lotTree.Add(lot0);
if (CanAllocate(pos, lot1))
lotTree.Add(lot1);
}
}
// Done
map.BuildingLots = lotTree.ToList();
}
private bool CanAllocate(Vector2 pos, BuildingLot lot0)
{
// Test other lots
Rectangle lotArea = new Rectangle(pos.X - 2 * LotSquareSize, pos.Y - 2 * LotSquareSize, pos.X + 2 * LotSquareSize, pos.Y + 2 * LotSquareSize);
foreach (var lot in lotTree.Query(lotArea))
{
if (BuildingLot.Intersect(lot0, lot))
return false;
}
// Test nearby roads
Rectangle roadArea = new Rectangle(
pos.X - 2 * ConfigManager.Roadgen.HighwaySegmentLength,
pos.Y - 2 * ConfigManager.Roadgen.HighwaySegmentLength,
pos.X + 2 * ConfigManager.Roadgen.HighwaySegmentLength,
pos.Y + 2 * ConfigManager.Roadgen.HighwaySegmentLength);
foreach (var node in nodeTree.Query(roadArea))
{
foreach (var segment in node.ArticulationSegments)
{
if (BuildingLot.Intersect(lot0, segment.AsLineSegment()))
return false;
}
}
return true;
}
private void GenerateBuildings()
{
}
public void Generate(Map map)
{
this.map = map;
// Construct node tree
nodeTree = new QuadTree<RoadNode>(0, 0, map.Width, map.Height);
foreach (var pair in map.RoadNetwork.Nodes)
nodeTree.Add(pair.Value);
lotTree = new QuadTree<BuildingLot>(0, 0, map.Width, map.Height);
// Allocate lots
AllocateLots();
GenerateBuildings();
}
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 387d471e5e9dff54b9cb832e01b969ec
timeCreated: 1433340433
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TransportGame.Business;
using TransportGame.Model;
using TransportGame.Model.Road;
using TransportGame.Utils;
@ -50,21 +51,21 @@ namespace TransportGame.Generator
System.Random random = new System.Random();
Map map;
const float HighwaySegmentLength = 60;
const float DefaultBranchPopulationTreshold = 0.12f;
const float DefaultBranchProbability = 0.2f;
const float DefaultSegmentLength = 24;
const float SteepnessLimit = 10;
const float SlopeLimit = (float)Math.PI / 7;
const float RoadSegmentAngleLimit = (float)Math.PI / 4;
const float RoadSnapDistance = 19;
const float MinNodeDistance = 12;
const int MaximumRandomStraightAngle = 45; // in degrees
const int MaximumBranchAngleVariation = 12; // in degrees
const float HighwayBranchPopulationTreshold = .4f; // 0..1
const float HighwayBranchProbability = .01f;
const int HighwayBranchDelay = 3;
const int MaximumIntersectingRoads = 5;
private float HighwaySegmentLength { get { return ConfigManager.Roadgen.HighwaySegmentLength; } }
private float DefaultBranchPopulationTreshold { get { return ConfigManager.Roadgen.DefaultBranchPopulationTreshold; } }
private float DefaultBranchProbability { get { return ConfigManager.Roadgen.DefaultBranchProbability; } }
private float DefaultSegmentLength { get { return ConfigManager.Roadgen.DefaultSegmentLength; } }
private float SteepnessLimit { get { return ConfigManager.Roadgen.SteepnessLimit; } }
private float SlopeLimit { get { return ConfigManager.Roadgen.SlopeLimit; } }
private float RoadSegmentAngleLimit { get { return ConfigManager.Roadgen.RoadSegmentAngleLimit; } }
private float RoadSnapDistance { get { return ConfigManager.Roadgen.RoadSnapDistance; } }
private float MinNodeDistance { get { return ConfigManager.Roadgen.MinNodeDistance; } }
private int MaximumRandomStraightAngle { get { return ConfigManager.Roadgen.MaximumRandomStraightAngle; } }
private int MaximumBranchAngleVariation { get { return ConfigManager.Roadgen.MaximumBranchAngleVariation; } }
private float HighwayBranchPopulationTreshold { get { return ConfigManager.Roadgen.HighwayBranchPopulationTreshold; } }
private float HighwayBranchProbability { get { return ConfigManager.Roadgen.HighwayBranchProbability; } }
private int HighwayBranchDelay { get { return ConfigManager.Roadgen.HighwayBranchDelay; } }
private int MaximumIntersectingRoads { get { return ConfigManager.Roadgen.MaximumIntersectingRoads; } }
public RoadGenerator()
{
@ -258,7 +259,7 @@ namespace TransportGame.Generator
}
// Filter & sort the segments by distance
segmentIds = segmentIds.Distinct().OrderBy(id =>
segmentIds = segmentIds.Distinct().OrderBy(id =>
LineSegment.Distance(map.RoadNetwork.ArticulationSegments[id].AsLineSegment(), segment.Terminal2Pos));
foreach (var segmentId in segmentIds)

View File

@ -26,12 +26,12 @@ namespace TransportGame.Generator
{
Noise = new PerlinNoiseGenerator();
if (ConfigurationManager.TerrGenConfig == null)
if (ConfigManager.Tergen == null)
throw new Exception("Not initialized!");
Noise.Octaves = ConfigurationManager.TerrGenConfig.NoiseOctaves;
Noise.NonLinearPower = ConfigurationManager.TerrGenConfig.NoiseNonLinearPower;
Noise.Scale = ConfigurationManager.TerrGenConfig.ElevationScale;
Noise.Octaves = ConfigManager.Tergen.NoiseOctaves;
Noise.NonLinearPower = ConfigManager.Tergen.NoiseNonLinearPower;
Noise.Scale = ConfigManager.Tergen.ElevationScale;
}
public Map Generate(int width, int height)
@ -48,7 +48,7 @@ namespace TransportGame.Generator
// Generate water level
float waterAmount = random.NextSingle(map.Biome.Moisture.Minimum, map.Biome.Moisture.Maximum);
map.WaterLevel = Mathf.Pow(waterAmount, ConfigurationManager.TerrGenConfig.WaterNonLinearPower) * map.Biome.Height;
map.WaterLevel = Mathf.Pow(waterAmount, ConfigManager.Tergen.WaterNonLinearPower) * map.Biome.Height;
return map;
}

View File

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TransportGame.Business;
namespace TransportGame.Model
{
public class BuildingLot : IPositionable
{
/// <summary>
/// Gets or sets the list of points
/// </summary>
public Vector2[] Points { get; set; }
public BuildingLot()
{
Points = new Vector2[4];
}
public BuildingLot(params Vector2[] points)
{
Points = points;
}
public BuildingLot(IEnumerable<Vector2> points)
{
Points = points.ToArray();
}
public Vector2 Position
{
get { return Points.Aggregate((x, y) => x + y) / Points.Length; }
}
/// <summary>
/// Tests if two building lots intersect
/// </summary>
/// <param name="a">First lot</param>
/// <param name="b">Second lot</param>
/// <returns></returns>
public static bool Intersect(BuildingLot a, BuildingLot b)
{
return (a.Position - b.Position).LengthSq <= ConfigManager.Buildgen.LotSquareSize + ConfigManager.Buildgen.LotSpacing;
}
/// <summary>
/// Tests if a building lot intersects a line segment (such as a road segment)
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static bool Intersect(BuildingLot a, LineSegment b)
{
for (int i = 0; i < a.Points.Length; i++)
{
int j = (i + 1 >= a.Points.Length) ? 0 : i + 1;
LineSegment s = new LineSegment(a.Points[i], a.Points[j]);
if (LineSegment.Intersect(s, b).HasValue)
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TransportGame.Model.Config
{
public class BuildingGeneratorConfig
{
/// <summary>
/// Lot size
/// </summary>
public float LotSquareSize { get; set; }
/// <summary>
/// Space between lots
/// </summary>
public float LotSpacing { get; set; }
public BuildingGeneratorConfig()
{
LotSquareSize = 1f;
LotSpacing = 0.1f;
}
}
}

View File

@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TransportGame.Model.Config
{
public class RoadGeneratorConfig
{
/// <summary>
/// Gets or sets the default segment length
/// </summary>
public float DefaultSegmentLength { get; set; }
/// <summary>
/// Gets or sets the highway segment length
/// </summary>
public float HighwaySegmentLength { get; set; }
public float DefaultBranchProbability { get; set; }
public float DefaultBranchPopulationTreshold { get; set; }
public float HighwayBranchProbability { get; set; }
public float HighwayBranchPopulationTreshold { get; set; }
public int HighwayBranchDelay { get; set; }
public float SteepnessLimit { get; set; }
public float SlopeLimit { get; set; }
public float RoadSegmentAngleLimit { get; set; }
public float MinNodeDistance { get; set; }
public float RoadSnapDistance { get; set; }
public int MaximumRandomStraightAngle { get; set; }
public int MaximumBranchAngleVariation { get; set; }
public int MaximumIntersectingRoads { get; set; }
public float SidewalkWidth { get; set; }
public float LaneWidth { get; set; }
/// <summary>
/// Raises road above actual height of terrain
/// </summary>
public float RaiseOffset { get; set; }
/// <summary>
/// Height of sidewalk
/// </summary>
public float SidewalkHeight { get; set; }
/// <summary>
/// On the sides of the roads, so that we can't see under the road
/// </summary>
public float SideCoverHeight { get; set; }
/// <summary>
/// Initializes configuration with default values
/// </summary>
public RoadGeneratorConfig()
{
HighwaySegmentLength = 60;
DefaultBranchPopulationTreshold = 0.12f;
DefaultBranchProbability = 0.2f;
DefaultSegmentLength = 24;
SteepnessLimit = 10;
SlopeLimit = (float)Math.PI / 7;
RoadSegmentAngleLimit = (float)Math.PI / 4;
RoadSnapDistance = 19;
MinNodeDistance = 12;
MaximumRandomStraightAngle = 45; // in degrees
MaximumBranchAngleVariation = 12; // in degrees
HighwayBranchPopulationTreshold = .4f; // 0..1
HighwayBranchProbability = .01f;
HighwayBranchDelay = 3;
MaximumIntersectingRoads = 5;
SidewalkWidth = .8f;
LaneWidth = 1f;
RaiseOffset = 0.8f;
SidewalkHeight = 0.1f;
SideCoverHeight = 0.1f;
}
}
}

View File

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 541bc5719bdd5fc4c84addebb8208869
timeCreated: 1433340433
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Xml.Serialization;
namespace Assets.Scripts.Model.Config
namespace TransportGame.Model.Config
{
[XmlRoot("terrgenConfig")]
public class TerrainGeneratorConfig
@ -29,5 +29,19 @@ namespace Assets.Scripts.Model.Config
[XmlElement("erodeAmountPercent")]
public float ErodeAmountPercent { get; set; }
/// <summary>
/// Initializes with default values
/// </summary>
public TerrainGeneratorConfig()
{
NoiseOctaves = 9;
NoiseNonLinearPower = 2.4f;
WaterNonLinearPower = 1.9f;
ElevationScale = 0.001f;
ErodePoints = 100;
ErodeIterations = 60;
ErodeAmountPercent = 0.1f;
}
}
}

View File

@ -83,6 +83,12 @@ namespace TransportGame.Model
[XmlElement("roadNetwork")]
public RoadNetwork RoadNetwork { get; set; }
/// <summary>
/// Gets or sets the building lots
/// </summary>
[XmlElement("lots")]
public List<BuildingLot> BuildingLots { get; set; }
#endregion
#region Constructors

View File

@ -12,7 +12,7 @@ public class InitializeScript : MonoBehaviour
{
// Load configuration
Logger.Info("Loading configuration...");
ConfigurationManager.LoadConfiguration();
ConfigManager.LoadConfiguration();
// Load biomes
Logger.Info("Loading biomes...");

View File

@ -3,6 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TransportGame.Business;
using TransportGame.Model;
using TransportGame.Model.Road;
using TransportGame.Utils;
@ -16,13 +17,19 @@ namespace TransportGame.Unity
class RoadMeshGenerator
{
#region Constants
private const float SidewalkWidth = .8f;
private const float LaneWidth = 1f;
private const float RaiseOffset = 0.8f; // Raises road above actual height of terrain
private const float SidewalkHeight = 0.1f; // Height of sidewalk
private const float SideCoverHeight = 0.1f; // On the sides of the roads, so that we can't see the road from the underside
private float SidewalkWidth { get { return ConfigManager.Roadgen.SidewalkWidth; } }
private float LaneWidth { get { return ConfigManager.Roadgen.LaneWidth; } }
// Raises road above actual height of terrain
private float RaiseOffset { get { return ConfigManager.Roadgen.RaiseOffset; } }
// Height of sidewalk
private float SidewalkHeight { get { return ConfigManager.Roadgen.SidewalkHeight; } }
// On the sides of the roads, so that we can't see the road from the underside
private float SideCoverHeight { get { return ConfigManager.Roadgen.SideCoverHeight; } }
#endregion

View File

@ -23,7 +23,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Assembly-CSharp.csproj
Policies = $0
$0.TextStylePolicy = $1

View File

@ -29,7 +29,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Assembly-CSharp.csproj
Policies = $0
$0.TextStylePolicy = $1

View File

@ -65,6 +65,7 @@
<ItemGroup>
<None Include="Assets\Data\Biomes\Grassland.xml" />
<None Include="Assets\Data\Biomes\Mountain.xml" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
</ItemGroup>

View File

@ -7,14 +7,16 @@
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{02576F1D-BE9C-CFA7-763D-1EBF63B36977}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace></RootNamespace>
<RootNamespace>
</RootNamespace>
<AssemblyName>Assembly-CSharp</AssemblyName>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Unity Subset v3.5</TargetFrameworkProfile>
<CompilerResponseFile></CompilerResponseFile>
<CompilerResponseFile>
</CompilerResponseFile>
<UnityProjectType>Game:1</UnityProjectType>
<UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>
<UnityVersion>5.0.1f1</UnityVersion>
@ -69,12 +71,16 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigurationManager.cs" />
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
<Compile Include="Assets\Scripts\Model\Biome.cs" />
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
<Compile Include="Assets\Scripts\Model\Config\BuildingGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\Config\RoadGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\Config\TerrainGeneratorConfig.cs" />
<Compile Include="Assets\Scripts\Model\IPositionable.cs" />
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
@ -105,8 +111,9 @@
<ItemGroup>
<None Include="Assets\Data\Biomes\Grassland.xml" />
<None Include="Assets\Data\Biomes\Mountain.xml" />
<None Include="Assets\Data\Config\roadgen.xml" />
<None Include="Assets\Data\Config\tergen.xml" />
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\SyntaxTree\UnityVS\2013\UnityVS.CSharp.targets" />
</Project>
</Project>