internal void InitializeStage() { ChunkCache cache = World.Instance.GetCachedChunks(); // Check if we can progress to next stage List <Chunk.ChunkStageEnum> chunkStagesFound = new List <Chunk.ChunkStageEnum>(); for (int y = 0; y < Chunk.MaxSizeY / 16f; y++) { Chunk chunk = cache.GetChunk(new PositionChunk(Position.X, y, Position.Z)); if (!chunkStagesFound.Contains(chunk.Stage)) { chunkStagesFound.Add(chunk.Stage); } } if (chunkStagesFound.Contains(Chunk.ChunkStageEnum.NotGenerated)) { Stage = ColumnStageEnum.NotGenerated; } else if (chunkStagesFound.Contains(Chunk.ChunkStageEnum.Generated)) { Stage = ColumnStageEnum.Generated; NotifyNeighbors(); } else { Stage = ColumnStageEnum.Decorated; NotifyNeighbors(); } }
private void ChangeChunk(int x, int y, int z) { PositionChunk positionChunk = PositionChunk.CreateFrom(new PositionBlock(x,y,z)); chunkCache = World.Instance.GetCachedChunks(); chunk = chunkCache.GetChunk(positionChunk); chunk.Position.GetMinCornerBlock(out chunkCorner); }
private void ChangeChunk(int x, int y, int z) { PositionChunk positionChunk = PositionChunk.CreateFrom(new PositionBlock(x, y, z)); chunkCache = World.Instance.GetCachedChunks(); chunk = chunkCache.GetChunk(positionChunk); chunk.Position.GetMinCornerBlock(out chunkCorner); }
private void Invalidate() { ChunkCache cache = World.Instance.GetCachedChunks(); for (int y = 0; y < Chunk.MaxSizeY / 16f; y++) { Chunk chunk = cache.GetChunk(new PositionChunk(Position.X, y, Position.Z)); chunk.Invalidate(); } }
private void SetChunkStage(Chunk.ChunkStageEnum newStage) { ChunkCache cache = World.Instance.GetCachedChunks(); for (int y = 0; y < Chunk.MaxSizeY / 16f; y++) { Chunk chunk = cache.GetChunk(new PositionChunk(Position.X, y, Position.Z)); chunk.Stage = newStage; } }
internal void Decorate() { // Decorate here.. ChunkCache cache = World.Instance.GetCachedChunks(); Chunk chunk = cache.GetChunk(new PositionChunk(Position.X, 0, Position.Z)); World.Instance.Generator(chunk).Decorate(chunk); InvalidateMeAndNeighbors(); // update chunks and column stages SetChunkStage(Chunk.ChunkStageEnum.Update); Stage = ColumnStageEnum.Decorated; NotifyNeighbors(); }
internal void OnChunkGenerated() { ChunkCache cache = World.Instance.GetCachedChunks(); if (Stage == ColumnStageEnum.NotGenerated) { // Check if we can progress to next stage for (int y = 0; y < Chunk.MaxSizeY / 16f; y++) { Chunk chunk = cache.GetChunk(new PositionChunk(Position.X, y, Position.Z)); if (chunk.Stage == Chunk.ChunkStageEnum.NotGenerated) { return; } } Stage = ColumnStageEnum.Generated; NotifyNeighbors(); } else { throw new Exception("ERROR in chunkcolumn stage!!!"); } }