/// <summary> /// Returns a map chunk (loads it from datastore if not currently in memory), given it's coordinates within the chunk grid /// </summary> /// <param name="chunkCoord"></param> /// <returns></returns> public MapChunk GetChunkAtChunkCoord(SVector3 chunkCoord) { if (chunkCoord.X > m_Chunks.GetUpperBound(0) || chunkCoord.Y > m_Chunks.GetUpperBound(1) || chunkCoord.Z > m_Chunks.GetUpperBound(2)) { return(null); } MapChunk chunk = m_Chunks[(int)chunkCoord.X, (int)chunkCoord.Y, (int)chunkCoord.Z]; return(chunk); }
/// <summary> /// Returns a reference to a map chunk (and all contained GameObjects), given a location /// </summary> /// <param name="loc"></param> /// <returns></returns> public MapChunk GetChunkAtMapLoc(SVector3 mapLoc) { SVector3 chunkCoord = GetChunkCoordFromMapLoc(mapLoc); if (chunkCoord == null) { return(null); } MapChunk chunk = GetChunkAtChunkCoord(chunkCoord); if (chunk == null) { throw new Exception("Error loading map chunk."); } return(chunk); }
private GameMap(double dimensionX, double dimensionY, double dimensionZ, double chunkSizeX, double chunkSizeY, double chunkSizeZ) { m_MapID = Guid.NewGuid(); m_DimensionX = dimensionX; m_DimensionY = dimensionY; m_DimensionZ = dimensionZ; // Chunk sizes. Can't be zero. if chunk size is given as zero, we dump everything into one big chunk the size of the map m_ChunkSizeX = (chunkSizeX > 0 && chunkSizeX < dimensionX) ? chunkSizeX : dimensionX; m_ChunkSizeY = (chunkSizeY > 0 && chunkSizeY < dimensionY) ? chunkSizeY : dimensionY; m_ChunkSizeZ = (chunkSizeZ > 0 && chunkSizeZ < dimensionZ) ? chunkSizeZ : dimensionZ; // create mapchunk array int xChunks = (int)Math.Ceiling(dimensionX / m_ChunkSizeX); int yChunks = (int)Math.Ceiling(dimensionY / m_ChunkSizeY); int zChunks = (int)Math.Ceiling(dimensionZ / m_ChunkSizeZ); m_Chunks = new MapChunk[xChunks, yChunks, zChunks]; }