Beispiel #1
0
        //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);
                }
            }
        }