Allow collision checking to provide collision parameters to ray casting method

- Added tests for MockBoat collision direction and distance

#story[1100]
This commit is contained in:
cbt24
2017-08-15 13:47:59 +12:00
parent 2fbb96afd7
commit 7d64a43350
5 changed files with 70 additions and 15 deletions
@@ -5,11 +5,6 @@ import mock.model.MockBoat;
import mock.model.collider.Collider;
import mock.model.collider.Collision;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* Represents a compound mark - that is, either one or two individual marks which form a single compound mark.
*/
@@ -151,16 +146,25 @@ public class CompoundMark implements Collider {
}
@Override
public boolean rayCast(MockBoat boat) {
public boolean rayCast(MockBoat boat, Collision collision) {
GPSCoordinate position = boat.getCurrentPosition();
double distance = GPSCoordinate.calculateDistanceMeters(position, closestMark(position).getPosition());
Bearing bearing = Bearing.fromAzimuth(GPSCoordinate.calculateAzimuth(position, closestMark(position).getPosition()));
if(distance < 100) {
onCollisionEnter(new Collision(bearing, distance));
// Compass direction of collider
Bearing absolute = Bearing.fromAzimuth(GPSCoordinate.calculateAzimuth(position, closestMark(position).getPosition()));
// Direction of collider from heading
Bearing relative = Bearing.fromDegrees(absolute.degrees() - boat.getBearing().degrees());
if(distance <= collision.getDistance() && (int)relative.degrees() == (int)collision.getBearing().degrees()) {
onCollisionEnter(collision);
return true;
} else return false;
}
@Override
public boolean rayCast(MockBoat boat) {
return rayCast(boat, new Collision(Bearing.fromDegrees(0), 100));
}
@Override
public void onCollisionEnter(Collision e) {
System.out.println(e.getBearing().degrees());