Created foundation classes and interfaces for collision architecture.

- Added Collider interface
- Added Collision class
- Added ColliderRegistry class

#story[1100]
main
Connor Taylor-Brown 8 years ago
parent 3cf0cf2ee0
commit 7474de9816

@ -0,0 +1,22 @@
package mock.model.collider;
import mock.model.MockBoat;
/**
* Interface for all objects sensitive to collision in a race.
*/
public interface Collider {
/**
* Indicates whether a ray cast from a boat to a target collider triggers a collision.
* @param boat potentially colliding with target
* @param collision details of potential collision
* @return whether or not a collision has occurred
*/
boolean rayCast(MockBoat boat, Collision collision);
/**
* Handle a collision event
* @param e details of collision
*/
void onCollisionEnter(Collision e);
}

@ -0,0 +1,42 @@
package mock.model.collider;
import mock.model.MockBoat;
import java.util.ArrayList;
import java.util.List;
/**
* Registry for all Collider objects in a MockRace. Wraps the Collider interface as part of a Composite Pattern.
*/
public class ColliderRegistry implements Collider {
/**
* List of all registered Colliders
*/
private List<Collider> colliders;
/**
* Default constructor for ColliderRegistry
*/
public ColliderRegistry() {
this.colliders = new ArrayList<>();
}
public void addCollider(Collider collider) {
colliders.add(collider);
}
public void removeCollider(Collider collider) {
colliders.remove(collider);
}
@Override
public boolean rayCast(MockBoat boat, Collision collision) {
for(Collider collider: colliders) {
if(collider.rayCast(boat, collision)) return true;
}
return false;
}
@Override
public void onCollisionEnter(Collision e) {}
}

@ -0,0 +1,35 @@
package mock.model.collider;
import shared.model.Bearing;
/**
* Data structure for holding collision details for ray casting and event handling.
*/
public class Collision {
/**
* Bearing from boat heading to target
*/
private Bearing bearing;
/**
* Distance from boat centre to target centre
*/
private double distance;
/**
* Constructor for Collision structure
* @param bearing from boat heading to target
* @param distance from boat centre to target centre
*/
public Collision(Bearing bearing, double distance) {
this.bearing = bearing;
this.distance = distance;
}
public Bearing getBearing() {
return bearing;
}
public double getDistance() {
return distance;
}
}
Loading…
Cancel
Save