void OnTerrianDataReceived(TerrianData terrianData) { this.terrianData = terrianData; terrianDataReceived = true; UpdateTerrainSpawn(); }
public void DrawTerrianInEditor() { TerrianData terrianData = GenerateTerrianData(Vector2.zero); TerrianDisplay display = FindObjectOfType <TerrianDisplay> (); display.DrawMesh(MeshGenerator.GenerateTerrainMesh(terrianData.noise, terrianAsset.maxHeight, terrianAsset.waterLevel, detailLevel)); }
void MeshDataThread(TerrianData terrianData, int spawnTerrianDetailLevel, Action <MeshData> callback) { MeshData meshData = MeshGenerator.GenerateTerrainMesh(terrianData.noise, terrianAsset.maxHeight, terrianAsset.waterLevel, spawnTerrianDetailLevel); lock (meshDataThreadInfoQueue) { meshDataThreadInfoQueue.Enqueue(new DataThreadInfo <MeshData>(callback, meshData)); } }
public void RequestMeshData(TerrianData terrianData, int spawnTerrianDetailLevel, Action <MeshData> callback) { ThreadStart threadStart = delegate { MeshDataThread(terrianData, spawnTerrianDetailLevel, callback); }; new Thread(threadStart).Start(); }
void TerrianDataThread(Vector2 center, Action <TerrianData> callback) { TerrianData terrianData = GenerateTerrianData(center); lock (terrianDataThreadInfoQueue) { terrianDataThreadInfoQueue.Enqueue(new DataThreadInfo <TerrianData>(callback, terrianData)); } }
void GenerateModels(TerrianData terrianData, Mesh mesh) { if (mesh != null) { Vector3[] vertices = mesh.vertices; Vector3[] normals = mesh.normals; System.Random rand = new System.Random(); System.Random boatGeneration = new System.Random(10); int index = 0; float maxSnowManHeight = float.MinValue; Quaternion snowManRotation = Quaternion.identity; Vector3 snowManPos = new Vector3(); foreach (Vector3 vertex in vertices) { if (vertex.y > 70 && vertex.y < 75) { var tree = Instantiate(models.trees[rand.Next(0, 3)], new Vector3(vertex.x + terrianPosition.x, vertex.y, vertex.z + terrianPosition.y), Quaternion.identity); tree.transform.localScale = new Vector3(0.8f, 0.8f, 0.8f); tree.transform.rotation = Quaternion.FromToRotation(Vector3.up, normals[index]); tree.transform.parent = meshObject.transform; } if (vertex.y >= 49 && vertex.y <= 50) { var randomDouble = boatGeneration.NextDouble(); if (randomDouble > 0.2 && randomDouble < 0.201) { var boat = Instantiate(models.boats[rand.Next(0, 5)], new Vector3(vertex.x + terrianPosition.x, vertex.y, vertex.z + terrianPosition.y), Quaternion.identity); boat.transform.localScale = new Vector3(0.005f, 0.005f, 0.005f); boat.transform.rotation = Quaternion.FromToRotation(Vector3.up, normals[index]); boat.transform.parent = meshObject.transform; } } if (vertex.y > maxSnowManHeight) { snowManPos = new Vector3(vertex.x + terrianPosition.x, vertex.y, vertex.z + terrianPosition.y); maxSnowManHeight = vertex.y; snowManRotation = Quaternion.FromToRotation(Vector3.up, normals[index]); } index++; } var snowman = Instantiate(models.snowman, snowManPos, Quaternion.identity); snowman.transform.localScale = Vector3.one * 5; snowman.transform.rotation = snowManRotation; snowman.transform.parent = meshObject.transform; } }
public void RequestMesh(TerrianData terrianData) { hasRequestedMesh = true; terrianGenerator.RequestMeshData(terrianData, level, OnMeshDataReceived); }