Created ray casting methods for MockBoat and CompoundMark
- Added ColliderRegistry to Race - Added collision triggering to RaceLogic - Created basic collision handlers for MockBoat and CompoundMark
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package mock.model;
|
||||
|
||||
|
||||
import mock.model.collider.Collider;
|
||||
import mock.model.collider.Collision;
|
||||
import shared.model.*;
|
||||
|
||||
|
||||
@@ -8,7 +10,7 @@ import shared.model.*;
|
||||
* Represents a Boat on the mock side of a race.
|
||||
* This adds mock specific functionality to a boat.
|
||||
*/
|
||||
public class MockBoat extends Boat {
|
||||
public class MockBoat extends Boat implements Collider {
|
||||
|
||||
|
||||
/**
|
||||
@@ -203,4 +205,19 @@ public class MockBoat extends Boat {
|
||||
public void setAutoVMG(boolean autoVMG) {
|
||||
this.autoVMG = autoVMG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean rayCast(MockBoat boat) {
|
||||
double distance = GPSCoordinate.calculateDistanceMeters(boat.getCurrentPosition(), this.getCurrentPosition());
|
||||
Bearing bearing = Bearing.fromAzimuth(GPSCoordinate.calculateAzimuth(boat.getCurrentPosition(), this.getCurrentPosition()));
|
||||
if(distance < 100 && boat != this) {
|
||||
onCollisionEnter(new Collision(bearing, distance));
|
||||
return true;
|
||||
} else return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCollisionEnter(Collision e) {
|
||||
System.out.println(e.getBearing().degrees());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package mock.model;
|
||||
|
||||
import mock.model.collider.ColliderRegistry;
|
||||
import network.Messages.Enums.BoatStatusEnum;
|
||||
import network.Messages.LatestMessages;
|
||||
import org.opengis.geometry.primitive.*;
|
||||
@@ -30,8 +31,6 @@ public class MockRace extends Race {
|
||||
*/
|
||||
private List<MockBoat> boats;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A copy of the boundary list, except "shrunk" inwards by 50m.
|
||||
*/
|
||||
@@ -79,6 +78,8 @@ public class MockRace extends Race {
|
||||
|
||||
//Wind.
|
||||
this.setWind(windGenerator.generateBaselineWind());
|
||||
|
||||
this.colliderRegistry.addAllColliders(boats);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package mock.model;
|
||||
|
||||
import javafx.animation.AnimationTimer;
|
||||
import mock.model.commandFactory.Command;
|
||||
import mock.model.commandFactory.CommandFactory;
|
||||
import mock.model.commandFactory.CompositeCommand;
|
||||
import network.Messages.Enums.BoatActionEnum;
|
||||
@@ -12,7 +11,6 @@ import visualiser.gameController.ControllerServer;
|
||||
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
import java.util.Stack;
|
||||
|
||||
public class RaceLogic implements Observer, Runnable {
|
||||
/**
|
||||
@@ -136,7 +134,7 @@ public class RaceLogic implements Observer, Runnable {
|
||||
if (boat.getStatus() == BoatStatusEnum.RACING) {
|
||||
commands.execute();
|
||||
race.updatePosition(boat, framePeriod, race.getRaceClock().getDurationMilli());
|
||||
|
||||
race.getColliderRegistry().rayCast(boat);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,10 +9,9 @@ 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);
|
||||
boolean rayCast(MockBoat boat);
|
||||
|
||||
/**
|
||||
* Handle a collision event
|
||||
|
||||
@@ -3,6 +3,7 @@ package mock.model.collider;
|
||||
import mock.model.MockBoat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -29,10 +30,14 @@ public class ColliderRegistry implements Collider {
|
||||
colliders.remove(collider);
|
||||
}
|
||||
|
||||
public void addAllColliders(Collection<? extends Collider> colliders) {
|
||||
for(Collider collider: colliders) addCollider(collider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean rayCast(MockBoat boat, Collision collision) {
|
||||
public boolean rayCast(MockBoat boat) {
|
||||
for(Collider collider: colliders) {
|
||||
if(collider.rayCast(boat, collision)) return true;
|
||||
if(collider.rayCast(boat)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user