private GasOverlayMessage?ChunkToMessage(GasOverlayChunk chunk) { // Chunk data should already be up to date. // Only send relevant tiles to client. var tileData = new List <(MapIndices, GasOverlayData)>(); for (var x = 0; x < ChunkSize; x++) { for (var y = 0; y < ChunkSize; y++) { // TODO: Check could be more robust I think. var data = chunk.TileData[x, y]; if ((data.Gas == null || data.Gas.Length == 0) && data.FireState == 0 && data.FireTemperature == 0.0f) { continue; } var indices = new MapIndices(chunk.MapIndices.X + x, chunk.MapIndices.Y + y); tileData.Add((indices, data)); } } if (tileData.Count == 0) { return(null); } return(new GasOverlayMessage(chunk.GridIndices, tileData)); }
public void RemoveChunk(GasOverlayChunk chunk) { // Don't need to sync to client as they can manage it themself. if (!_data.TryGetValue(chunk.GridIndices, out var chunks)) { return; } if (chunks.ContainsKey(chunk.MapIndices)) { chunks.Remove(chunk.MapIndices); } }
private GasOverlayChunk GetOrCreateChunk(GridId gridIndex, MapIndices indices) { if (!_overlay.TryGetValue(gridIndex, out var chunks)) { chunks = new Dictionary <MapIndices, GasOverlayChunk>(); _overlay[gridIndex] = chunks; } var chunkIndices = GetGasChunkIndices(indices); if (!chunks.TryGetValue(chunkIndices, out var chunk)) { chunk = new GasOverlayChunk(gridIndex, chunkIndices); chunks[chunkIndices] = chunk; } return(chunk); }
public GasOverlayMessage?AddChunk(GameTick currentTick, GasOverlayChunk chunk) { if (!_data.TryGetValue(chunk.GridIndices, out var chunks)) { chunks = new Dictionary <MapIndices, GasOverlayChunk>(); _data[chunk.GridIndices] = chunks; } if (_lastSent.TryGetValue(chunk, out var last) && last >= chunk.LastUpdate) { return(null); } _lastSent[chunk] = currentTick; var message = ChunkToMessage(chunk); return(message); }
private GasOverlayChunk GetOrCreateChunk(GridId gridId, Vector2i indices) { if (!_tileData.TryGetValue(gridId, out var chunks)) { chunks = new Dictionary <Vector2i, GasOverlayChunk>(); _tileData[gridId] = chunks; } var chunkIndices = GetGasChunkIndices(indices); if (!chunks.TryGetValue(chunkIndices, out var chunk)) { chunk = new GasOverlayChunk(gridId, chunkIndices); chunks[chunkIndices] = chunk; } return(chunk); }