Exemplo n.º 1
0
        /// <summary>
        /// Processes instruction queue.
        /// </summary>
        /// <param name="postfix">Postix instructions.</param>
        /// <param name="random">Random number generator.</param>
        /// <returns>Roll result.</returns>
        public static RollResult Process(Queue <RollInstruction> postfix, IRandomNumberGenerator random)
        {
            RollInstructionChain.SetRandom(random);

            var  valueStack = new Stack <RollInstruction>();
            bool more;

            do
            {
                more = RollInstructionChain.PerformInstruction(postfix, valueStack);
            }while (more);

            return(new RollResult(valueStack.Pop().Total));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Converts roll notation into infix roll instructions.
        /// </summary>
        /// <param name="notation">Notation to convert.</param>
        /// <returns>Roll instructions as infix.</returns>
        public static List <RollInstruction> Convert(string notation)
        {
            int index = 0;
            var infix = new List <RollInstruction>();

            while (index < notation.Length)
            {
                var parsed = RollInstructionChain.ParseNextInstruction(notation, index);
                if (parsed.success)
                {
                    infix.Add(parsed.inst);
                }

                index = parsed.index;
            }

            return(infix);
        }