diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java index 6f101989..d280372e 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceViewController.java @@ -92,6 +92,13 @@ public class RaceViewController extends Controller { */ private AnimationTimer pointToMark; + //seagulls + private ObservableList seagulls = FXCollections.observableArrayList(); + //seagulls goto + private Map> seagullsGoToX = new HashMap<>(); + private Map> seagullsGoToY = new HashMap<>(); + private double seagullSpeed = 0.01; + // note: it says it's not used but it is! do not remove :) private @FXML ArrowController arrowController; private @FXML NextMarkController nextMarkController; @@ -517,6 +524,8 @@ public class RaceViewController extends Controller { // Subject3D textSubject = new Annotation3D(new SeagullMesh()); // textSubject.setY(-10); // viewSubjects.add(textSubject); + addToFlock(); + seagullGoTo.start(); AnimationTimer rotateArrows = new AnimationTimer() { @Override @@ -1248,4 +1257,86 @@ public class RaceViewController extends Controller { deathPane.setVisible(false); } + + private AnimationTimer seagullGoTo = new AnimationTimer() { + @Override + public void handle(long now) { + for (Subject3D seagull: seagulls) { + if (seagullsGoToX.get(seagull).size() > 0) { + //System.out.println(xPosition + " " + yPosition); + seagull.setHeading(GPSConverter.getAngle(new GraphCoordinate(seagull.getX(), seagull.getZ()), + new GraphCoordinate(seagullsGoToX.get(seagull).get(0), seagullsGoToY.get(seagull).get(0)))); + double delx = seagullsGoToX.get(seagull).get(0) - seagull.getX(); + double dely = seagullsGoToY.get(seagull).get(0) - seagull.getZ(); + double scale = seagullSpeed / Math.sqrt(delx * delx + dely * dely); + if (scale < 1) { + seagull.setX(seagull.getX() + delx * scale); + seagull.setZ(seagull.getZ() + dely * scale); + } else { + seagullsGoToX.get(seagull).remove(0); + seagullsGoToY.get(seagull).remove(0); + } + } else { + randSeagullNewAction(seagull); + } + } + } + }; + + + public void randSeagullNewAction(Subject3D seagull){ + Random rand = new Random(); + int nextAction = rand.nextInt(1); + switch(nextAction){ + case 0: + //do a straight line + double nextX = rand.nextInt((int)gpsConverter.getLongitudeFactor()); + /*if (nextX > this.xBound/2){ + nextX = - nextX/2; + }*/ + double nextY = rand.nextInt((int)gpsConverter.getLatitudeFactor()); + /*if (nextY > this.yBound/2){ + nextY = - nextY/2; + }*/ + seagullsGoToX.get(seagull).add(nextX); + seagullsGoToY.get(seagull).add(nextY); + break; + case 1: + //do a octogan circle + seagullsGoToX.get(seagull).add(seagull.getX() - 3); + seagullsGoToX.get(seagull).add(seagull.getX() - 3); + seagullsGoToX.get(seagull).add(seagull.getX()); + seagullsGoToX.get(seagull).add(seagull.getX() + 3); + seagullsGoToX.get(seagull).add(seagull.getX() + 6); + seagullsGoToX.get(seagull).add(seagull.getX() + 6); + seagullsGoToX.get(seagull).add(seagull.getX() + 3); + seagullsGoToX.get(seagull).add(seagull.getX()); + //y + seagullsGoToY.get(seagull).add(seagull.getZ() - 3); + seagullsGoToY.get(seagull).add(seagull.getZ() - 6); + seagullsGoToY.get(seagull).add(seagull.getZ() - 9); + seagullsGoToY.get(seagull).add(seagull.getZ() - 9); + seagullsGoToY.get(seagull).add(seagull.getZ() - 6); + seagullsGoToY.get(seagull).add(seagull.getZ() - 3); + seagullsGoToY.get(seagull).add(seagull.getZ()); + seagullsGoToY.get(seagull).add(seagull.getZ()); + break; + } + } + + + public void addToFlock(){ + Annotation3D newSeagull = new Annotation3D(new SeagullMesh()); + newSeagull.setY(-15); + System.out.println(newSeagull.getY()); + newSeagull.setX(67); + newSeagull.setZ(43); + newSeagull.setXRot(0); + seagulls.add(newSeagull); + seagullsGoToX.put(newSeagull, new ArrayList<>()); + seagullsGoToY.put(newSeagull, new ArrayList<>()); + viewSubjects.add(newSeagull); + randSeagullNewAction(newSeagull); + } + } diff --git a/racevisionGame/src/main/java/visualiser/utils/GPSConverter.java b/racevisionGame/src/main/java/visualiser/utils/GPSConverter.java index 55db4f34..d6a88c4e 100644 --- a/racevisionGame/src/main/java/visualiser/utils/GPSConverter.java +++ b/racevisionGame/src/main/java/visualiser/utils/GPSConverter.java @@ -111,4 +111,11 @@ public class GPSConverter { return Math.atan2(coord2.getX() - coord1.getX(), coord2.getY() - coord1.getY()); } + public double getLongitudeFactor() { + return longitudeFactor; + } + + public double getLatitudeFactor() { + return latitudeFactor; + } }