public TerrainChunk(OmniTerrain parent,int x, int y,int size) { OmniTerrain.loadedChunks.Add(this); OmniTerrain.chunks[x + y * size] = this; if (OmniTerrain.biomes.ContainsKey(x + y * size)) biome = OmniTerrain.biomes[x + y * size]; objects = new List<OmniObject>(); pendingSlantUpdates = new List<int>(); atlas = TPackManager.getAtlas ("World"); pos = new Vector3 ((int)(x*size), (int)(y*size), 0); mesh = new Mesh[] { new Mesh(), new Mesh() }; chunksize = size; slant = new byte[chunksize * chunksize]; for (int i = 0; i < slant.Length; i++) { slant[i] = 0; } this.parent = parent; if (Network.isClient) { RChunkEvent e = new RChunkEvent(OmniWorld.tick); e.x = (int)x; e.y = (int)y; e.player = Network.player; OmniEvents.AddEvent(e); } else { loaded = true; GenDamageMap(size); GenBiomes(size); GenSlant(); GenMesh(1); } }
public void OmniUpdate(float delta) { for (int i = 0; i < OmniTerrain.activeChunks.Count; i++) { if (OmniTerrain.activeChunks[i].rebuildMesh) { OmniTerrain.activeChunks[i].GenMesh(1); OmniTerrain.activeChunks[i].rebuildMesh = false; } } if (terrainUpdates.Count > 0) { BlockEvent e = new BlockEvent(OmniWorld.tick, terrainUpdates.ToArray()); OmniEvents.AddEvent(e); if (OmniWorld.isDebugging) Debug.Log("tUpdates: " + terrainUpdates.Count + " : " + e.updates[0].x + "," + e.updates[0].y); terrainUpdates.Clear(); } bool flag = false; for (int i = 0; i < toValidate.Count; i++) { toValidate[i].counter++; if (toValidate[i].counter > OmniWorld.localDelay * 2) { flag = true; break; } } if (flag) { toValidate.Clear(); for (int i = 0; i < OmniTerrain.activeChunks.Count; i++) { RChunkEvent e = new RChunkEvent(OmniWorld.tick); e.x = (int)OmniTerrain.activeChunks[i].pos.x / OmniTerrain.chunkSize; e.y = (int)OmniTerrain.activeChunks[i].pos.y / OmniTerrain.chunkSize; e.player = Network.player; OmniEvents.AddEvent(e); } } }