Bubbles collision events to RaceLogic
- ColliderRegistry collects and forwards all Collision events - RaceLogic observes the ColliderRegistry of its single Race instance #story[1100]
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package mock.model;
|
package mock.model;
|
||||||
|
|
||||||
import javafx.animation.AnimationTimer;
|
import javafx.animation.AnimationTimer;
|
||||||
|
import mock.model.collider.Collision;
|
||||||
|
import mock.model.commandFactory.Command;
|
||||||
import mock.model.commandFactory.CompositeCommand;
|
import mock.model.commandFactory.CompositeCommand;
|
||||||
import mock.model.commandFactory.CommandFactory;
|
import mock.model.commandFactory.CommandFactory;
|
||||||
import network.Messages.Enums.BoatActionEnum;
|
import network.Messages.Enums.BoatActionEnum;
|
||||||
@@ -9,8 +11,11 @@ import network.Messages.Enums.RaceStatusEnum;
|
|||||||
import network.Messages.LatestMessages;
|
import network.Messages.LatestMessages;
|
||||||
import shared.model.RunnableWithFramePeriod;
|
import shared.model.RunnableWithFramePeriod;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
public class RaceLogic implements RunnableWithFramePeriod {
|
|
||||||
|
public class RaceLogic implements RunnableWithFramePeriod, Observer {
|
||||||
/**
|
/**
|
||||||
* State of current race modified by this object
|
* State of current race modified by this object
|
||||||
*/
|
*/
|
||||||
@@ -32,6 +37,8 @@ public class RaceLogic implements RunnableWithFramePeriod {
|
|||||||
this.race = race;
|
this.race = race;
|
||||||
this.server = new RaceServer(race, messages);
|
this.server = new RaceServer(race, messages);
|
||||||
this.commands = compositeCommand;
|
this.commands = compositeCommand;
|
||||||
|
|
||||||
|
race.getColliderRegistry().addObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -168,4 +175,14 @@ public class RaceLogic implements RunnableWithFramePeriod {
|
|||||||
public MockRace getRace() {
|
public MockRace getRace() {
|
||||||
return race;
|
return race;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(Observable o, Object arg) {
|
||||||
|
Collision e = (Collision)arg;
|
||||||
|
|
||||||
|
if(e.getBearing().degrees() == 0) System.out.println("Ahead");
|
||||||
|
else if(e.getBearing().degrees() < 90) System.out.println("Starboard");
|
||||||
|
else if(e.getBearing().degrees() > 270) System.out.println("Port");
|
||||||
|
else System.out.println("Behind");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,12 @@ import shared.model.Boat;
|
|||||||
import shared.model.GPSCoordinate;
|
import shared.model.GPSCoordinate;
|
||||||
import shared.model.Locatable;
|
import shared.model.Locatable;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface for all objects sensitive to collision in a race.
|
* Interface for all objects sensitive to collision in a race.
|
||||||
*/
|
*/
|
||||||
public abstract class Collider implements Locatable {
|
public abstract class Collider extends Observable implements Locatable {
|
||||||
/**
|
/**
|
||||||
* Indicates whether a ray cast from a boat to a target collider is within the specified length.
|
* Indicates whether a ray cast from a boat to a target collider is within the specified length.
|
||||||
* @param boat potentially colliding with target
|
* @param boat potentially colliding with target
|
||||||
@@ -23,7 +25,13 @@ public abstract class Collider implements Locatable {
|
|||||||
Bearing relative = Bearing.fromDegrees(absolute.degrees() - boat.getBearing().degrees());
|
Bearing relative = Bearing.fromDegrees(absolute.degrees() - boat.getBearing().degrees());
|
||||||
|
|
||||||
if(actualDistance <= distance) {
|
if(actualDistance <= distance) {
|
||||||
onCollisionEnter(new Collision(relative, distance));
|
Collision collision = new Collision(relative, distance);
|
||||||
|
// Notify object of collision
|
||||||
|
onCollisionEnter(collision);
|
||||||
|
// Notify observers of collision
|
||||||
|
notifyObservers(collision);
|
||||||
|
this.setChanged();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,12 @@ package mock.model.collider;
|
|||||||
import shared.model.Boat;
|
import shared.model.Boat;
|
||||||
import shared.model.GPSCoordinate;
|
import shared.model.GPSCoordinate;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registry for all Collider objects in a MockRace. Wraps the Collider interface as part of a Composite Pattern.
|
* Registry for all Collider objects in a MockRace. Wraps the Collider interface as part of a Composite Pattern.
|
||||||
*/
|
*/
|
||||||
public class ColliderRegistry extends Collider {
|
public class ColliderRegistry extends Collider implements Observer {
|
||||||
/**
|
/**
|
||||||
* List of all registered Colliders
|
* List of all registered Colliders
|
||||||
*/
|
*/
|
||||||
@@ -24,6 +22,7 @@ public class ColliderRegistry extends Collider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addCollider(Collider collider) {
|
public void addCollider(Collider collider) {
|
||||||
|
collider.addObserver(this);
|
||||||
colliders.add(collider);
|
colliders.add(collider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,4 +50,17 @@ public class ColliderRegistry extends Collider {
|
|||||||
public void setPosition(GPSCoordinate position) {
|
public void setPosition(GPSCoordinate position) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire onCollisionEnter when collision bubbles up from registered colliders.
|
||||||
|
* @param o object collided with
|
||||||
|
* @param arg parameters of the collision
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(Observable o, Object arg) {
|
||||||
|
Collision collision = (Collision)arg;
|
||||||
|
|
||||||
|
notifyObservers(collision);
|
||||||
|
this.setChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -401,6 +401,5 @@ public class Boat extends Collider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCollisionEnter(Collision e) {
|
public void onCollisionEnter(Collision e) {
|
||||||
System.out.println(e.getBearing().degrees());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,9 +86,5 @@ public class Mark extends Collider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCollisionEnter(Collision e) {
|
public void onCollisionEnter(Collision e) {
|
||||||
if(e.getBearing().degrees() == 0) System.out.println("Ahead");
|
|
||||||
else if(e.getBearing().degrees() < 90) System.out.println("Starboard");
|
|
||||||
else if(e.getBearing().degrees() > 270) System.out.println("Port");
|
|
||||||
else System.out.println("Behind");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user