private void UpdateMesh(MeshArchitect meshArchitect) { Mesh mesh = new Mesh(); mesh.vertices = meshArchitect.vertices.ToArray(); mesh.triangles = meshArchitect.triangles.ToArray(); mesh.RecalculateNormals(); mesh.uv = meshArchitect.uv.ToArray(); MeshFilter meshFilter = GetComponent <MeshFilter> (); meshFilter.mesh = mesh; }
public DigData Place(Vector3i worldPosition, byte placedBlockType) { DigData result = new DigData(); Vector3i localPosition = GetLocalPosition(worldPosition); byte diggedBlockType = this.blocks[localPosition.x, localPosition.y, localPosition.z].type; this.blocks [localPosition.x, localPosition.y, localPosition.z].type = placedBlockType; this.blocks [localPosition.x, localPosition.y, localPosition.z].health = this.blockDatabase.blockMaterials[placedBlockType].hardness; MeshArchitect meshArchitect = new MeshArchitect(this.size, this.blocks, this.blockDatabase); UpdateMesh(meshArchitect); result.success = true; result.diggedBlockType = diggedBlockType; result.localPosition = localPosition; return(result); }
public void Initialize(Vector3i position, World world) { this.position = position; this.size = world.GetChunkSize(); this.blockDatabase = world.blockDatabase; this.worldPosition = position.Multiply(this.size); this.blocks = new Block[this.size, this.size, this.size]; Dictionary <Vector3i, byte> blocks; bool hasChanges = world.HasChunkChanges(this.position, out blocks); for (int x = 0; x < this.size; x++) { for (int z = 0; z < this.size; z++) { int terrainHeight = GetHeight(x + this.worldPosition.x, z + this.worldPosition.z, world.GetWorldSeed()); for (int y = 0; y < this.size; y++) { byte blockType; this.blocks [x, y, z] = new Block(); if (hasChanges && blocks.TryGetValue(new Vector3i(x, y, z), out blockType)) { //print ("OK"); } else { blockType = 0; if (y < terrainHeight) { blockType = GetType(x + this.worldPosition.x, y + this.worldPosition.y, z + this.worldPosition.z, world.GetWorldSeed()); } } this.blocks [x, y, z].type = blockType; this.blocks [x, y, z].health = this.blockDatabase.blockMaterials [blockType].hardness; } } } MeshArchitect meshArchitect = new MeshArchitect(this.size, this.blocks, this.blockDatabase); GetComponent <MeshRenderer> ().material = this.blockDatabase.materialAtlas; UpdateMesh(meshArchitect); }