//redraws chunk dependant on the chunk number public void OnTileTypeChange(int chunkNumber) { //update chunk mesh GameObject chunk = GameObject.Find("CHUNK " + chunkNumber); MeshFilter chunkFilter = chunk.GetComponent <MeshFilter> (); Mesh chunkMesh = chunkFilter.mesh; MeshGameObject meshScript = chunk.GetComponent <MeshGameObject> (); data.RewriteUV(meshScript.X, meshScript.Y, meshScript.Width, meshScript.Height); chunkMesh.uv = data.UVs.ToArray(); }
public void MainThreadUpdate(LargeSketch sketch, object tag) { var mgos = sketch.mgos; int index = renderer_index; while (!(index < mgos.Count)) { mgos.Add(null); } Debug.Assert(mgos[index] == null); mgos[index] = new MeshGameObject(sketch, this, tag); }
//create mesh from MeshData, mountain layer is true void GenerateMountainLayer(int x, int y, int width, int height) { //create mesh at coords of 100 x 100 tiles MountainData = new MeshData(x, y, width, height, true); //new chunk gameobject, child of world, with id GameObject meshGO = new GameObject("MountainLayer " + meshGOMountainvalue); MeshGameObject mountainMeshScript = meshGO.AddComponent <MeshGameObject> (); //The script on the mountain mesh is aware of its coords and width/height mountainMeshScript.X = x; mountainMeshScript.Y = y; mountainMeshScript.Width = width; mountainMeshScript.Height = height; meshGO.transform.SetParent(this.transform); //add a mesh filter and renderer MeshFilter filter = meshGO.AddComponent <MeshFilter> (); MeshRenderer render = meshGO.AddComponent <MeshRenderer> (); render.material = material; //render the mountains layer infront of everything else render.sortingOrder = 1; Mesh mesh = filter.mesh; //create vertices, triangles and uvs from meshdata mesh.vertices = MountainData.vertices.ToArray(); mesh.triangles = MountainData.triangles.ToArray(); mesh.uv = MountainData.UVs.ToArray(); //each tile is told its mesh's value for (int i = x; i < x + width; i++) { for (int j = y; j < y + height; j++) { tiles [i, j].MountainChunkNumber = meshGOMountainvalue; } } meshGOMountainvalue++; }
//create mesh from MeshData void GenerateTilesLayer(int x, int y, int width, int height) { //create mesh of squares and using tiles[,] gets the right uvs etc, using GetTileAt() data = new MeshData(x, y, width, height); //new chunk gameobject, child of world, with id GameObject meshGO = new GameObject("CHUNK " + meshGOvalue); meshGO.transform.SetParent(this.transform); //adds mesh script to GameObjects, the mesh is therefore aware of certain variables MeshGameObject meshScript = meshGO.AddComponent <MeshGameObject> (); meshScript.X = x; meshScript.Y = y; meshScript.Width = width; meshScript.Height = height; //add a mesh filter and renderer MeshFilter filter = meshGO.AddComponent <MeshFilter> (); MeshRenderer render = meshGO.AddComponent <MeshRenderer> (); render.material = material; Mesh mesh = filter.mesh; //create vertices, triangles and uvs from meshdata mesh.vertices = data.vertices.ToArray(); mesh.triangles = data.triangles.ToArray(); mesh.uv = data.UVs.ToArray(); for (int i = x; i < x + width; i++) { for (int j = y; j < y + height; j++) { tiles [i, j].ChunkNumber = meshGOvalue; } } meshGOvalue++; }