Пример #1
0
        public bool TryGetChunk(ChunkPosition position, out Chunk chunk)
        {
            if (!_chunks.TryGetValue(position, out chunk))
            {
                chunk = ChunkRequest.Invoke(this, position);
                if (chunk == null)
                {
                    return(false);
                }

                _chunks.Add(position, chunk);
                chunk.OnChunkUpdate += Chunk_OnChunkUpdate;
            }
            return(true);
        }
Пример #2
0
        private void ApplyBuildOrders()
        {
            while (_buildOrders.Count > 0)
            {
                BuildOrder    order    = _buildOrders.Dequeue();
                ChunkPosition chunkPos = order.Position;
                if (TryGetChunk(chunkPos, out Chunk chunk))
                {
                    chunk.TrySetTile(order.Position, order.Tile);
                    OnBuildOrder?.Invoke(this, chunk, order);
                }
                else
                {
                    _buildOrderBuffer.Push(order);
                }
            }

            while (_buildOrderBuffer.Count > 0)
            {
                BuildOrder order = _buildOrderBuffer.Pop();
                _buildOrders.Enqueue(order);
            }
        }
Пример #3
0
        public Chunk(ChunkPosition position)
        {
            Position = position;

            _tiles = new Tile[Size * Size];
        }