Added textures to buildings. Other small improvements.

This commit is contained in:
2015-06-14 01:46:57 +03:00
parent 0766cf7348
commit 67034359f8
42 changed files with 227 additions and 22 deletions

View File

@ -202,7 +202,7 @@ namespace TransportGame.Generator
}
else
{
b.LevelHeights[i] = random.NextSingle(ConfigManager.Buildgen.MinBuildingHeight, ConfigManager.Buildgen.MaxBuildingHeight) * map.GetPopulation(lot.Position);
b.LevelHeights[i] = ConfigManager.Buildgen.MinLevelHeight + (random.NextSingle() * map.GetPopulation(lot.Position)) * (ConfigManager.Buildgen.MaxLevelHeight - ConfigManager.Buildgen.MinLevelHeight);
}
for (int j = 0; j < random.Next(ConfigManager.Buildgen.MaxPolygonsPerLevel); j++)

View File

@ -35,8 +35,8 @@ namespace TransportGame.Model.Config
/// <summary>
/// Maximum height for a building
/// </summary>
public float MaxBuildingHeight { get; set; }
public float MinBuildingHeight { get; set; }
public float MaxLevelHeight { get; set; }
public float MinLevelHeight { get; set; }
/// <summary>
/// Maximum number of primitive polygons to be generated per level
@ -49,10 +49,10 @@ namespace TransportGame.Model.Config
LotSquareMaxSize = 20f;
LotSpacing = 0.1f;
MaxLotAttempts = 3;
MaxBuildingHeight = 25f;
MinBuildingHeight = 5f;
MaxLevelHeight = 20f;
MinLevelHeight = 5f;
MaxBuildingLevels = 7;
MaxPolygonsPerLevel = 4;
MaxPolygonsPerLevel = 2;
}
}
}

View File

@ -11,18 +11,23 @@ namespace TransportGame.Unity
public class BuildingMeshGenerator
{
public Material BuildingMaterial { get; set; }
public Texture2D[] Textures { get; set; }
private GameObject parent = new GameObject("buildings");
private Map map;
private System.Random random = new System.Random();
public IEnumerable Generate(Map map)
{
this.map = map;
int i = 0;
foreach (var building in map.Buildings)
{
GenerateBuilding(building);
yield return null;
if (++i % 10 == 0)
yield return null;
}
}
@ -60,10 +65,10 @@ namespace TransportGame.Unity
vertices.Add(new Vector3(pts[k].Y, minY, pts[k].X));
vertices.Add(new Vector3(pts[k].Y, maxY, pts[k].X));
vertices.Add(new Vector3(pts[j].Y, maxY, pts[j].X));
uv.Add(new UnityEngine.Vector2(0, 0));
uv.Add(new UnityEngine.Vector2(0, 1));
uv.Add(new UnityEngine.Vector2(1, 1));
uv.Add(new UnityEngine.Vector2(1, 0));
uv.Add(new UnityEngine.Vector2(pts[j].Y + pts[j].X, minY));
uv.Add(new UnityEngine.Vector2(pts[k].Y + pts[k].X, minY));
uv.Add(new UnityEngine.Vector2(pts[k].Y + pts[k].X, maxY));
uv.Add(new UnityEngine.Vector2(pts[j].Y + pts[j].X, maxY));
triangles.AddRange(new[] { vIndex, vIndex + 1, vIndex + 2 });
triangles.AddRange(new[] { vIndex, vIndex + 2, vIndex + 3 });
vIndex = vertices.Count;
@ -73,8 +78,8 @@ namespace TransportGame.Unity
vertices.Add(new Vector3(pts[j].Y, maxY, pts[j].X));
vertices.Add(new Vector3(center.Y, maxY, center.X));
uv.Add(new UnityEngine.Vector2(0, 0));
uv.Add(new UnityEngine.Vector2(0, 1));
uv.Add(new UnityEngine.Vector2(1, 1));
uv.Add(new UnityEngine.Vector2(0, 0));
uv.Add(new UnityEngine.Vector2(0, 0));
triangles.AddRange(new[] { vIndex + 2, vIndex + 1, vIndex + 0 });
vIndex = vertices.Count;
}
@ -97,6 +102,13 @@ namespace TransportGame.Unity
MeshRenderer meshRenderer = inters.AddComponent<MeshRenderer>();
meshRenderer.materials = new[] { BuildingMaterial };
// Pick random texture
if (Textures != null)
{
int t = random.Next(Textures.Length);
meshRenderer.material.mainTexture = Textures[t];
}
}
}
}

View File

@ -14,7 +14,8 @@ public class TerrainGeneratorScript : MonoBehaviour
public int TerrainWidth = 1024;
public int TerrainHeight = 1024;
public GameObject WaterObject;
public Texture2D[] Textures;
public Texture2D[] TerrainTextures;
public Texture2D[] BuildingTextures;
public Material RoadMaterial;
public Material BuildingMaterial;
@ -73,7 +74,7 @@ public class TerrainGeneratorScript : MonoBehaviour
for (int i = 0; i < map.Biome.Textures.Length; i++)
{
Texture2D texture = Textures.FirstOrDefault(tex => tex != null && tex.name == map.Biome.Textures[i].Source);
Texture2D texture = TerrainTextures.FirstOrDefault(tex => tex != null && tex.name == map.Biome.Textures[i].Source);
if (texture == null)
throw new Exception("Texture " + map.Biome.Textures[i].Source + " not found!");
@ -137,6 +138,7 @@ public class TerrainGeneratorScript : MonoBehaviour
BuildingMeshGenerator buildingMeshGenerator = new BuildingMeshGenerator();
buildingMeshGenerator.BuildingMaterial = BuildingMaterial;
buildingMeshGenerator.Textures = BuildingTextures;
RoadMeshGenerator roadMeshGenerator = new RoadMeshGenerator();
roadMeshGenerator.RoadMaterial = RoadMaterial;