@Override
  public void processModel(CommandPlayer context, EnvironmentModel model) {
    SeeBallInfo ball = model.getLastPercept().getLastSeenBall();

    double agentAbsAngle = model.getAgentAbsAngleRadians();

    double ballAngle = FastMath.toRadians(ball.getDirection());
    double totalBallAngle = ballAngle + agentAbsAngle;
    double goalAngle = model.getGoalAngle();

    double angleBetweenBallAndGoal = totalBallAngle - goalAngle;

    kickAtGoalAction.takeAction(context, model);
  }
  /**
   *
   *
   * <ul>
   *   <li>Go to passive state if the ball is outside of movement range
   *   <li>Go to Defending state if the team doesnt have the ball and the agent doesnt have the ball
   *   <li>Go to Support state if the agent doesn't have the ball but the team does have the ball
   * </ul>
   *
   * @param stateMachine State Machine to update.
   * @param model Model containing the current game state.
   */
  @Override
  public void updateState(StateMachine stateMachine, EnvironmentModel model) {

    if (!model.ballInMovementRange() && !model.agentHasBall()) {
      stateMachine.changeState(StateMachine.PASSIVE_STATE, model);
      return;
    }

    if (!model.teamHasBall() && !model.agentHasBall()) {
      stateMachine.changeState(StateMachine.DEFENDING_STATE, model);
      return;
    }

    if (!model.agentHasBall() && model.teamHasBall() && !model.isPlayerGoalKeeper()) {
      stateMachine.changeState(StateMachine.SUPPORT_STATE, model);
    }
  }