Exemplo n.º 1
0
        internal double CalculateMomentaryFailureRate(String trigger)
        {
            trigger = trigger.ToLower().Trim();
            double baseFailureRate = GetBaseFailureRate();
            double totalModifiers  = 1;

            for (int i = 0, momentaryFailureModifiersCount = momentaryFailureModifiers.Count; i < momentaryFailureModifiersCount; i++)
            {
                MomentaryFailureModifier mfm = momentaryFailureModifiers[i];
                if (mfm.triggerName != trigger)
                {
                    continue;
                }
                totalModifiers *= mfm.modifier;
            }
            double momentaryRate = baseFailureRate * totalModifiers;
            // Cache this value internally
            MomentaryFailureRate mfr = GetMomentaryFailureRate(trigger);

            if (mfr.valid)
            {
                momentaryFailureRates.Remove(mfr);
                mfr.failureRate = momentaryRate;
                momentaryFailureRates.Add(mfr);
            }
            else
            {
                mfr.valid       = true;
                mfr.triggerName = trigger;
                mfr.failureRate = momentaryRate;
                momentaryFailureRates.Add(mfr);
            }
            return(momentaryRate);
        }
Exemplo n.º 2
0
        // The momentary failure rate is tracked per named "trigger" which allows multiple Reliability or FailureTrigger modules to cooperate
        // Returns the total modified failure rate back to the caller for convenience
        // IMPORTANT: For performance reasons a module should only set its Momentary Modifier WHEN IT CHANGES.  The core will cache the value.
        // Setting the same value multiple times will only force the core to recalculate the Momentary Rate over and over
        internal MomentaryFailureModifier GetMomentaryFailureModifier(String trigger, String owner)
        {
            trigger = trigger.ToLower().Trim();
            String ownerName = owner.ToLower().Trim();

            for (int i = 0, momentaryFailureModifiersCount = momentaryFailureModifiers.Count; i < momentaryFailureModifiersCount; i++)
            {
                MomentaryFailureModifier mfMod = momentaryFailureModifiers[i];
                if (mfMod.owner != ownerName || mfMod.triggerName != trigger)
                {
                    continue;
                }
                return(mfMod);
            }

            return(new MomentaryFailureModifier());
        }