public void Dismantle(bool unexcite = true) { foreach (var tile in _tile) { if (tile == null) { continue; } tile.ExcitedGroup = null; if (!unexcite) { continue; } tile.Excited = false; _gridAtmosphereComponent.RemoveActiveTile(tile); } _tile.Clear(); }
public void ProcessCell(int fireCount) { // Can't process a tile without air if (Air == null) { _gridAtmosphereComponent.RemoveActiveTile(this); return; } if (_archivedCycle < fireCount) { Archive(fireCount); } _currentCycle = fireCount; var adjacentTileLength = 0; foreach (var(_, enemyTile) in _adjacentTiles) { // If the tile is null or has no air, we don't do anything if (enemyTile?.Air == null) { continue; } adjacentTileLength++; if (fireCount <= enemyTile._currentCycle) { continue; } enemyTile.Archive(fireCount); var shouldShareAir = false; if (ExcitedGroup != null && enemyTile.ExcitedGroup != null) { if (ExcitedGroup != enemyTile.ExcitedGroup) { ExcitedGroup.MergeGroups(enemyTile.ExcitedGroup); } shouldShareAir = true; } else if (Air.Compare(enemyTile.Air) != GasMixture.GasCompareResult.NoExchange) { if (!enemyTile.Excited) { _gridAtmosphereComponent.AddActiveTile(enemyTile); } var excitedGroup = ExcitedGroup; excitedGroup ??= enemyTile.ExcitedGroup; if (excitedGroup == null) { excitedGroup = new ExcitedGroup(); excitedGroup.Initialize(_gridAtmosphereComponent); } if (ExcitedGroup == null) { excitedGroup.AddTile(this); } if (enemyTile.ExcitedGroup == null) { excitedGroup.AddTile(enemyTile); } shouldShareAir = true; } if (shouldShareAir) { var difference = Air.Share(enemyTile.Air, adjacentTileLength); // Space wind! if (difference > 0) { ConsiderPressureDifference(enemyTile, difference); } else { enemyTile.ConsiderPressureDifference(this, -difference); } LastShareCheck(); } } React(); UpdateVisuals(); if ((!(Air.Temperature > Atmospherics.MinimumTemperatureStartSuperConduction && ConsiderSuperconductivity(true))) && ExcitedGroup == null) { _gridAtmosphereComponent.RemoveActiveTile(this); } }