Boats bounce away from marks.

- Changed onCollisionEnter signature to pass boat info

#story[1100]
main
cbt24 9 years ago
parent 8113867576
commit eaa0d2e82b

@ -27,7 +27,7 @@ public abstract class Collider extends Observable implements Locatable {
if(actualDistance <= distance) { if(actualDistance <= distance) {
Collision collision = new Collision(relative, distance); Collision collision = new Collision(relative, distance);
// Notify object of collision // Notify object of collision
onCollisionEnter(collision); onCollisionEnter(boat, collision);
// Notify observers of collision // Notify observers of collision
notifyObservers(collision); notifyObservers(collision);
this.setChanged(); this.setChanged();
@ -45,7 +45,8 @@ public abstract class Collider extends Observable implements Locatable {
/** /**
* Handle a collision event * Handle a collision event
* @param collider
* @param e details of collision * @param e details of collision
*/ */
public abstract void onCollisionEnter(Collision e); public abstract void onCollisionEnter(Boat collider, Collision e);
} }

@ -39,7 +39,7 @@ public class ColliderRegistry extends Collider implements Observer {
} }
@Override @Override
public void onCollisionEnter(Collision e) {} public void onCollisionEnter(Boat collider, Collision e) {}
@Override @Override
public GPSCoordinate getPosition() { public GPSCoordinate getPosition() {

@ -400,6 +400,6 @@ public class Boat extends Collider {
} }
@Override @Override
public void onCollisionEnter(Collision e) { public void onCollisionEnter(Boat collider, Collision e) {
} }
} }

@ -24,6 +24,10 @@ public class Mark extends Collider {
*/ */
private GPSCoordinate position; private GPSCoordinate position;
/**
* Repulsion radius of the mark
*/
private double repulsionRadius = 50;
/** /**
* Constructs a mark with a given source ID, name, and position. * Constructs a mark with a given source ID, name, and position.
@ -81,10 +85,12 @@ public class Mark extends Collider {
@Override @Override
public boolean rayCast(Boat boat) { public boolean rayCast(Boat boat) {
return rayCast(boat, 100); return rayCast(boat, repulsionRadius);
} }
@Override @Override
public void onCollisionEnter(Collision e) { public void onCollisionEnter(Boat collider, Collision e) {
Azimuth reverseAzimuth = Azimuth.fromDegrees(collider.getBearing().degrees() - 180d);
collider.setPosition(GPSCoordinate.calculateNewPosition(collider.getPosition(), 2 * repulsionRadius, reverseAzimuth));
} }
} }

Loading…
Cancel
Save