Refactoring, optimizations
This commit is contained in:
parent
9ac0deec0b
commit
778d732866
@ -48,11 +48,13 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\BuildingGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\CityGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\PopulationCentersGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\RoadGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\TerrainGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\NoiseGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\PerlinNoiseGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
||||||
@ -63,14 +65,13 @@
|
|||||||
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Model\Range.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
||||||
<Compile Include="Assets\Scripts\Noise\NoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Noise\PerlinNoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
||||||
@ -82,7 +83,6 @@
|
|||||||
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Range.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
||||||
@ -91,6 +91,9 @@
|
|||||||
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
|
<None Include="Assets\Standard Assets\Environment\Water (Basic)\Shaders\FXWaterBasic.shader" />
|
||||||
<None Include="Assets\Data\Biomes\Grassland.xml" />
|
<None Include="Assets\Data\Biomes\Grassland.xml" />
|
||||||
<None Include="Assets\Data\Biomes\Mountain.xml" />
|
<None Include="Assets\Data\Biomes\Mountain.xml" />
|
||||||
|
<Reference Include="Assembly-UnityScript-firstpass">
|
||||||
|
<HintPath>C:/Users/Tibi/Google Drive/FacultateCY/$ Licenta/Game/Library/ScriptAssemblies/Assembly-UnityScript-firstpass.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="UnityEngine.UI">
|
<Reference Include="UnityEngine.UI">
|
||||||
<HintPath>C:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>
|
<HintPath>C:/Program Files/Unity/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@ -98,6 +101,10 @@
|
|||||||
<HintPath>C:/Program Files/Unity/Editor/Data/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode.dll</HintPath>
|
<HintPath>C:/Program Files/Unity/Editor/Data/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="Assembly-CSharp-firstpass-vs.csproj">
|
||||||
|
<Project>{D8888F6A-ABE1-C49B-1A38-F65A81021668}</Project> <Name>Assembly-CSharp-firstpass-vs</Name> </ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
@ -48,11 +48,13 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\BuildingGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\CityGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\PopulationCentersGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\RoadGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\TerrainGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\NoiseGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\PerlinNoiseGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
||||||
@ -63,14 +65,13 @@
|
|||||||
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Model\Range.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
||||||
<Compile Include="Assets\Scripts\Noise\NoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Noise\PerlinNoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
||||||
@ -82,7 +83,6 @@
|
|||||||
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Range.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
||||||
@ -98,6 +98,12 @@
|
|||||||
<HintPath>C:/Program Files/Unity/Editor/Data/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode.dll</HintPath>
|
<HintPath>C:/Program Files/Unity/Editor/Data/PlaybackEngines/iossupport/UnityEditor.iOS.Extensions.Xcode.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="Assembly-CSharp-firstpass.csproj">
|
||||||
|
<Project>{D8888F6A-ABE1-C49B-1A38-F65A81021668}</Project> <Name>Assembly-CSharp-firstpass</Name> </ProjectReference>
|
||||||
|
<ProjectReference Include="Assembly-UnityScript-firstpass.unityproj">
|
||||||
|
<Project>{6F824ECF-F2BC-827E-A29D-FB10759A3283}</Project> <Name>Assembly-UnityScript-firstpass</Name> </ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
Binary file not shown.
@ -100,7 +100,7 @@ namespace TransportGame.Generator
|
|||||||
|
|
||||||
private bool CanAllocate(Vector2 pos, BuildingLot lot0)
|
private bool CanAllocate(Vector2 pos, BuildingLot lot0)
|
||||||
{
|
{
|
||||||
if (!lotTree.Boundary.Contains(pos))
|
if (lot0.Points.Any(p => !lotTree.Boundary.Contains(p)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Test other lots
|
// Test other lots
|
||||||
@ -144,22 +144,39 @@ namespace TransportGame.Generator
|
|||||||
|
|
||||||
Polygon GeneratePrimitivePolygon(BuildingLot lot)
|
Polygon GeneratePrimitivePolygon(BuildingLot lot)
|
||||||
{
|
{
|
||||||
int sides = random.Next(3, 6); // Number of sides
|
|
||||||
float angle = 2 * (float)Math.PI / sides; // Angle between sides
|
|
||||||
|
|
||||||
float radius = random.NextSingle(lot.Size * 0.15f, lot.Size * 0.4f); // Length of a side
|
|
||||||
Vector2 current = lot.Position + new Vector2(random.NextSingle(-lot.Size / 4, lot.Size / 4), random.NextSingle(-lot.Size / 4, lot.Size / 4));
|
|
||||||
Vector2 dir = new Vector2(random.NextSingle(), random.NextSingle()).Normalized * radius;
|
|
||||||
|
|
||||||
List<Vector2> points = new List<Vector2>();
|
List<Vector2> points = new List<Vector2>();
|
||||||
|
int sides = random.Next(4, 7); // Number of sides
|
||||||
|
float angle = 2 * (float)Math.PI / sides; // Angle between sides
|
||||||
|
bool ok;
|
||||||
|
|
||||||
for (int i = 0; i < sides; i++)
|
do
|
||||||
{
|
{
|
||||||
points.Add(current);
|
// Reset
|
||||||
current = current + dir;
|
ok = true;
|
||||||
dir = dir.Rotate(angle);
|
points.Clear();
|
||||||
}
|
|
||||||
|
|
||||||
|
// Generate radius, start position and direction
|
||||||
|
float radius = random.NextSingle(lot.Size * 0.25f, lot.Size * 0.5f); // Length of a side
|
||||||
|
Vector2 current = lot.Position + new Vector2(random.NextSingle(-lot.Size / 2, lot.Size / 2), random.NextSingle(-lot.Size / 2, lot.Size / 2));
|
||||||
|
Vector2 dir = new Vector2(random.NextSingle(), random.NextSingle()).Normalized * radius;
|
||||||
|
|
||||||
|
// Generate polygon
|
||||||
|
for (int i = 0; i < sides; i++)
|
||||||
|
{
|
||||||
|
points.Add(current);
|
||||||
|
|
||||||
|
// Make sure every point is inside
|
||||||
|
if (!lot.IsInside(current))
|
||||||
|
{
|
||||||
|
ok = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = current + dir;
|
||||||
|
dir = dir.Rotate(angle);
|
||||||
|
}
|
||||||
|
} while (!ok);
|
||||||
|
|
||||||
return new Polygon(points);
|
return new Polygon(points);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +202,7 @@ namespace TransportGame.Generator
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
b.LevelHeights[i] = random.NextSingle(ConfigManager.Buildgen.MinBuildingHeight, ConfigManager.Buildgen.MaxBuildingHeight);
|
b.LevelHeights[i] = random.NextSingle(ConfigManager.Buildgen.MinBuildingHeight, ConfigManager.Buildgen.MaxBuildingHeight) * map.GetPopulation(lot.Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < random.Next(ConfigManager.Buildgen.MaxPolygonsPerLevel); j++)
|
for (int j = 0; j < random.Next(ConfigManager.Buildgen.MaxPolygonsPerLevel); j++)
|
@ -15,7 +15,7 @@ namespace TransportGame.Generator
|
|||||||
{
|
{
|
||||||
// Generate range
|
// Generate range
|
||||||
float mp = (float)(map.Width * map.Height) / (1024 * 1024); // For 4k x 4k range should be around 900
|
float mp = (float)(map.Width * map.Height) / (1024 * 1024); // For 4k x 4k range should be around 900
|
||||||
map.PopulationCenterRange = mp * 155f / 5f + 1490f / 3f; // For 2k x 2k range should be around 600
|
map.PopulationCenterRange = mp * 31f + 496.66f; // For 2k x 2k range should be around 600
|
||||||
|
|
||||||
// Generate a number of points
|
// Generate a number of points
|
||||||
int maxPoints = 16 * (int) Math.Sqrt(mp);
|
int maxPoints = 16 * (int) Math.Sqrt(mp);
|
||||||
@ -27,8 +27,8 @@ namespace TransportGame.Generator
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
px = random.Next(map.Width / 6, 5 * map.Width / 6);
|
px = random.Next(map.Width / 8, 7 * map.Width / 8);
|
||||||
py = random.Next(map.Height / 6, 5 * map.Height / 6);
|
py = random.Next(map.Height / 8, 7 * map.Height / 8);
|
||||||
}
|
}
|
||||||
while (map.IsWater(px, py));
|
while (map.IsWater(px, py));
|
||||||
|
|
@ -97,5 +97,29 @@ namespace TransportGame.Model
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tests if a point is inside the building lot
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="point"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool IsInside(Vector2 point)
|
||||||
|
{
|
||||||
|
return IsInsideTriangle(point, Points[0], Points[1], Points[2]) || IsInsideTriangle(point, Points[0], Points[2], Points[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float Sign(Vector2 a, Vector2 b, Vector2 c)
|
||||||
|
{
|
||||||
|
return (a.X - c.X) * (b.Y - c.Y) - (b.X - c.X) * (a.Y - c.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool IsInsideTriangle(Vector2 pt, Vector2 a, Vector2 b, Vector2 c)
|
||||||
|
{
|
||||||
|
bool b1 = Sign(pt, a, b) < 0;
|
||||||
|
bool b2 = Sign(pt, b, c) < 0;
|
||||||
|
bool b3 = Sign(pt, c, a) < 0;
|
||||||
|
|
||||||
|
return (b1 == b2) && (b2 == b3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ namespace TransportGame.Model.Config
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public float MaxBuildingHeight { get; set; }
|
public float MaxBuildingHeight { get; set; }
|
||||||
public float MinBuildingHeight { get; set; }
|
public float MinBuildingHeight { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Maximum number of primitive polygons to be generated per level
|
/// Maximum number of primitive polygons to be generated per level
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -49,8 +49,8 @@ namespace TransportGame.Model.Config
|
|||||||
LotSquareMaxSize = 20f;
|
LotSquareMaxSize = 20f;
|
||||||
LotSpacing = 0.1f;
|
LotSpacing = 0.1f;
|
||||||
MaxLotAttempts = 3;
|
MaxLotAttempts = 3;
|
||||||
MaxBuildingHeight = 20f;
|
MaxBuildingHeight = 25f;
|
||||||
MinBuildingHeight = 4f;
|
MinBuildingHeight = 5f;
|
||||||
MaxBuildingLevels = 7;
|
MaxBuildingLevels = 7;
|
||||||
MaxPolygonsPerLevel = 4;
|
MaxPolygonsPerLevel = 4;
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace TransportGame.Utils
|
namespace TransportGame.Model
|
||||||
{
|
{
|
||||||
public class Range
|
public class Range
|
||||||
{
|
{
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
namespace TransportGame.Model
|
namespace TransportGame.Model
|
||||||
{
|
{
|
||||||
@ -277,5 +276,69 @@ namespace TransportGame.Model
|
|||||||
{
|
{
|
||||||
return X.GetHashCode() * 7 + Y.GetHashCode();
|
return X.GetHashCode() * 7 + Y.GetHashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class LengthComparerImpl : IComparer<Vector2>
|
||||||
|
{
|
||||||
|
public int Compare(Vector2 a, Vector2 b)
|
||||||
|
{
|
||||||
|
if (a.LengthSq > b.LengthSq)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
if (a.LengthSq < b.LengthSq)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TrigonometricComparerImpl : IComparer<Vector2>
|
||||||
|
{
|
||||||
|
private int Quad(Vector2 v)
|
||||||
|
{
|
||||||
|
if (v.Y >= 0)
|
||||||
|
{
|
||||||
|
if (v.X >= 0)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (v.X < 0)
|
||||||
|
return 2;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Compare(Vector2 a, Vector2 b)
|
||||||
|
{
|
||||||
|
// If vectors are in different quadrants, we can use quadrant number
|
||||||
|
int qa = Quad(a), qb = Quad(b);
|
||||||
|
|
||||||
|
if (qa != qb)
|
||||||
|
{
|
||||||
|
return qa - qb;
|
||||||
|
}
|
||||||
|
|
||||||
|
// In same quadrant. Compute cross product which gives us sin(ab)*len(a)*len(b)
|
||||||
|
// Vectors are in same quadrant, so angle should be less than 90deg
|
||||||
|
float cross = Cross(a, b);
|
||||||
|
if (cross < 0) // Angle > 180 degrees => a > b
|
||||||
|
return 1;
|
||||||
|
if (cross > 0) // Angle < 180 degrees => a < b
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Points are on the same line. Use distance
|
||||||
|
if (a.LengthSq > b.LengthSq)
|
||||||
|
return 1;
|
||||||
|
else if (a.LengthSq < b.LengthSq)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
// Points are equal
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IComparer<Vector2> LengthComparer = new LengthComparerImpl();
|
||||||
|
public static IComparer<Vector2> TrigonomicComparer = new TrigonometricComparerImpl();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -139,26 +139,12 @@ namespace TransportGame.Unity
|
|||||||
uv.Add(v2);
|
uv.Add(v2);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add current node
|
// Add the node
|
||||||
addV(node.Position, 0);
|
addV(node.Position, 0);
|
||||||
vindex += 1;
|
vindex += 1;
|
||||||
|
|
||||||
// Sort adjacent segments in trigonometric order
|
// Sort adjacent segments in trigonometric order
|
||||||
var segs = node.ArticulationSegments.OrderBy(segment =>
|
var segs = node.ArticulationSegments.OrderBy(segment => DirectionFrom(segment, node), Vector2.TrigonomicComparer).ToArray();
|
||||||
{
|
|
||||||
Vector2 dir = DirectionFrom(segment, node);
|
|
||||||
|
|
||||||
if (dir.X >= 0 && dir.Y >= 0) // First quadrant:
|
|
||||||
return dir.Y; // Y coordinate grows from 0 to 1
|
|
||||||
|
|
||||||
else if (dir.X <= 0 && dir.Y >= 0) // Second quadrant:
|
|
||||||
return 1 + Math.Abs(dir.X); // X goes from 0 to -1
|
|
||||||
|
|
||||||
else if (dir.X <= 0 && dir.Y <= 0) // Third quadrant:
|
|
||||||
return 2 + Math.Abs(dir.Y); // Y goes from 0 to -1
|
|
||||||
|
|
||||||
else return 3 + dir.X; // Fourth quadrant: X grows from 0 to 1
|
|
||||||
}).ToArray();
|
|
||||||
|
|
||||||
Vector2[] sideCrns = new Vector2[segs.Length];
|
Vector2[] sideCrns = new Vector2[segs.Length];
|
||||||
Vector2[] strCrns = new Vector2[segs.Length];
|
Vector2[] strCrns = new Vector2[segs.Length];
|
||||||
@ -166,7 +152,7 @@ namespace TransportGame.Unity
|
|||||||
// Holds intersection points for perpendicular on segment that goes through sidewalk corners
|
// Holds intersection points for perpendicular on segment that goes through sidewalk corners
|
||||||
// 0, 1, 2, 3 - 0 sidewalk, 1 street, 2 street, 3 sidewalk (in trigonometric order). (when first segment)
|
// 0, 1, 2, 3 - 0 sidewalk, 1 street, 2 street, 3 sidewalk (in trigonometric order). (when first segment)
|
||||||
// 4, 5, 6, 7 - the same (when second segment)
|
// 4, 5, 6, 7 - the same (when second segment)
|
||||||
Vector2[,] p = new Vector2[8, segs.Length];
|
Vector2[,] p = new Vector2[8, segs.Length];
|
||||||
|
|
||||||
// Process each pair of segments
|
// Process each pair of segments
|
||||||
for (int i = 0; i < segs.Length; ++i)
|
for (int i = 0; i < segs.Length; ++i)
|
||||||
|
@ -23,7 +23,7 @@ Global
|
|||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(MonoDevelopProperties) = preSolution
|
GlobalSection(MonoDevelopProperties) = preSolution
|
||||||
StartupItem = Assembly-CSharp.csproj
|
StartupItem = Assembly-CSharp.csproj
|
||||||
Policies = $0
|
Policies = $0
|
||||||
$0.TextStylePolicy = $1
|
$0.TextStylePolicy = $1
|
||||||
|
@ -29,7 +29,7 @@ Global
|
|||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(MonoDevelopProperties) = preSolution
|
GlobalSection(MonoDevelopProperties) = preSolution
|
||||||
StartupItem = Assembly-CSharp.csproj
|
StartupItem = Assembly-CSharp.csproj
|
||||||
Policies = $0
|
Policies = $0
|
||||||
$0.TextStylePolicy = $1
|
$0.TextStylePolicy = $1
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -16,7 +16,7 @@ Platform assembly: C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\Transpo
|
|||||||
Loading C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\Assembly-UnityScript-firstpass.dll into Unity Child Domain
|
Loading C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\Assembly-UnityScript-firstpass.dll into Unity Child Domain
|
||||||
Platform assembly: C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\UnityEngine.UI.dll (this message is harmless)
|
Platform assembly: C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\UnityEngine.UI.dll (this message is harmless)
|
||||||
Loading C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\UnityEngine.UI.dll into Unity Child Domain
|
Loading C:\Users\Tibi\Google Drive\FacultateCY\$ Licenta\Game\TransportGame_Data\Managed\UnityEngine.UI.dll into Unity Child Domain
|
||||||
- Completed reload, in 0.050 seconds
|
- Completed reload, in 0.045 seconds
|
||||||
desktop: 1920x1080 60Hz; virtual: 1920x1080 at 0,0
|
desktop: 1920x1080 60Hz; virtual: 1920x1080 at 0,0
|
||||||
<RI> Initializing input.
|
<RI> Initializing input.
|
||||||
<RI> Input initialized.
|
<RI> Input initialized.
|
||||||
|
Binary file not shown.
@ -70,11 +70,13 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
<Compile Include="Assets\Scripts\Business\BiomeManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
<Compile Include="Assets\Scripts\Business\ConfigManager.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\BuildingGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\BuildingGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\CityGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\CityGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\PopulationCentersGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\PopulationCentersGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\RoadGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\RoadGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Generator\TerrainGenerator.cs" />
|
<Compile Include="Assets\Scripts\Business\Generator\TerrainGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\NoiseGenerator.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Business\Noise\PerlinNoiseGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
<Compile Include="Assets\Scripts\Model\Biome.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
<Compile Include="Assets\Scripts\Model\Building.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
<Compile Include="Assets\Scripts\Model\BuildingLot.cs" />
|
||||||
@ -85,14 +87,13 @@
|
|||||||
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\LineSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
<Compile Include="Assets\Scripts\Model\Map.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
<Compile Include="Assets\Scripts\Model\Polygon.cs" />
|
||||||
|
<Compile Include="Assets\Scripts\Model\Range.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
<Compile Include="Assets\Scripts\Model\Rectangle.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNetwork.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadNode.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
<Compile Include="Assets\Scripts\Model\Road\RoadSegment.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
<Compile Include="Assets\Scripts\Model\Texture.cs" />
|
||||||
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
<Compile Include="Assets\Scripts\Model\Vector2.cs" />
|
||||||
<Compile Include="Assets\Scripts\Noise\NoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Noise\PerlinNoiseGenerator.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\BuildingMeshGenerator.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
<Compile Include="Assets\Scripts\Unity\InitializeScript.cs" />
|
||||||
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
<Compile Include="Assets\Scripts\Unity\RoadMeshGenerator.cs" />
|
||||||
@ -104,7 +105,6 @@
|
|||||||
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
<Compile Include="Assets\Scripts\Utils\Logger.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
<Compile Include="Assets\Scripts\Utils\QuadTree.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\RandomExtensions.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Range.cs" />
|
|
||||||
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
<Compile Include="Assets\Scripts\Utils\SerializationHelper.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
<Compile Include="Assets\Scripts\Utils\Task.cs" />
|
||||||
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
<Compile Include="Assets\Scripts\Utils\Texture2DExtensions.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user