summaryrefslogtreecommitdiff
path: root/dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java
diff options
context:
space:
mode:
Diffstat (limited to 'dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java')
-rw-r--r--dice-lang/src/main/java/bjc/dicelang/IDiceExpression.java25
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) {