mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Merge remote-tracking branch 'origin/develop' into develop
This commit is contained in:
@@ -89,7 +89,7 @@ public class GameState implements Runnable {
|
|||||||
markOrder = new MarkOrder(); //This could be instantiated at some point with a select map?
|
markOrder = new MarkOrder(); //This could be instantiated at some point with a select map?
|
||||||
markListeners = new ArrayList<>();
|
markListeners = new ArrayList<>();
|
||||||
|
|
||||||
new Thread(this).start(); //Run the auto updates on the game state
|
new Thread(this, "GameState").start(); //Run the auto updates on the game state
|
||||||
|
|
||||||
marks = new MarkOrder().getAllMarks();
|
marks = new MarkOrder().getAllMarks();
|
||||||
}
|
}
|
||||||
@@ -184,7 +184,7 @@ public class GameState implements Runnable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
||||||
while (true) {
|
while (currentStage != GameStages.FINISHED) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(1000 / STATE_UPDATES_PER_SECOND);
|
Thread.sleep(1000 / STATE_UPDATES_PER_SECOND);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
@@ -229,17 +229,24 @@ public class GameState implements Runnable {
|
|||||||
* Called periodically in this GameState thread to update the GameState values
|
* Called periodically in this GameState thread to update the GameState values
|
||||||
*/
|
*/
|
||||||
public void update() {
|
public void update() {
|
||||||
|
Boolean raceFinished = true;
|
||||||
|
|
||||||
Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0;
|
Double timeInterval = (System.currentTimeMillis() - previousUpdateTime) / 1000000.0;
|
||||||
previousUpdateTime = System.currentTimeMillis();
|
previousUpdateTime = System.currentTimeMillis();
|
||||||
for (ServerYacht yacht : yachts.values()) {
|
for (ServerYacht yacht : yachts.values()) {
|
||||||
updateVelocity(yacht);
|
updateVelocity(yacht);
|
||||||
yacht.runAutoPilot();
|
yacht.runAutoPilot();
|
||||||
yacht.updateLocation(timeInterval);
|
yacht.updateLocation(timeInterval);
|
||||||
if (!yacht.getFinishedRace()) {
|
if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
|
||||||
checkForCollision(yacht);
|
checkForCollision(yacht);
|
||||||
checkForLegProgression(yacht);
|
checkForLegProgression(yacht);
|
||||||
|
raceFinished = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (raceFinished) {
|
||||||
|
currentStage = GameStages.FINISHED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -345,6 +352,7 @@ public class GameState implements Runnable {
|
|||||||
private void checkForLegProgression(ServerYacht yacht) {
|
private void checkForLegProgression(ServerYacht yacht) {
|
||||||
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
|
Integer currentMarkSeqID = yacht.getCurrentMarkSeqID();
|
||||||
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
|
CompoundMark currentMark = markOrder.getCurrentMark(currentMarkSeqID);
|
||||||
|
// System.out.println(yacht.getCurrentMarkSeqID());
|
||||||
|
|
||||||
Boolean hasProgressed;
|
Boolean hasProgressed;
|
||||||
if (currentMarkSeqID == 0) {
|
if (currentMarkSeqID == 0) {
|
||||||
@@ -493,7 +501,6 @@ public class GameState implements Runnable {
|
|||||||
Boolean isClockwiseCross = GeoUtility.isClockwise(mark1, mark2, prevMark.getMidPoint());
|
Boolean isClockwiseCross = GeoUtility.isClockwise(mark1, mark2, prevMark.getMidPoint());
|
||||||
if (crossedLine == 1 && isClockwiseCross || crossedLine == 2 && !isClockwiseCross) {
|
if (crossedLine == 1 && isClockwiseCross || crossedLine == 2 && !isClockwiseCross) {
|
||||||
yacht.setClosestCurrentMark(mark1);
|
yacht.setClosestCurrentMark(mark1);
|
||||||
yacht.setIsFinished(true);
|
|
||||||
yacht.setBoatStatus(BoatStatus.FINISHED);
|
yacht.setBoatStatus(BoatStatus.FINISHED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,18 @@
|
|||||||
package seng302.gameServer;
|
package seng302.gameServer;
|
||||||
|
|
||||||
|
import gherkin.lexer.Fi;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
import seng302.gameServer.server.messages.BoatSubMessage;
|
||||||
import seng302.gameServer.server.messages.Message;
|
import seng302.gameServer.server.messages.Message;
|
||||||
|
import seng302.gameServer.server.messages.RaceStatus;
|
||||||
|
import seng302.gameServer.server.messages.RaceStatusMessage;
|
||||||
|
import seng302.gameServer.server.messages.RaceType;
|
||||||
import seng302.model.GeoPoint;
|
import seng302.model.GeoPoint;
|
||||||
import seng302.model.Player;
|
import seng302.model.Player;
|
||||||
import seng302.model.PolarTable;
|
import seng302.model.PolarTable;
|
||||||
@@ -43,7 +49,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
|
PolarTable.parsePolarFile(getClass().getResourceAsStream("/config/acc_polars.csv"));
|
||||||
GameState.addMarkPassListener(this::broadcastMessage);
|
GameState.addMarkPassListener(this::broadcastMessage);
|
||||||
terminated = false;
|
terminated = false;
|
||||||
thread = new Thread(this);
|
thread = new Thread(this, "MainServer");
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +83,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
|
|
||||||
//FINISHED
|
//FINISHED
|
||||||
else if (GameState.getCurrentStage() == GameStages.FINISHED) {
|
else if (GameState.getCurrentStage() == GameStages.FINISHED) {
|
||||||
|
terminate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,14 +165,37 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
t.schedule(new TimerTask() {
|
t.schedule(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
broadcastMessage(makeRaceStatusMessage());
|
||||||
for (ServerToClientThread serverToClientThread : serverToClientThreads) {
|
|
||||||
serverToClientThread.sendRaceStatusMessage();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, 0, 500);
|
}, 0, 500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private RaceStatusMessage makeRaceStatusMessage() {
|
||||||
|
// variables taken from GameServerThread
|
||||||
|
|
||||||
|
List<BoatSubMessage> boatSubMessages = new ArrayList<>();
|
||||||
|
RaceStatus raceStatus;
|
||||||
|
|
||||||
|
for (Player player : GameState.getPlayers()) {
|
||||||
|
ServerYacht y = player.getYacht();
|
||||||
|
BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(), 0,
|
||||||
|
0, 0, 1234L,
|
||||||
|
1234L);
|
||||||
|
boatSubMessages.add(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GameState.getCurrentStage() == GameStages.RACING) {
|
||||||
|
raceStatus = RaceStatus.STARTED;
|
||||||
|
} else {
|
||||||
|
raceStatus = RaceStatus.WARNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new RaceStatusMessage(1, raceStatus, GameState.getStartTime(),
|
||||||
|
GameState.getWindDirection(),
|
||||||
|
GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
|
||||||
|
RaceType.MATCH_RACE, 1, boatSubMessages);
|
||||||
|
}
|
||||||
|
|
||||||
public void terminate() {
|
public void terminate() {
|
||||||
terminated = true;
|
terminated = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread = new Thread(this);
|
thread = new Thread(this, "ServerToClient");
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -318,31 +318,6 @@ public class ServerToClientThread implements Runnable, Observer {
|
|||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendRaceStatusMessage() {
|
|
||||||
// variables taken from GameServerThread
|
|
||||||
|
|
||||||
List<BoatSubMessage> boatSubMessages = new ArrayList<>();
|
|
||||||
RaceStatus raceStatus;
|
|
||||||
|
|
||||||
for (Player player : GameState.getPlayers()) {
|
|
||||||
ServerYacht y = player.getYacht();
|
|
||||||
BoatSubMessage m = new BoatSubMessage(y.getSourceId(), y.getBoatStatus(), 0,
|
|
||||||
0, 0, 1234L,
|
|
||||||
1234L);
|
|
||||||
boatSubMessages.add(m);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (GameState.getCurrentStage() == GameStages.RACING) {
|
|
||||||
raceStatus = RaceStatus.STARTED;
|
|
||||||
} else {
|
|
||||||
raceStatus = RaceStatus.WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
sendMessage(new RaceStatusMessage(1, raceStatus, GameState.getStartTime(), GameState.getWindDirection(),
|
|
||||||
GameState.getWindSpeedMMS().longValue(), GameState.getPlayers().size(),
|
|
||||||
RaceType.MATCH_RACE, 1, boatSubMessages));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Socket getSocket() {
|
public Socket getSocket() {
|
||||||
return socket;
|
return socket;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,12 +42,11 @@ public class ServerYacht extends Observable {
|
|||||||
private Double autoHeading;
|
private Double autoHeading;
|
||||||
|
|
||||||
//Mark Rounding
|
//Mark Rounding
|
||||||
private Integer currentMarkSeqID = 0;
|
private Integer currentMarkSeqID;
|
||||||
private Boolean hasEnteredRoundingZone;
|
private Boolean hasEnteredRoundingZone;
|
||||||
private Mark closestCurrentMark;
|
private Mark closestCurrentMark;
|
||||||
private Boolean hasPassedLine;
|
private Boolean hasPassedLine;
|
||||||
private Boolean hasPassedThroughGate;
|
private Boolean hasPassedThroughGate;
|
||||||
private Boolean finishedRace;
|
|
||||||
|
|
||||||
|
|
||||||
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
|
public ServerYacht(String boatType, Integer sourceId, String hullID, String shortName,
|
||||||
@@ -65,11 +64,11 @@ public class ServerYacht extends Observable {
|
|||||||
this.lastLocation = location;
|
this.lastLocation = location;
|
||||||
this.heading = 120.0; //In degrees
|
this.heading = 120.0; //In degrees
|
||||||
this.currentVelocity = 0d; //in mms-1
|
this.currentVelocity = 0d; //in mms-1
|
||||||
|
this.currentMarkSeqID = 0;
|
||||||
|
|
||||||
this.hasEnteredRoundingZone = false;
|
this.hasEnteredRoundingZone = false;
|
||||||
this.hasPassedLine = false;
|
this.hasPassedLine = false;
|
||||||
this.hasPassedThroughGate = false;
|
this.hasPassedThroughGate = false;
|
||||||
this.finishedRace = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -322,15 +321,6 @@ public class ServerYacht extends Observable {
|
|||||||
return boatName;
|
return boatName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setIsFinished(Boolean isFinished) {
|
|
||||||
finishedRace = isFinished;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getFinishedRace() {
|
|
||||||
return finishedRace;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getCurrentVelocity() {
|
public Double getCurrentVelocity() {
|
||||||
return currentVelocity;
|
return currentVelocity;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -290,6 +290,7 @@ public class GameClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (raceFinished == true) {
|
if (raceFinished == true) {
|
||||||
|
close();
|
||||||
loadFinishScreenView();
|
loadFinishScreenView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -630,7 +630,6 @@ public class GameView extends Pane {
|
|||||||
|
|
||||||
public void setBoatAsPlayer (ClientYacht playerYacht) {
|
public void setBoatAsPlayer (ClientYacht playerYacht) {
|
||||||
this.playerYacht = playerYacht;
|
this.playerYacht = playerYacht;
|
||||||
this.playerYacht.toggleSail();
|
|
||||||
boatObjects.get(playerYacht).setAsPlayer();
|
boatObjects.get(playerYacht).setAsPlayer();
|
||||||
annotations.get(playerYacht).addAnnotation(
|
annotations.get(playerYacht).addAnnotation(
|
||||||
"velocity",
|
"velocity",
|
||||||
|
|||||||
Reference in New Issue
Block a user