示例#1
0
        private void CountSuccesses()
        {
            Successes = 0;
            Failures  = 0;
            _values.Clear();
            var mask = DieFlags.Critical | DieFlags.Fumble | DieFlags.Success | DieFlags.Failure;

            foreach (var die in Expression.Values)
            {
                if (die.DieType == DieType.Special)
                {
                    _values.Add(die);
                    continue;
                }
                else if (die.Flags.HasFlag(DieFlags.Dropped))
                {
                    // strip success/failure and crit/fumble data from dropped dice
                    _values.Add(new DieResult()
                    {
                        DieType  = die.DieType,
                        NumSides = die.NumSides,
                        Value    = die.Value,
                        Data     = die.Data,
                        Flags    = die.Flags & ~mask
                    });
                    continue;
                }

                if (Success.Compare(die.Value))
                {
                    Successes++;
                    _values.Add(die.Success());
                }
                else if (Failure?.Compare(die.Value) == true)
                {
                    Failures++;
                    _values.Add(die.Failure());
                }
                else
                {
                    _values.Add(new DieResult()
                    {
                        DieType  = die.DieType,
                        NumSides = die.NumSides,
                        Value    = die.Value,
                        Data     = die.Data,
                        Flags    = die.Flags & ~mask
                    });
                }
            }

            Value     = Successes - Failures;
            ValueType = ResultType.Successes;
        }