- Collision objects specify which boat is colliding - RaceLogic sets up an observable CollisionCommand when collision bubbles up - Boats now selectively identify observers of collision #story[1196]main
parent
9cba3934ea
commit
a6db06a82c
@ -0,0 +1,39 @@
|
|||||||
|
package mock.model.commandFactory;
|
||||||
|
|
||||||
|
import mock.model.MockBoat;
|
||||||
|
import mock.model.MockRace;
|
||||||
|
import shared.model.Azimuth;
|
||||||
|
import shared.model.GPSCoordinate;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by cbt24 on 7/09/17.
|
||||||
|
*/
|
||||||
|
public class CollisionCommand extends ObserverCommand {
|
||||||
|
private GPSCoordinate startingPosition;
|
||||||
|
private Azimuth azimuth;
|
||||||
|
private double distance;
|
||||||
|
|
||||||
|
public CollisionCommand(MockRace race, MockBoat boat) {
|
||||||
|
super(race, boat);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() {
|
||||||
|
this.azimuth = Azimuth.fromDegrees(boat.getBearing().degrees() - 180d);
|
||||||
|
this.startingPosition = boat.getPosition();
|
||||||
|
this.distance = 30;
|
||||||
|
boat.setVelocityDefault(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(Observable o, Object arg) {
|
||||||
|
if(GPSCoordinate.calculateDistanceMeters(boat.getPosition(), startingPosition) < distance) {
|
||||||
|
boat.setPosition(GPSCoordinate.calculateNewPosition(boat.getPosition(), 2, azimuth));
|
||||||
|
} else {
|
||||||
|
race.deleteObserver(this);
|
||||||
|
boat.setVelocityDefault(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in new issue