Example #1
0
  @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;
  }