Seagulls are spawnable and have semi-random motion, no sounds yets

main
Fan-Wu Yang 8 years ago
parent 98240532f0
commit 3d605db924

@ -92,6 +92,13 @@ public class RaceViewController extends Controller {
*/ */
private AnimationTimer pointToMark; 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 :) // note: it says it's not used but it is! do not remove :)
private @FXML ArrowController arrowController; private @FXML ArrowController arrowController;
private @FXML NextMarkController nextMarkController; private @FXML NextMarkController nextMarkController;
@ -517,6 +524,8 @@ public class RaceViewController extends Controller {
// Subject3D textSubject = new Annotation3D(new SeagullMesh()); // Subject3D textSubject = new Annotation3D(new SeagullMesh());
// textSubject.setY(-10); // textSubject.setY(-10);
// viewSubjects.add(textSubject); // viewSubjects.add(textSubject);
addToFlock();
seagullGoTo.start();
AnimationTimer rotateArrows = new AnimationTimer() { AnimationTimer rotateArrows = new AnimationTimer() {
@Override @Override
@ -1248,4 +1257,86 @@ public class RaceViewController extends Controller {
deathPane.setVisible(false); 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);
}
} }

@ -111,4 +111,11 @@ public class GPSConverter {
return Math.atan2(coord2.getX() - coord1.getX(), coord2.getY() - coord1.getY()); return Math.atan2(coord2.getX() - coord1.getX(), coord2.getY() - coord1.getY());
} }
public double getLongitudeFactor() {
return longitudeFactor;
}
public double getLatitudeFactor() {
return latitudeFactor;
}
} }

Loading…
Cancel
Save