public List<tickProjection> MAEturnFirst(Point2D firingPosition, Point2D position, double heading, double velocity,double bulletVelocity) {
		this.firingPosition = firingPosition;
		this.position = position;
		this.heading = heading;
		this.velocity = velocity;


		double bestHeading = Utils.absBearingPerpendicular(firingPosition, position, 1);

		int wantedDirection = (int)Math.signum(velocity);
		Projection projection = new Projection(position, heading, velocity, wantedDirection, robocode.util.Utils.normalRelativeAngleDegrees(bestHeading - heading));
		List<tickProjection> rotatingProjections = new LinkedList<>();


		for (int t = 1; t < 200; t++) {
			tickProjection tick = projection.projectNextTick();

			if (robocode.util.Utils.normalNearAbsoluteAngleDegrees(Math.abs(tick.getHeading() -  bestHeading)) < 0.0001) {
				rotatingProjections.addAll(projection.getProjections());
				break;
			}
		}


		tickProjection lastTick = rotatingProjections.get(rotatingProjections.size()-1);

		projection = new Projection(lastTick.getPosition(), lastTick.getHeading(), lastTick.getVelocity(), 1, 0);
		List<tickProjection> positiveMAE = new LinkedList<>();
		boolean found = false;

		double rotatingTime = lastTick.getTick();

		for (int t = 1; t < 200 || !found; t++) {
			tickProjection tick = projection.projectNextTick();

			if (Math.abs(tick.getPosition().distance(firingPosition) -  bulletVelocity * (t + rotatingTime)) < 10) {
				found = true;
				positiveMAE.addAll(projection.getProjections());
			}
		}

		projection = new Projection(lastTick.getPosition(), lastTick.getHeading(), lastTick.getVelocity(), -1, 0);
		List<tickProjection> negativeMAE = new LinkedList<>();
		found = false;

		for (int t = 1; t < 200 || !found; t++) {
			tickProjection tick = projection.projectNextTick();

			if (Math.abs(tick.getPosition().distance(firingPosition) -  bulletVelocity * (t + rotatingTime)) < 10) {
				found = true;
				negativeMAE.addAll(projection.getProjections());
			}
		}

		positiveMAE.remove(0);
		negativeMAE.addAll(positiveMAE);

		return negativeMAE;
	}