/// <summary>
        /// Creates a new empty chunk at the specified chunk coordinate.
        /// </summary>
        public ChunkData CreateChunk(Int2 chunkCoord)
        {
            if (chunkObjects.ContainsKey(chunkCoord))
            {
                throw new System.Exception(string.Format("Chunk with offset {0} already exists in this grid.", chunkCoord));
            }

            // Create chunk data object
            ChunkData chunk = new ChunkData(chunkWidth * chunkHeight, layers);

            // Create and position chunk GameObject
            string     name = string.Format("chunk {0}", chunkCoord);
            GameObject obj  = new GameObject(name);

            obj.transform.SetParent(this.transform, false);
            Grid2DChunk chunkBehaviour = obj.AddComponent <Grid2DChunk>();
            Vector2     pos            = new Vector2(chunkCoord.x * ChunkWidth, chunkCoord.y * ChunkHeight);

            chunkBehaviour.transform.localPosition = pos;
            chunkBehaviour.Setup(chunkCoord, this, chunk);
            chunkObjects.Add(chunkCoord, chunkBehaviour);

            recentlyCreatedChunks.Add(chunkCoord);
            return(chunk);
        }
        public bool TryGetChunkData(Int2 chunkCoord, out ChunkData result)
        {
            Grid2DChunk chunk = null;

            if (chunkObjects.TryGetValue(chunkCoord, out chunk))
            {
                result = chunk.Data;
                return(true);
            }
            else
            {
                result = null;
                return(false);
            }
        }
 public bool TryGetChunkObject(Int2 chunkCoord, out Grid2DChunk result)
 {
     return(chunkObjects.TryGetValue(chunkCoord, out result));
 }