Ejemplo n.º 1
0
        public ResultType GetResult(bool hypothetical = false)
        {
            saveProducer.ProduceSave(this);
            dcProducer.ProduceDcInSave(this);
            ResultType ret = ResultType.FAILURE;

            //TODO: This is not DRY.  See attack situations....  This should be refactored.
            if (!hypothetical)
            {
                saveProducer.AboutToResolveSave(this);
                dcProducer.AboutToResolveDcInSave(this);

                int rollAccepted = 0;
                if (DisadvantageFlagged() && AdvantageFlagged())
                {
                    //roll normally
                    int rll = Sheet.DiceRoll(20);
                    rolls.Add(rll);
                    rollAccepted = rll;
                }
                else if (AdvantageFlagged())
                {
                    //roll adv
                    int[] rll = Sheet.MultipleDiceRoll(20, 2);
                    rolls.Add(rll[0]);
                    rolls.Add(rll[1]);

                    if (rll[0] >= rll[1])
                    {
                        rollAccepted = rll[0];
                    }
                    else
                    {
                        rollAccepted = rll[1];
                    }
                }
                else if (DisadvantageFlagged())
                {
                    //roll dis
                    int[] rll = Sheet.MultipleDiceRoll(20, 2);
                    rolls.Add(rll[0]);
                    rolls.Add(rll[1]);

                    if (rll[0] <= rll[1])
                    {
                        rollAccepted = rll[0];
                    }
                    else
                    {
                        rollAccepted = rll[1];
                    }
                }
                else
                {
                    //roll normally
                    int rll = Sheet.DiceRoll(20);
                    rolls.Add(rll);
                    rollAccepted = rll;
                }
                saveValue.ChangeCurrentAndMax(rollAccepted);

                ret = CalculateResult(saveValue, DC);

                saveProducer.DidResolveSave(this);
                dcProducer.DidResolveDcInSave(this);
            }

            return(ret);
        }