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]

main
David Wu 9 years ago
parent cd685ae467
commit 8c1eded926

@ -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;
} }

@ -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!");
}
}

@ -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.");

Loading…
Cancel
Save