Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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];
        }