コード例 #1
0
        public ReactionResult React(GasMixture mixture, IGasMixtureHolder holder)
        {
            var result = ReactionResult.NoReaction;

            foreach (var effect in _effects)
            {
                result |= effect.React(mixture, holder);
            }

            return(result);
        }
コード例 #2
0
        public ReactionResult React(GasMixture mixture, IGasMixtureHolder holder, GridTileLookupSystem gridLookup)
        {
            var result = ReactionResult.NoReaction;

            foreach (var effect in _effects)
            {
                result |= effect.React(mixture, holder, gridLookup);
            }

            return(result);
        }
コード例 #3
0
        public ReactionResult React(GasMixture mixture, IGasMixtureHolder holder)
        {
            var reaction    = ReactionResult.NoReaction;
            var temperature = mixture.Temperature;
            var energy      = GetThermalEnergy(mixture);

            foreach (var prototype in GasReactions)
            {
                if (energy < prototype.MinimumEnergyRequirement ||
                    temperature < prototype.MinimumTemperatureRequirement ||
                    temperature > prototype.MaximumTemperatureRequirement)
                {
                    continue;
                }

                var doReaction = true;
                for (var i = 0; i < prototype.MinimumRequirements.Length; i++)
                {
                    if (i > Atmospherics.TotalNumberOfGases)
                    {
                        throw new IndexOutOfRangeException("Reaction Gas Minimum Requirements Array Prototype exceeds total number of gases!");
                    }

                    var req = prototype.MinimumRequirements[i];

                    if (!(mixture.GetMoles(i) < req))
                    {
                        continue;
                    }
                    doReaction = false;
                    break;
                }

                if (!doReaction)
                {
                    continue;
                }

                reaction = prototype.React(mixture, holder, this);
                if (reaction.HasFlag(ReactionResult.StopReactions))
                {
                    break;
                }
            }

            return(reaction);
        }