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

@ -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;