|
|
|
|
@ -92,6 +92,13 @@ public class RaceViewController extends Controller {
|
|
|
|
|
*/
|
|
|
|
|
private AnimationTimer pointToMark;
|
|
|
|
|
|
|
|
|
|
//seagulls
|
|
|
|
|
private ObservableList<Subject3D> seagulls = FXCollections.observableArrayList();
|
|
|
|
|
//seagulls goto
|
|
|
|
|
private Map<Subject3D, List<Double>> seagullsGoToX = new HashMap<>();
|
|
|
|
|
private Map<Subject3D, List<Double>> 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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|