@Override public boolean evaluate(Robot robot, Map<Variable, Expression> variables) { // Result values Number argOneValue = null; Number argTwoValue = null; // Argument One // Number Number amountArg1 = null; // Operators AdditionOperator addArg1 = null; SubtractionOperator subArg1 = null; DivisionOperator divArg1 = null; MultiplicationOperator mulArg1 = null; // Sensors FuelLeft fuelLeftArg1 = null; OpponentLeftRight oppLRArg1 = null; OpponentFrontBack oppFBArg1 = null; NumberBarrels numBarrelsArg1 = null; BarrelLeftRight barrelLRArg1 = null; BarrelFrontBack barrelFBArg1 = null; WallDistance wallDistArg1 = null; // Variable Variable variable1 = null; if (argumentOne instanceof Number) { Number number = (Number) argumentOne; amountArg1 = number; } // Operators if (argumentOne instanceof AdditionOperator) { addArg1 = (AdditionOperator) argumentOne; } if (argumentOne instanceof SubtractionOperator) { subArg1 = (SubtractionOperator) argumentOne; } if (argumentOne instanceof MultiplicationOperator) { mulArg1 = (MultiplicationOperator) argumentOne; } if (argumentOne instanceof DivisionOperator) { divArg1 = (DivisionOperator) argumentOne; } // Sensors if (argumentOne instanceof FuelLeft) { fuelLeftArg1 = (FuelLeft) argumentOne; } if (argumentOne instanceof OpponentLeftRight) { oppLRArg1 = (OpponentLeftRight) argumentOne; } if (argumentOne instanceof OpponentFrontBack) { oppFBArg1 = (OpponentFrontBack) argumentOne; } if (argumentOne instanceof NumberBarrels) { numBarrelsArg1 = (NumberBarrels) argumentOne; } if (argumentOne instanceof BarrelLeftRight) { barrelLRArg1 = (BarrelLeftRight) argumentOne; } if (argumentOne instanceof BarrelFrontBack) { barrelFBArg1 = (BarrelFrontBack) argumentOne; } if (argumentOne instanceof WallDistance) { wallDistArg1 = (WallDistance) argumentOne; } /*// Variable if (argumentOne instanceof Variable) { Variable temp = (Variable) argumentOne; // variable = (Variable) expression; for (Variable v : variables.keySet()) { if (v.getVariableName().equals(temp.getVariableName())) { variable1 = (Variable) v; } } }*/ if (argumentOne instanceof AssignmentNode) { AssignmentNode assig = (AssignmentNode) argumentOne; assig.execute(robot, variables); for (Variable v : variables.keySet()) { if (v.getVariableName().equals(assig.getVariableName())) { variable1 = v; } } } // ******************************************************** // ARGUMENT TWO // ******************************************************** // Argument Two // Number Number amountArg2 = null; // Operators AdditionOperator addArg2 = null; SubtractionOperator subArg2 = null; DivisionOperator divArg2 = null; MultiplicationOperator mulArg2 = null; // Sensors FuelLeft fuelLeftArg2 = null; OpponentLeftRight oppLRArg2 = null; OpponentFrontBack oppFBArg2 = null; NumberBarrels numBarrelsArg2 = null; BarrelLeftRight barrelLRArg2 = null; BarrelFrontBack barrelFBArg2 = null; WallDistance wallDistArg2 = null; // Variable Variable variable2 = null; if (argumentTwo instanceof Number) { Number number = (Number) argumentTwo; amountArg2 = number; } // Operators if (argumentTwo instanceof AdditionOperator) { addArg2 = (AdditionOperator) argumentTwo; } if (argumentTwo instanceof SubtractionOperator) { subArg2 = (SubtractionOperator) argumentTwo; } if (argumentTwo instanceof MultiplicationOperator) { mulArg2 = (MultiplicationOperator) argumentTwo; } if (argumentTwo instanceof DivisionOperator) { divArg2 = (DivisionOperator) argumentTwo; } // Sensors if (argumentTwo instanceof FuelLeft) { fuelLeftArg2 = (FuelLeft) argumentTwo; } if (argumentTwo instanceof OpponentLeftRight) { oppLRArg2 = (OpponentLeftRight) argumentTwo; } if (argumentTwo instanceof OpponentFrontBack) { oppFBArg2 = (OpponentFrontBack) argumentTwo; } if (argumentTwo instanceof NumberBarrels) { numBarrelsArg2 = (NumberBarrels) argumentTwo; } if (argumentTwo instanceof BarrelLeftRight) { barrelLRArg2 = (BarrelLeftRight) argumentTwo; } if (argumentTwo instanceof BarrelFrontBack) { barrelFBArg2 = (BarrelFrontBack) argumentTwo; } if (argumentTwo instanceof WallDistance) { wallDistArg2 = (WallDistance) argumentTwo; } /*// Variable if (argumentTwo instanceof Variable) { Variable temp = (Variable) argumentTwo; // variable = (Variable) expression; for (Variable v : variables.keySet()) { if (v.getVariableName().equals(temp.getVariableName())) { variable2 = (Variable) v; } } }*/ if (argumentTwo instanceof AssignmentNode) { AssignmentNode assig = (AssignmentNode) argumentTwo; assig.execute(robot, variables); for (Variable v : variables.keySet()) { if (v.getVariableName().equals(assig.getVariableName())) { variable2 = v; } } } // ARGUMENT ONE // If it's a number if (amountArg1 != null) { argOneValue = amountArg1; } // If it's an Operator else if (addArg1 != null) { argOneValue = new Number(addArg1.evaluate(robot, variables)); } else if (subArg1 != null) { argOneValue = new Number(subArg1.evaluate(robot, variables)); } else if (divArg1 != null) { argOneValue = new Number(divArg1.evaluate(robot, variables)); } else if (mulArg1 != null) { argOneValue = new Number(mulArg1.evaluate(robot, variables)); } // If it's a Sensor else if (fuelLeftArg1 != null) { argOneValue = new Number(fuelLeftArg1.evaluate(robot, variables)); } else if (oppLRArg1 != null) { argOneValue = new Number(oppLRArg1.evaluate(robot, variables)); } else if (oppFBArg1 != null) { argOneValue = new Number(oppFBArg1.evaluate(robot, variables)); } else if (numBarrelsArg1 != null) { argOneValue = new Number(numBarrelsArg1.evaluate(robot, variables)); } else if (barrelLRArg1 != null) { argOneValue = new Number(barrelLRArg1.evaluate(robot, variables)); } else if (barrelFBArg1 != null) { argOneValue = new Number(barrelFBArg1.evaluate(robot, variables)); } else if (wallDistArg1 != null) { argOneValue = new Number(wallDistArg1.evaluate(robot, variables)); } // Variable else if (variable1 != null) { argOneValue = new Number(variable1.evaluate(robot, variables)); } // ARGUMENT TWO // If it's a number if (amountArg2 != null) { argTwoValue = amountArg2; } // If it's an Operator else if (addArg2 != null) { argTwoValue = new Number(addArg2.evaluate(robot, variables)); } else if (subArg2 != null) { argTwoValue = new Number(subArg2.evaluate(robot, variables)); } else if (divArg2 != null) { argTwoValue = new Number(divArg2.evaluate(robot, variables)); } else if (mulArg2 != null) { argTwoValue = new Number(mulArg2.evaluate(robot, variables)); } // If it's a Sensor else if (fuelLeftArg2 != null) { argTwoValue = new Number(fuelLeftArg2.evaluate(robot, variables)); } else if (oppLRArg2 != null) { argTwoValue = new Number(oppLRArg2.evaluate(robot, variables)); } else if (oppFBArg2 != null) { argTwoValue = new Number(oppFBArg2.evaluate(robot, variables)); } else if (numBarrelsArg2 != null) { argTwoValue = new Number(numBarrelsArg2.evaluate(robot, variables)); } else if (barrelLRArg2 != null) { argTwoValue = new Number(barrelLRArg2.evaluate(robot, variables)); } else if (barrelFBArg2 != null) { argTwoValue = new Number(barrelFBArg2.evaluate(robot, variables)); } else if (wallDistArg2 != null) { argTwoValue = new Number(wallDistArg2.evaluate(robot, variables)); } // Variable else if (variable2 != null) { argTwoValue = new Number(variable2.evaluate(robot, variables)); } // System.out.println("EQ: Is "+argOneValue.getNumber()+" == "+argTwoValue.getNumber()); if (argOneValue.getNumber() == argTwoValue.getNumber()) { return true; } return false; }