mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
WIP: Marks randomly appear in course now. Mark arrows broken.
Something about sending raceXML during the course of the race breaks the mark rounding arrows functionallity, crashing the game. #story[1250]
This commit is contained in:
@@ -98,16 +98,6 @@ public class GameState implements Runnable {
|
||||
yachts = new HashMap<>();
|
||||
tokens = new ArrayList<>();
|
||||
|
||||
//TEMP TEST STUFF
|
||||
// TODO: 29/08/17 wmu16 - Take this out!
|
||||
tokens.add(new Token(TokenType.BOOST, 57.66946, 11.83154));
|
||||
tokens.add(new Token(TokenType.BOOST, 57.66877, 11.83382));
|
||||
tokens.add(new Token(TokenType.BOOST, 57.66914, 11.83965));
|
||||
tokens.add(new Token(TokenType.BOOST, 57.66684, 11.83214));
|
||||
;
|
||||
|
||||
//TEMP TEST STUFF
|
||||
|
||||
players = new ArrayList<>();
|
||||
GameState.hostIpAddress = hostIpAddress;
|
||||
customizationFlag = false;
|
||||
@@ -162,6 +152,10 @@ public class GameState implements Runnable {
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public static void clearTokens() {
|
||||
tokens.clear();
|
||||
}
|
||||
|
||||
public static void addPlayer(Player player) {
|
||||
players.add(player);
|
||||
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
|
||||
|
||||
@@ -6,12 +6,16 @@ import seng302.model.Player;
|
||||
import seng302.model.PolarTable;
|
||||
import seng302.model.ServerYacht;
|
||||
import seng302.model.mark.CompoundMark;
|
||||
import seng302.model.stream.xml.generator.RaceXMLTemplate;
|
||||
import seng302.model.token.Token;
|
||||
import seng302.model.token.TokenType;
|
||||
import seng302.utilities.GeoUtility;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import seng302.utilities.XMLGenerator;
|
||||
|
||||
/**
|
||||
* A class describing the overall server, which creates and collects server threads for each client
|
||||
@@ -48,6 +52,7 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
||||
terminated = false;
|
||||
thread = new Thread(this, "MainServer");
|
||||
startUpdatingWind();
|
||||
startSpawningTokens();
|
||||
thread.start();
|
||||
}
|
||||
|
||||
@@ -141,6 +146,25 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
||||
GameState.setWindDirection(direction.doubleValue());
|
||||
}
|
||||
|
||||
// TODO: 29/08/17 wmu16 - This should not be in one function (init and a scheduling update)
|
||||
public void startGame() {
|
||||
initialiseBoatPositions();
|
||||
Timer t = new Timer();
|
||||
|
||||
t.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
broadcastMessage(makeRaceStatusMessage());
|
||||
if (GameState.getCurrentStage() == GameStages.PRE_RACE
|
||||
|| GameState.getCurrentStage() == GameStages.LOBBYING) {
|
||||
broadcastMessage(makeRaceStartMessage());
|
||||
}
|
||||
}
|
||||
}, 0, 500);
|
||||
}
|
||||
|
||||
|
||||
// TODO: 29/08/17 wmu16 - This sort of update should be in game state
|
||||
private static void startUpdatingWind(){
|
||||
Timer timer = new Timer();
|
||||
timer.schedule(new TimerTask() {
|
||||
@@ -151,6 +175,57 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
||||
}, 0, 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Start spawning coins every 60s after the first minute
|
||||
*/
|
||||
private void startSpawningTokens() {
|
||||
Timer timer = new Timer();
|
||||
timer.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
spawnNewCoins();
|
||||
}
|
||||
}, 0, 60000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Randomly select a subset of tokens from a pre defined superset
|
||||
* Broadasts a new race status message to show this update
|
||||
*/
|
||||
private void spawnNewCoins() {
|
||||
|
||||
List<Token> allTokens = new ArrayList<>();
|
||||
Token token1 = new Token(TokenType.BOOST, 57.66946, 11.83154);
|
||||
Token token2 = new Token(TokenType.BOOST, 57.66877, 11.83382);
|
||||
Token token3 = new Token(TokenType.BOOST, 57.66914, 11.83965);
|
||||
Token token4 = new Token(TokenType.BOOST, 57.66684, 11.83214);
|
||||
allTokens.add(token1);
|
||||
allTokens.add(token2);
|
||||
allTokens.add(token3);
|
||||
allTokens.add(token4);
|
||||
|
||||
GameState.clearTokens();
|
||||
Random random = new Random();
|
||||
Collections.shuffle(allTokens);
|
||||
for (int i = 0; i < random.nextInt(allTokens.size() - 1); i++) {
|
||||
GameState.addToken(allTokens.get(i));
|
||||
}
|
||||
|
||||
XMLGenerator xmlGenerator = new XMLGenerator();
|
||||
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||
List<Token> tokens = GameState.getTokens();
|
||||
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||
|
||||
XMLMessage raceXMLMessage = new XMLMessage(
|
||||
xmlGenerator.getRaceAsXml(),
|
||||
XMLMessageSubType.RACE,
|
||||
xmlGenerator.getRaceAsXml().length());
|
||||
|
||||
broadcastMessage(raceXMLMessage);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void serverLog(String message, int logLevel) {
|
||||
if (logLevel <= LOG_LEVEL) {
|
||||
@@ -203,21 +278,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
||||
closedConnection.terminate();
|
||||
}
|
||||
|
||||
public void startGame() {
|
||||
initialiseBoatPositions();
|
||||
Timer t = new Timer();
|
||||
|
||||
t.schedule(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
broadcastMessage(makeRaceStatusMessage());
|
||||
if (GameState.getCurrentStage() == GameStages.PRE_RACE || GameState.getCurrentStage() == GameStages.LOBBYING) {
|
||||
broadcastMessage(makeRaceStartMessage());
|
||||
}
|
||||
}
|
||||
}, 0, 500);
|
||||
}
|
||||
|
||||
|
||||
private RaceStartStatusMessage makeRaceStartMessage() {
|
||||
Long raceStartTime = GameState.getStartTime();
|
||||
|
||||
@@ -138,10 +138,10 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
|
||||
Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView));
|
||||
gameView.setBoats(new ArrayList<>(participants.values()));
|
||||
gameView.updateBorder(raceData.getCourseLimit());
|
||||
gameView.updateTokens(raceData.getTokens());
|
||||
gameView.updateCourse(
|
||||
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
|
||||
);
|
||||
gameView.updateTokens(raceData.getTokens());
|
||||
gameView.enableZoom();
|
||||
gameView.setBoatAsPlayer(player);
|
||||
gameView.startRace();
|
||||
|
||||
@@ -4,19 +4,16 @@
|
||||
<RaceStartTime Start="${raceStartTime}" Postpone="False" />
|
||||
<RaceID>15082901</RaceID>
|
||||
<RaceType>Fleet</RaceType>
|
||||
|
||||
<Participants>
|
||||
<#list boats as boat>
|
||||
<Yacht SourceID="${boat.sourceId}"/>
|
||||
</#list>
|
||||
</Participants>
|
||||
|
||||
<Tokens>
|
||||
<#list tokens as token>
|
||||
<Token TokenType="${token.tokenType}" TargetLat="${token.lat?c}" TargetLng="${token.lng?c}"/>
|
||||
</#list>
|
||||
</Tokens>
|
||||
|
||||
<Course>
|
||||
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
||||
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
||||
|
||||
Reference in New Issue
Block a user