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); }
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); } }
public Chunk(ChunkPosition position) { Position = position; _tiles = new Tile[Size * Size]; }