public OCBlockData GetBlock(int x, int y, int z) { OCChunk chunk = null; if (_lastRequestedChunk != null) { Vector3i requestedChunkPosition = OCChunk.ToChunkPosition(x, y, z); if (requestedChunkPosition.x == _lastRequestedChunk.GetPosition().x) { if (requestedChunkPosition.y == _lastRequestedChunk.GetPosition().y) { if (requestedChunkPosition.z == _lastRequestedChunk.GetPosition().z) { chunk = _lastRequestedChunk; } } } } if (chunk == null) { chunk = GetChunk(OCChunk.ToChunkPosition(x, y, z)); _lastRequestedChunk = chunk; } if (chunk == null) { return(OCBlockData.CreateInstance <OCBlockData>()); } return(chunk.GetBlock(OCChunk.ToLocalPosition(x, y, z))); }
public int GetMaxY(int x, int z) { Vector3i chunkPos = OCChunk.ToChunkPosition(x, 0, z); chunkPos.y = _chunks.GetMax().y; Vector3i localPos = OCChunk.ToLocalPosition(x, 0, z); for (; chunkPos.y >= 0; chunkPos.y--) { localPos.y = OCChunk.SIZE_Y - 1; for (; localPos.y >= 0; localPos.y--) { OCChunk chunk = _chunks.SafeGet(chunkPos); if (chunk == null) { break; } OCBlockData block = chunk.GetBlock(localPos); if (block != null && !block.IsEmpty()) { return(OCChunk.ToWorldPosition(chunkPos, localPos).y); } } } return(0); }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private static void Build(OpenCog.Map.OCChunk chunk, bool onlyLight) { OpenCog.Map.OCMap map = chunk.GetMap(); _meshData.Clear(); for (int z = 0; z < OpenCog.Map.OCChunk.SIZE_Z; z++) { for (int y = 0; y < OpenCog.Map.OCChunk.SIZE_Y; y++) { for (int x = 0; x < OpenCog.Map.OCChunk.SIZE_X; x++) { OCBlockData blockData = chunk.GetBlock(x, y, z); if (blockData != null) { OCBlock block = blockData.block; if (block != null) { Vector3i localPos = new Vector3i(x, y, z); Vector3i worldPos = OpenCog.Map.OCChunk.ToWorldPosition(chunk.GetPosition(), localPos); if (worldPos.y > 0) { block.Build(localPos, worldPos, map, _meshData, onlyLight); } } } } } } }