Boat collision packets are now sent. Command class created for boat collision. Currently prints out message depending on if user crashed or someone else crashed. #story[1195]
This commit is contained in:
@@ -81,6 +81,7 @@ public class Event {
|
|||||||
|
|
||||||
String raceXMLFile = "mock/mockXML/raceTest.xml";
|
String raceXMLFile = "mock/mockXML/raceTest.xml";
|
||||||
String boatsXMLFile = "mock/mockXML/boatTest.xml";
|
String boatsXMLFile = "mock/mockXML/boatTest.xml";
|
||||||
|
//String boatsXMLFile = "mock/mockXML/boatsSinglePlayer.xml";
|
||||||
String regattaXMLFile = "mock/mockXML/regattaTest.xml";
|
String regattaXMLFile = "mock/mockXML/regattaTest.xml";
|
||||||
|
|
||||||
if (singlePlayer) {
|
if (singlePlayer) {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import network.Messages.Enums.RaceStatusEnum;
|
|||||||
import network.Messages.LatestMessages;
|
import network.Messages.LatestMessages;
|
||||||
import shared.model.RunnableWithFramePeriod;
|
import shared.model.RunnableWithFramePeriod;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
import java.util.Observer;
|
import java.util.Observer;
|
||||||
|
|
||||||
@@ -104,6 +105,8 @@ public class RaceLogic implements RunnableWithFramePeriod, Observer {
|
|||||||
*/
|
*/
|
||||||
private void raceLoop() {
|
private void raceLoop() {
|
||||||
|
|
||||||
|
ArrayList<MockBoat> collisionBoats = new ArrayList<>();
|
||||||
|
|
||||||
long previousFrameTime = System.currentTimeMillis();
|
long previousFrameTime = System.currentTimeMillis();
|
||||||
|
|
||||||
while (race.getRaceStatusEnum() != RaceStatusEnum.FINISHED && loopBool) {
|
while (race.getRaceStatusEnum() != RaceStatusEnum.FINISHED && loopBool) {
|
||||||
@@ -129,9 +132,17 @@ public class RaceLogic implements RunnableWithFramePeriod, Observer {
|
|||||||
//If it is still racing, update its position.
|
//If it is still racing, update its position.
|
||||||
if (boat.getStatus() == BoatStatusEnum.RACING) {
|
if (boat.getStatus() == BoatStatusEnum.RACING) {
|
||||||
race.updatePosition(boat, framePeriod, race.getRaceClock().getDurationMilli());
|
race.updatePosition(boat, framePeriod, race.getRaceClock().getDurationMilli());
|
||||||
race.getColliderRegistry().rayCast(boat);
|
|
||||||
|
if(race.getColliderRegistry().rayCast(boat)){
|
||||||
|
System.out.println("Collision!");
|
||||||
|
//Add boat to list
|
||||||
|
collisionBoats.add(boat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//System.out.println(race.getColliderRegistry().rayCast(boat));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -144,9 +155,14 @@ public class RaceLogic implements RunnableWithFramePeriod, Observer {
|
|||||||
// Change wind direction
|
// Change wind direction
|
||||||
race.changeWindDirection();
|
race.changeWindDirection();
|
||||||
|
|
||||||
|
//Pass collision boats in
|
||||||
|
server.parseBoatCollisions(collisionBoats);
|
||||||
|
|
||||||
//Parse the race snapshot.
|
//Parse the race snapshot.
|
||||||
server.parseSnapshot();
|
server.parseSnapshot();
|
||||||
|
|
||||||
|
collisionBoats.clear();
|
||||||
|
|
||||||
//Update the last frame time.
|
//Update the last frame time.
|
||||||
previousFrameTime = currentTime;
|
previousFrameTime = currentTime;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mock.model;
|
|||||||
|
|
||||||
import network.Messages.*;
|
import network.Messages.*;
|
||||||
import network.Messages.Enums.BoatLocationDeviceEnum;
|
import network.Messages.Enums.BoatLocationDeviceEnum;
|
||||||
|
import network.Messages.Enums.YachtEventEnum;
|
||||||
import shared.model.Bearing;
|
import shared.model.Bearing;
|
||||||
import shared.model.CompoundMark;
|
import shared.model.CompoundMark;
|
||||||
import shared.model.Mark;
|
import shared.model.Mark;
|
||||||
@@ -15,6 +16,7 @@ import java.util.List;
|
|||||||
public class RaceServer {
|
public class RaceServer {
|
||||||
private MockRace race;
|
private MockRace race;
|
||||||
private LatestMessages latestMessages;
|
private LatestMessages latestMessages;
|
||||||
|
private List<YachtEvent> collisionEvents = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +46,17 @@ public class RaceServer {
|
|||||||
//Parse the race status.
|
//Parse the race status.
|
||||||
snapshotMessages.add(parseRaceStatus());
|
snapshotMessages.add(parseRaceStatus());
|
||||||
|
|
||||||
|
//Parse collisions
|
||||||
|
if(collisionEvents.size()>0){
|
||||||
|
snapshotMessages.addAll(collisionEvents);
|
||||||
|
}
|
||||||
|
|
||||||
latestMessages.setSnapshot(snapshotMessages);
|
latestMessages.setSnapshot(snapshotMessages);
|
||||||
|
|
||||||
|
//Reset collision list
|
||||||
|
collisionEvents.clear();
|
||||||
|
//System.out.println(collisionEvents.size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -178,4 +190,28 @@ public class RaceServer {
|
|||||||
|
|
||||||
return raceStatus;
|
return raceStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the yacht event and return it
|
||||||
|
* @param boat yacht with event
|
||||||
|
* @param event event that happened
|
||||||
|
* @return yacht event
|
||||||
|
*/
|
||||||
|
private YachtEvent parseYachtEvent(MockBoat boat, YachtEventEnum event){
|
||||||
|
YachtEvent yachtEvent = new YachtEvent(
|
||||||
|
System.currentTimeMillis(),
|
||||||
|
this.boatLocationSequenceNumber,
|
||||||
|
race.getRaceId(),
|
||||||
|
boat.getSourceID(),
|
||||||
|
1337,
|
||||||
|
event);
|
||||||
|
return yachtEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void parseBoatCollisions(ArrayList<MockBoat> boats){
|
||||||
|
for (MockBoat boat : boats){
|
||||||
|
collisionEvents.add(parseYachtEvent(boat, YachtEventEnum.COLLISION));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public abstract class Collider extends Observable implements Locatable {
|
|||||||
notifyObservers(collision);
|
notifyObservers(collision);
|
||||||
this.setChanged();
|
this.setChanged();
|
||||||
|
|
||||||
|
//Send out packet to all boats
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else return false;
|
} else return false;
|
||||||
}
|
}
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package visualiser.Commands.VisualiserRaceCommands;
|
||||||
|
|
||||||
|
import mock.model.commandFactory.Command;
|
||||||
|
import network.Messages.YachtEvent;
|
||||||
|
import visualiser.model.VisualiserRaceState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by zwu18 on 4/09/17.
|
||||||
|
*/
|
||||||
|
public class BoatCollisionCommand implements Command {
|
||||||
|
|
||||||
|
YachtEvent yachtEvent;
|
||||||
|
|
||||||
|
VisualiserRaceState visualiserRace;
|
||||||
|
|
||||||
|
public BoatCollisionCommand(YachtEvent yachtEvent, VisualiserRaceState visualiserRace){
|
||||||
|
this.yachtEvent = yachtEvent;
|
||||||
|
this.visualiserRace = visualiserRace;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute() {
|
||||||
|
|
||||||
|
if(visualiserRace.getPlayerBoatID()==yachtEvent.getSourceID()){
|
||||||
|
System.out.println("Someone else crashed!");
|
||||||
|
} else {
|
||||||
|
System.out.println("I crashed!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("Collision command executed!");
|
||||||
|
}
|
||||||
|
}
|
||||||
+8
-1
@@ -23,7 +23,9 @@ public class VisualiserRaceCommandFactory {
|
|||||||
|
|
||||||
switch (message.getType()) {
|
switch (message.getType()) {
|
||||||
|
|
||||||
case BOATLOCATION: return new BoatLocationCommand((BoatLocation) message, visualiserRace);
|
case BOATLOCATION:
|
||||||
|
//System.out.println("Boat location received");
|
||||||
|
return new BoatLocationCommand((BoatLocation) message, visualiserRace);
|
||||||
|
|
||||||
case RACESTATUS: return new RaceStatusCommand((RaceStatus) message, visualiserRace);
|
case RACESTATUS: return new RaceStatusCommand((RaceStatus) message, visualiserRace);
|
||||||
|
|
||||||
@@ -31,6 +33,11 @@ public class VisualiserRaceCommandFactory {
|
|||||||
|
|
||||||
case ASSIGN_PLAYER_BOAT: return new AssignPlayerBoatCommand((AssignPlayerBoat) message, visualiserRace);
|
case ASSIGN_PLAYER_BOAT: return new AssignPlayerBoatCommand((AssignPlayerBoat) message, visualiserRace);
|
||||||
|
|
||||||
|
case YACHTEVENTCODE:
|
||||||
|
return new BoatCollisionCommand((YachtEvent) message, visualiserRace);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
default: throw new CommandConstructionException("Could not create VisualiserRaceCommand. Unrecognised or unsupported MessageType: " + message.getType());
|
default: throw new CommandConstructionException("Could not create VisualiserRaceCommand. Unrecognised or unsupported MessageType: " + message.getType());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,15 +96,15 @@ public class App extends Application {
|
|||||||
);
|
);
|
||||||
|
|
||||||
updateMessage("Preparing ingredients . . .");
|
updateMessage("Preparing ingredients . . .");
|
||||||
Thread.sleep(1000);
|
Thread.sleep(100);
|
||||||
for (int i = 0; i < burgerFilling.size(); i++) {
|
for (int i = 0; i < burgerFilling.size(); i++) {
|
||||||
Thread.sleep(800);
|
Thread.sleep(100);
|
||||||
updateProgress(i + 1, burgerFilling.size());
|
updateProgress(i + 1, burgerFilling.size());
|
||||||
String nextFilling = burgerFilling.get(i);
|
String nextFilling = burgerFilling.get(i);
|
||||||
addedFilling.add(nextFilling);
|
addedFilling.add(nextFilling);
|
||||||
updateMessage("Adding the " + nextFilling + " . . .");
|
updateMessage("Adding the " + nextFilling + " . . .");
|
||||||
}
|
}
|
||||||
Thread.sleep(400);
|
Thread.sleep(100);
|
||||||
updateMessage("Burger's done!");
|
updateMessage("Burger's done!");
|
||||||
|
|
||||||
return addedFilling;
|
return addedFilling;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ public class VisualiserRaceController implements RunnableWithFramePeriod {
|
|||||||
compositeRaceCommand.addCommand(command);
|
compositeRaceCommand.addCommand(command);
|
||||||
|
|
||||||
} catch (CommandConstructionException e) {
|
} catch (CommandConstructionException e) {
|
||||||
Logger.getGlobal().log(Level.WARNING, "VisualiserRaceController could not create a command for incoming message.");
|
//Logger.getGlobal().log(Level.WARNING, "VisualiserRaceController could not create a command for incoming message.");
|
||||||
|
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
Logger.getGlobal().log(Level.SEVERE, "VisualiserRaceController was interrupted on thread: " + Thread.currentThread() + " while waiting for messages.");
|
Logger.getGlobal().log(Level.SEVERE, "VisualiserRaceController was interrupted on thread: " + Thread.currentThread() + " while waiting for messages.");
|
||||||
|
|||||||
Reference in New Issue
Block a user