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<>();
|
yachts = new HashMap<>();
|
||||||
tokens = new ArrayList<>();
|
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<>();
|
players = new ArrayList<>();
|
||||||
GameState.hostIpAddress = hostIpAddress;
|
GameState.hostIpAddress = hostIpAddress;
|
||||||
customizationFlag = false;
|
customizationFlag = false;
|
||||||
@@ -162,6 +152,10 @@ public class GameState implements Runnable {
|
|||||||
return tokens;
|
return tokens;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void clearTokens() {
|
||||||
|
tokens.clear();
|
||||||
|
}
|
||||||
|
|
||||||
public static void addPlayer(Player player) {
|
public static void addPlayer(Player player) {
|
||||||
players.add(player);
|
players.add(player);
|
||||||
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
|
String playerText = player.getYacht().getSourceId() + " " + player.getYacht().getBoatName()
|
||||||
|
|||||||
@@ -6,12 +6,16 @@ import seng302.model.Player;
|
|||||||
import seng302.model.PolarTable;
|
import seng302.model.PolarTable;
|
||||||
import seng302.model.ServerYacht;
|
import seng302.model.ServerYacht;
|
||||||
import seng302.model.mark.CompoundMark;
|
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 seng302.utilities.GeoUtility;
|
||||||
|
|
||||||
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.*;
|
import java.util.*;
|
||||||
|
import seng302.utilities.XMLGenerator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class describing the overall server, which creates and collects server threads for each client
|
* 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;
|
terminated = false;
|
||||||
thread = new Thread(this, "MainServer");
|
thread = new Thread(this, "MainServer");
|
||||||
startUpdatingWind();
|
startUpdatingWind();
|
||||||
|
startSpawningTokens();
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +146,25 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
GameState.setWindDirection(direction.doubleValue());
|
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(){
|
private static void startUpdatingWind(){
|
||||||
Timer timer = new Timer();
|
Timer timer = new Timer();
|
||||||
timer.schedule(new TimerTask() {
|
timer.schedule(new TimerTask() {
|
||||||
@@ -151,6 +175,57 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
}, 0, 500);
|
}, 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) {
|
static void serverLog(String message, int logLevel) {
|
||||||
if (logLevel <= LOG_LEVEL) {
|
if (logLevel <= LOG_LEVEL) {
|
||||||
@@ -203,21 +278,6 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
closedConnection.terminate();
|
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() {
|
private RaceStartStatusMessage makeRaceStartMessage() {
|
||||||
Long raceStartTime = GameState.getStartTime();
|
Long raceStartTime = GameState.getStartTime();
|
||||||
|
|||||||
@@ -138,10 +138,10 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel
|
|||||||
Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView));
|
Platform.runLater(() -> contentAnchorPane.getChildren().add(0, gameView));
|
||||||
gameView.setBoats(new ArrayList<>(participants.values()));
|
gameView.setBoats(new ArrayList<>(participants.values()));
|
||||||
gameView.updateBorder(raceData.getCourseLimit());
|
gameView.updateBorder(raceData.getCourseLimit());
|
||||||
|
gameView.updateTokens(raceData.getTokens());
|
||||||
gameView.updateCourse(
|
gameView.updateCourse(
|
||||||
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
|
new ArrayList<>(raceData.getCompoundMarks().values()), raceData.getMarkSequence()
|
||||||
);
|
);
|
||||||
gameView.updateTokens(raceData.getTokens());
|
|
||||||
gameView.enableZoom();
|
gameView.enableZoom();
|
||||||
gameView.setBoatAsPlayer(player);
|
gameView.setBoatAsPlayer(player);
|
||||||
gameView.startRace();
|
gameView.startRace();
|
||||||
|
|||||||
@@ -4,19 +4,16 @@
|
|||||||
<RaceStartTime Start="${raceStartTime}" Postpone="False" />
|
<RaceStartTime Start="${raceStartTime}" Postpone="False" />
|
||||||
<RaceID>15082901</RaceID>
|
<RaceID>15082901</RaceID>
|
||||||
<RaceType>Fleet</RaceType>
|
<RaceType>Fleet</RaceType>
|
||||||
|
|
||||||
<Participants>
|
<Participants>
|
||||||
<#list boats as boat>
|
<#list boats as boat>
|
||||||
<Yacht SourceID="${boat.sourceId}"/>
|
<Yacht SourceID="${boat.sourceId}"/>
|
||||||
</#list>
|
</#list>
|
||||||
</Participants>
|
</Participants>
|
||||||
|
|
||||||
<Tokens>
|
<Tokens>
|
||||||
<#list tokens as token>
|
<#list tokens as token>
|
||||||
<Token TokenType="${token.tokenType}" TargetLat="${token.lat?c}" TargetLng="${token.lng?c}"/>
|
<Token TokenType="${token.tokenType}" TargetLat="${token.lat?c}" TargetLng="${token.lng?c}"/>
|
||||||
</#list>
|
</#list>
|
||||||
</Tokens>
|
</Tokens>
|
||||||
|
|
||||||
<Course>
|
<Course>
|
||||||
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
<CompoundMark CompoundMarkID="1" Name="Mark0">
|
||||||
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
<Mark SeqID="1" Name="Start Line 1" TargetLat="57.670603" TargetLng="11.828262" SourceID="122" />
|
||||||
|
|||||||
Reference in New Issue
Block a user