Moved generic ray casting to Collider abstract class

- Boat is now collider
- Collider subclasses specify their own collision ray and collision handler

#story[1100]
This commit is contained in:
cbt24
2017-08-16 16:21:55 +12:00
parent f44929f376
commit 79f3c41d45
6 changed files with 50 additions and 64 deletions
@@ -2,6 +2,8 @@ package shared.model;
import javafx.beans.property.*;
import mock.model.collider.Collider;
import mock.model.collider.Collision;
import network.Messages.Enums.BoatStatusEnum;
import org.jetbrains.annotations.Nullable;
@@ -10,7 +12,7 @@ import java.time.ZonedDateTime;
/**
* Boat Model that is used to store information on the boats that are running in the race.
*/
public class Boat implements Locatable {
public class Boat extends Collider {
/**
* The name of the boat/team.
*/
@@ -390,4 +392,15 @@ public class Boat implements Locatable {
this.timeAtLastMark = timeAtLastMark;
}
@Override
public boolean rayCast(Boat boat) {
if(boat != this) {
return rayCast(boat, 100);
} else return false;
}
@Override
public void onCollisionEnter(Collision e) {
System.out.println(e.getBearing().degrees());
}
}
@@ -1,6 +1,5 @@
package shared.model;
import mock.model.MockBoat;
import mock.model.collider.Collider;
import mock.model.collider.Collision;
@@ -8,7 +7,7 @@ import mock.model.collider.Collision;
* Represents an individual mark.
* Has a source ID, name, and position.
*/
public class Mark implements Locatable, Collider {
public class Mark extends Collider {
/**
* The source ID of the mark.
@@ -81,21 +80,7 @@ public class Mark implements Locatable, Collider {
}
@Override
public boolean rayCast(MockBoat boat, double distance) {
double actualDistance = GPSCoordinate.calculateDistanceMeters(boat.getPosition(), this.position);
// Compass direction of collider
Bearing absolute = Bearing.fromAzimuth(GPSCoordinate.calculateAzimuth(boat.getPosition(), this.position));
// Direction of collider from heading
Bearing relative = Bearing.fromDegrees(absolute.degrees() - boat.getBearing().degrees());
if(actualDistance <= distance) {
onCollisionEnter(new Collision(relative, distance));
return true;
} else return false;
}
@Override
public boolean rayCast(MockBoat boat) {
public boolean rayCast(Boat boat) {
return rayCast(boat, 100);
}