diff options
Diffstat (limited to 'dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java')
| -rw-r--r-- | dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java b/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java index 4585f75..0ee2127 100644 --- a/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java +++ b/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java @@ -11,26 +11,41 @@ import bjc.utils.funcutils.StringUtils; @FunctionalInterface public interface IDiceExpression { /** - * Parse this node into an expression + * Parse a string into an expression. + * + * It can accept the following types of expressions + * <ul> + * <li>Simple integers - '2'</li> + * <li>Simple dice - 'd6'</li> + * <li>Groups of simple dice - '2d6'</li> + * <li>Number concatenation - '2c6'</li> + * <li>Dice concatenation - '1d10c1d10</li> + * </ul> + * + * Dice concatenation is like using 2 d10s to emulate a d100, so + * instead of adding them, it reads them side by side. * * @param expression * The string to convert to an expression * - * @return The string in expression form + * @return The string, converted into expression form */ static IDiceExpression toExpression(String expression) { String literalData = expression; if (StringUtils.containsInfixOperator(literalData, "c")) { + // Parse a compound die String[] strangs = literalData.split("c"); return new CompoundDice(strangs); } else if (StringUtils.containsInfixOperator(literalData, "d")) { - /* - * Handle dice groups - */ + // Handle groups of similiar dice return ComplexDice.fromString(literalData); + } else if (literalData.startsWith("d")) { + // Handle people who put 'd6' instead of '1d6' + return new Die(Integer.parseInt(literalData.substring(1))); } else { + // Parse a scalar number try { return new ScalarDie(Integer.parseInt(literalData)); } catch (NumberFormatException nfex) { |
