Ray casting now only supports distance specification.

#story[1100]
This commit is contained in:
cbt24
2017-08-15 14:26:43 +12:00
parent 7d64a43350
commit 9ca50aa66c
5 changed files with 27 additions and 25 deletions
@@ -207,12 +207,13 @@ public class MockBoat extends Boat implements Collider {
}
@Override
public boolean rayCast(MockBoat boat, Collision collision) {
double distance = GPSCoordinate.calculateDistanceMeters(boat.getCurrentPosition(), this.getCurrentPosition());
Bearing bearing = GPSCoordinate.calculateBearing(boat.getCurrentPosition(), this.getCurrentPosition());
public boolean rayCast(MockBoat boat, double distance) {
double actualDistance = GPSCoordinate.calculateDistanceMeters(boat.getCurrentPosition(), this.getCurrentPosition());
Bearing absolute = GPSCoordinate.calculateBearing(boat.getCurrentPosition(), this.getCurrentPosition());
Bearing relative = Bearing.fromDegrees(absolute.degrees() - boat.getBearing().degrees());
if(distance <= collision.getDistance() && (int)bearing.degrees() == (int)collision.getBearing().degrees()) {
onCollisionEnter(collision);
if(actualDistance <= distance) {
onCollisionEnter(new Collision(relative, actualDistance));
return true;
} else return false;
}
@@ -220,7 +221,7 @@ public class MockBoat extends Boat implements Collider {
@Override
public boolean rayCast(MockBoat boat) {
if(boat != this) {
return rayCast(boat, new Collision(Bearing.fromDegrees(0), 100));
return rayCast(boat, 100);
} else return false;
}
@@ -7,15 +7,15 @@ import mock.model.MockBoat;
*/
public interface Collider {
/**
* Indicates whether a ray cast from a boat to a target collider triggers a collision with the specified parameters.
* Indicates whether a ray cast from a boat to a target collider is within the specified length.
* @param boat potentially colliding with target
* @param collision parameters of valid collision
* @param distance distance for valid collision
* @return whether or not a collision has occurred
*/
boolean rayCast(MockBoat boat, Collision collision);
boolean rayCast(MockBoat boat, double distance);
/**
* Indicates whether a ray cast from a boat to a target collider triggers a collision. Parameters are set by the object.
* Indicates whether a ray cast from a boat to a target collider triggers a collision. Distance is set by the object.
* @param boat potentially colliding with target
* @return whether or not a collision has occurred
*/
@@ -35,7 +35,7 @@ public class ColliderRegistry implements Collider {
}
@Override
public boolean rayCast(MockBoat boat, Collision collision) {
public boolean rayCast(MockBoat boat, double distance) {
return false;
}
@@ -146,27 +146,28 @@ public class CompoundMark implements Collider {
}
@Override
public boolean rayCast(MockBoat boat, Collision collision) {
public boolean rayCast(MockBoat boat, double distance) {
GPSCoordinate position = boat.getCurrentPosition();
double distance = GPSCoordinate.calculateDistanceMeters(position, closestMark(position).getPosition());
double actualDistance = GPSCoordinate.calculateDistanceMeters(position, closestMark(position).getPosition());
// 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);
if(actualDistance <= distance) {
onCollisionEnter(new Collision(relative, distance));
return true;
} else return false;
}
@Override
public boolean rayCast(MockBoat boat) {
return rayCast(boat, new Collision(Bearing.fromDegrees(0), 100));
return rayCast(boat, 100);
}
@Override
public void onCollisionEnter(Collision e) {
System.out.println(e.getBearing().degrees());
if(e.getBearing().degrees() < 90) System.out.println("Starboard");
else if(e.getBearing().degrees() > 270) System.out.println("Port");
}
}