    private void goalie_movement() {
      int CAGE_RADIUS = 100;
      double ang = Util.datan2(getPuck(), GOAL_POSITION);
      ang = Util.clamp(-90,ang, 90);
      double heading = getTargetHeading();
      double newX = Util.clamp(GOAL_POSITION.getX() + 50, GOAL_POSITION.getX() + Math.cos(ang)*CAGE_RADIUS, 0);
      double newY = GOAL_POSITION.getY() + Math.sin(ang)*CAGE_RADIUS;
      if (newY > 0 && getPuck().getY() < 0) {
        newY = -newY;
      } else if (newY < 0 && getPuck().getY() > 0) {
        newY = -newY;
      }
      skate((int)newX, (int)newY, 100);
      turn(getPuck(), MAX_TURN_SPEED);
      setMessage(Double.toString(newX).substring(0,5) + " " + Double.toString(newY).substring(0, 5) + " " + Double.toString(ang));
    }

    private void goalie_movement() {
      int CAGE_RADIUS = 100;
      double ang = Util.datan2(getPuck(), GOAL_POSITION);
      ang = Util.clamp(-90,ang, 90);
      double heading = getTargetHeading();
      double newX = Util.clamp(GOAL_POSITION.getX() + 50, GOAL_POSITION.getX() + Math.cos(ang)*CAGE_RADIUS, 0);
      double newY = GOAL_POSITION.getY() + Math.sin(ang)*CAGE_RADIUS;
      if (newY > 0 && getPuck().getY() < 0) {
        newY = -newY;
      } else if (newY < 0 && getPuck().getY() > 0) {
        newY = -newY;
      }
      skate((int)newX, (int)newY, 100);
      turn(getPuck(), MAX_TURN_SPEED);
    }
