public void UpdateChunk(int index) { BlockTerrain.ChunkStatics statics = Terrain.chunkStats.Get(index); if (statics.needsToBeCreated && !statics.needsToBeDestroyed) { BlockTerrain.Chunk chunk = Terrain.GetChunk(index); InstantiateChunk(chunk); //if (chunk.XminusOne != null && chunk.XminusOne.Statics(Terrain).IsNormal) //{ // QuqueChunkUpdate(chunk.XminusOne.index, 3); //} //if (chunk.XplusOne != null && chunk.XplusOne.Statics(Terrain).IsNormal) //{ // QuqueChunkUpdate(chunk.XplusOne.index, 3); //} //if (chunk.YminusOne != null && chunk.YminusOne.Statics(Terrain).IsNormal) //{ // QuqueChunkUpdate(chunk.YminusOne.index, 3); //} //if (chunk.YplusOne != null && chunk.YplusOne.Statics(Terrain).IsNormal) //{ // QuqueChunkUpdate(chunk.YplusOne.index, 3); //} statics.needsToBeCreated = false; } else if (statics.needsToBeDestroyed) { chunkRenderer.RemoveChunk(index); //chunkInstanceManager.UnloadChunkInstance(Terrain.chunkInstances[index]); statics.needsToBeDestroyed = false; } ChunkInstance instance; switch (statics.state) { case 3: instance = Terrain.chunkInstances[index]; instance.UpdateMesh(0); instance.UpdateMesh(1); //chunkInstanceManager.UpdateChunkInstance(instance); break; case 1: instance = Terrain.chunkInstances[index]; instance.UpdateMesh(0); //chunkInstanceManager.UpdateChunkInstance(instance); break; case 2: instance = Terrain.chunkInstances[index]; instance.UpdateMesh(1); //chunkInstanceManager.UpdateChunkInstance(instance); break; } statics.state = 0; }
public void ChangeCell(int x, int y, int z, int newValue) { int index = Terrain.GetChunkIndex(x >> 4, z >> 4); BlockTerrain.Chunk c = Terrain.GetChunk(index); BlockTerrain.ChunkStatics state = Terrain.chunkStats.Get(index); if (c != null) { int cx = x & 15; int cz = z & 15; int content = c.GetCellContent(cx, y, cz); if (content != 0) { state.state = 3; } content = BlockTerrain.GetContent(newValue); if (content != 0) { state.state = 3; } c.SetCellValue(cx, y, cz, newValue); c.isEdited = true; if (cx == 0 && c.XminusOne != null) { QuqueChunkUpdate(c.XminusOne.index, 3); } else if (cx == 15 && c.XplusOne != null) { QuqueChunkUpdate(c.XplusOne.index, 3); } if (cz == 0 && c.YminusOne != null) { QuqueChunkUpdate(c.YminusOne.index, 3); } else if (cz == 15 && c.YplusOne != null) { QuqueChunkUpdate(c.YplusOne.index, 3); } QuqueChunkUpdate(c.index); } }