diff --git a/.gitignore b/.gitignore index a1c2a23..6b0a229 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,9 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* + +# IntelliJ IDEA # +.idea +*.iws +*.iml +*.ipr \ No newline at end of file diff --git a/src/main/java/com/rockstar/internal/Comparison.java b/src/main/java/com/rockstar/internal/Comparison.java index 9d4081d..c1a3dd1 100644 --- a/src/main/java/com/rockstar/internal/Comparison.java +++ b/src/main/java/com/rockstar/internal/Comparison.java @@ -22,6 +22,20 @@ public boolean compare(Value lhs, Value rhs) { double r=rhs.getValue(Double.class); return l>r; } + },ASLOW { + @Override + public boolean compare(Value lhs, Value rhs) { + double l=lhs.getValue(Double.class); + double r=rhs.getValue(Double.class); + return l<=r; + } + },ASHIGH { + @Override + public boolean compare(Value lhs, Value rhs) { + double l=lhs.getValue(Double.class); + double r=rhs.getValue(Double.class); + return l>=r; + } }; public final boolean compare(Program state,String lhs,String rhs) { diff --git a/src/main/java/com/rockstar/parser/ConditionParser.java b/src/main/java/com/rockstar/parser/ConditionParser.java index 0933b06..1e3d546 100644 --- a/src/main/java/com/rockstar/parser/ConditionParser.java +++ b/src/main/java/com/rockstar/parser/ConditionParser.java @@ -17,7 +17,9 @@ public class ConditionParser { private final static List IS_IDS=Arrays.asList(" is "); private final static Set HIGHER_IDS=ImmutableSet.of("higher","greater","bigger","stronger"); private final static Set LOWER_IDS=ImmutableSet.of("lower","less","smaller","weaker"); - + private final static Set ASHIGH_IDS=ImmutableSet.of("as high","as great","as big","as strong"); + private final static Set ASLOW_IDS=ImmutableSet.of("as low","as little","as small","as weak"); + public static Condition parseCondition(String str) { // "Is not" must be tried before "is" because "is not" includes "is". for (String notId:IS_NOT_IDS) if (str.contains(notId)) return new InvertedCondition(parseCondition(str,notId)); @@ -34,6 +36,14 @@ public static Condition parseCondition(String str,String id) { if (HIGHER_IDS.contains(resplit[0])) return new ComparisonCondition(lhs,resplit[1],Comparison.HIGHER); else if (LOWER_IDS.contains(resplit[0])) return new ComparisonCondition(lhs,resplit[1],Comparison.LOWER); else throw new RockstarException("Malformed condition."); - } else return new ComparisonCondition(lhs,split[1],Comparison.EQUAL); + } + else if (split[1].contains(" as ")) { + String[] resplit=split[1].split(" as "); + if (ASHIGH_IDS.contains(resplit[0])) return new ComparisonCondition(lhs,resplit[1],Comparison.ASHIGH); + else if (ASLOW_IDS.contains(resplit[0])) return new ComparisonCondition(lhs,resplit[1],Comparison.ASLOW); + else throw new RockstarException("Malformed condition."); + } + + else return new ComparisonCondition(lhs,split[1],Comparison.EQUAL); } }