/// <summary> /// Gets the physical chunk at a position, or null if it doesn't exist /// </summary> /// <param name="chunkPos"></param> /// <returns></returns> public PhysicalChunk GetPhysicalChunk(ChunkColumnPos chunkPos) { lock (_chunkMeshes) { return(_chunkMeshes.Find(cm => cm.Chunk.Position.Equals(chunkPos))); } }
/// <summary> /// Returns whether the client has a chunk loaded /// </summary> /// <param name="pos"></param> /// <returns></returns> public bool IsChunkLoaded(ChunkColumnPos pos) { lock (_chunks) { return(_chunks.Exists(c => c.Position.Equals(pos))); } }
/// <summary> /// Unloads a chunkmesh at the specified position /// </summary> /// <param name="pos"></param> public void UnloadChunk(ChunkColumnPos pos) { lock (_chunkMeshes) { UnloadChunkMesh(_chunkMeshes.Find(cm => cm.Chunk.Position.Equals(pos))); } }
/// <summary> /// Unloads a chunk from the world. /// </summary> /// <param name="pos"></param> public void UnloadChunk(ChunkColumnPos pos) { lock (_chunks) { ChunkRenderer.UnloadChunk(pos); _chunks.RemoveAll(c => c.Position.Equals(pos)); } }
/// <summary> /// Gets the positions of each of a chunk column's neighbors /// </summary> /// <param name="pos"></param> /// <returns></returns> public static ChunkColumnPos[] GetNeighbors(ChunkColumnPos pos) { // don't use linq here because it's slow and this function needs to run _fast_ ChunkColumnPos[] neighbors = new ChunkColumnPos[4]; for (int i = 0; i < 4; i++) { neighbors[i] = pos + _neighborChunkPositions[i]; } return(neighbors); }
/// <summary> /// Returns the chunk at the specified position or null if it cannot be found /// </summary> /// <param name="pos"></param> /// <returns></returns> public Chunk GetChunk(ChunkColumnPos pos) { lock (_chunks) { if (IsChunkLoaded(pos)) { return(_chunks.Find(c => c.Position.Equals(pos))); } else { return(null); } } }
/// <summary> /// Creates a new chunk and assigns it to chunk coordinates in the world /// </summary> /// <param name="x"></param> /// <param name="z"></param> public Chunk(int x, int z, World world) { Position = new ChunkColumnPos(x, z); World = world; }
public ChunkSectionPos(ChunkColumnPos cPos, int y) { ChunkColumnPos = cPos; Y = y; }
public ChunkSectionPos(int x, int y, int z) { ChunkColumnPos = new ChunkColumnPos(x, z); Y = y; }