//Handles checking for vfx changes //If needed, sends them to a queue in ReactionManager so that main thread will apply them public static void GasVisualEffects(MetaDataNode node) { foreach (var gasData in node.GasMix.GasesArray) //doesn't appear to modify list while iterating { var gas = gasData.GasSO; if (gas.HasOverlay == false) { continue; } var gasAmount = node.GasMix.GetMoles(gas); if (gasAmount > gas.MinMolesToSee) { if (node.GasOverlayData.Contains(gas)) { continue; } node.AddGasOverlay(gas); if (gas.CustomColour) { node.PositionMatrix.MetaTileMap.AddOverlay(node.Position, gas.OverlayTile, color: gas.Colour, allowMultiple: gas.OverlayTile.OverlayType == OverlayType.Gas); continue; } node.PositionMatrix.MetaTileMap.AddOverlay(node.Position, gas.OverlayTile); } else { if (node.GasOverlayData.Contains(gas) == false) { continue; } node.RemoveGasOverlay(gas); if (gas.CustomColour) { node.PositionMatrix.MetaTileMap.RemoveOverlaysOfType(node.Position, LayerType.Effects, gas.OverlayTile.OverlayType, matchColour: gas.Colour); continue; } node.PositionMatrix.MetaTileMap.RemoveOverlaysOfType(node.Position, LayerType.Effects, gas.OverlayTile.OverlayType); } } }
//Handles checking for vfx changes //If needed, sends them to a queue in ReactionManager so that main thread will apply them private void GasVisualEffects(MetaDataNode node) { if (node == null || node.ReactionManager == null) { return; } foreach (var gasData in node.GasMix.GasesArray) { var gas = gasData.GasSO; if (!gas.HasOverlay) { continue; } var gasAmount = node.GasMix.GetMoles(gas); if (gasAmount > gas.MinMolesToSee) { if (node.GasOverlayData.Contains(gas)) { continue; } node.AddGasOverlay(gas); node.ReactionManager.TileChangeManager.AddOverlay(node.Position, TileManager.GetTile(TileType.Effects, gas.TileName) as OverlayTile); } else { if (node.GasOverlayData.Contains(gas) == false) { continue; } node.RemoveGasOverlay(gas); node.ReactionManager.TileChangeManager.RemoveOverlaysOfType(node.Position, LayerType.Effects, gas.OverlayType); } } }