mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Minor refactor moving Spawning and token creation to game state
#story[1250]
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
package seng302.gameServer;
|
package seng302.gameServer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import javafx.scene.paint.Color;
|
import javafx.scene.paint.Color;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
@@ -74,7 +76,6 @@ public class GameState implements Runnable {
|
|||||||
private static String hostIpAddress;
|
private static String hostIpAddress;
|
||||||
private static List<Player> players;
|
private static List<Player> players;
|
||||||
private static Map<Integer, ServerYacht> yachts;
|
private static Map<Integer, ServerYacht> yachts;
|
||||||
private static List<Token> tokens;
|
|
||||||
private static Boolean isRaceStarted;
|
private static Boolean isRaceStarted;
|
||||||
private static GameStages currentStage;
|
private static GameStages currentStage;
|
||||||
private static MarkOrder markOrder;
|
private static MarkOrder markOrder;
|
||||||
@@ -82,6 +83,9 @@ public class GameState implements Runnable {
|
|||||||
private static Set<Mark> marks;
|
private static Set<Mark> marks;
|
||||||
private static List<Limit> courseLimit;
|
private static List<Limit> courseLimit;
|
||||||
|
|
||||||
|
private static List<Token> allTokens;
|
||||||
|
private static List<Token> tokensInPlay;
|
||||||
|
|
||||||
private static List<NewMessageListener> markListeners;
|
private static List<NewMessageListener> markListeners;
|
||||||
|
|
||||||
private static Map<Player, String> playerStringMap = new HashMap<>();
|
private static Map<Player, String> playerStringMap = new HashMap<>();
|
||||||
@@ -89,9 +93,8 @@ public class GameState implements Runnable {
|
|||||||
public GameState(String hostIpAddress) {
|
public GameState(String hostIpAddress) {
|
||||||
windDirection = 180d;
|
windDirection = 180d;
|
||||||
windSpeed = 10000d;
|
windSpeed = 10000d;
|
||||||
this.hostIpAddress = hostIpAddress;
|
|
||||||
yachts = new HashMap<>();
|
yachts = new HashMap<>();
|
||||||
tokens = new ArrayList<>();
|
tokensInPlay = new ArrayList<>();
|
||||||
|
|
||||||
players = new ArrayList<>();
|
players = new ArrayList<>();
|
||||||
GameState.hostIpAddress = hostIpAddress;
|
GameState.hostIpAddress = hostIpAddress;
|
||||||
@@ -103,6 +106,7 @@ public class GameState implements Runnable {
|
|||||||
previousUpdateTime = System.currentTimeMillis();
|
previousUpdateTime = System.currentTimeMillis();
|
||||||
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<>();
|
||||||
|
allTokens = makeTokens();
|
||||||
|
|
||||||
resetStartTime();
|
resetStartTime();
|
||||||
|
|
||||||
@@ -127,6 +131,21 @@ public class GameState implements Runnable {
|
|||||||
courseLimit = XMLParser.parseRace(document).getCourseLimit();
|
courseLimit = XMLParser.parseRace(document).getCourseLimit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a pre defined set of tokensInPlay. //TODO wmu16 - Should read from some file for each
|
||||||
|
* race ideally
|
||||||
|
*
|
||||||
|
* @return A list of possible tokensInPlay for this race
|
||||||
|
*/
|
||||||
|
private ArrayList<Token> makeTokens() {
|
||||||
|
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);
|
||||||
|
return new ArrayList<>(Arrays.asList(token1, token2, token3, token4));
|
||||||
|
}
|
||||||
|
|
||||||
public static String getHostIpAddress() {
|
public static String getHostIpAddress() {
|
||||||
return hostIpAddress;
|
return hostIpAddress;
|
||||||
}
|
}
|
||||||
@@ -139,16 +158,8 @@ public class GameState implements Runnable {
|
|||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addToken(Token token) {
|
public static List<Token> getTokensInPlay() {
|
||||||
tokens.add(token);
|
return tokensInPlay;
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Token> getTokens() {
|
|
||||||
return tokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void clearTokens() {
|
|
||||||
tokens.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addPlayer(Player player) {
|
public static void addPlayer(Player player) {
|
||||||
@@ -277,6 +288,16 @@ public class GameState implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Randomly select a subset of tokensInPlay from a pre defined superset
|
||||||
|
* Broadasts a new race status message to show this update
|
||||||
|
*/
|
||||||
|
public static void spawnNewToken() {
|
||||||
|
Random random = new Random();
|
||||||
|
tokensInPlay.clear();
|
||||||
|
tokensInPlay.add(allTokens.get(random.nextInt(allTokens.size())));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called periodically in this GameState thread to update the GameState values
|
* Called periodically in this GameState thread to update the GameState values
|
||||||
*/
|
*/
|
||||||
@@ -299,8 +320,6 @@ public class GameState implements Runnable {
|
|||||||
checkForLegProgression(yacht);
|
checkForLegProgression(yacht);
|
||||||
raceFinished = false;
|
raceFinished = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raceFinished) {
|
if (raceFinished) {
|
||||||
@@ -340,15 +359,15 @@ public class GameState implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks all tokens to see if a yacht has picked one up
|
* Checks all tokensInPlay to see if a yacht has picked one up
|
||||||
*
|
*
|
||||||
* @param serverYacht The yacht to check for
|
* @param serverYacht The yacht to check for
|
||||||
*/
|
*/
|
||||||
private void checkTokenPickUp(ServerYacht serverYacht) {
|
private void checkTokenPickUp(ServerYacht serverYacht) {
|
||||||
for (Token token : tokens) {
|
for (Token token : tokensInPlay) {
|
||||||
Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
|
Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
|
||||||
if (distance < YACHT_COLLISION_DISTANCE) {
|
if (distance < YACHT_COLLISION_DISTANCE) {
|
||||||
tokens.remove(token);
|
tokensInPlay.remove(token);
|
||||||
serverYacht.powerUp(token.getTokenType());
|
serverYacht.powerUp(token.getTokenType());
|
||||||
logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token
|
logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token
|
||||||
.getTokenType());
|
.getTokenType());
|
||||||
|
|||||||
@@ -185,36 +185,12 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate {
|
|||||||
timer.schedule(new TimerTask() {
|
timer.schedule(new TimerTask() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
spawnNewCoins();
|
GameState.spawnNewToken();
|
||||||
broadcastMessage(MessageFactory.getRaceXML());
|
broadcastMessage(MessageFactory.getRaceXML());
|
||||||
}
|
}
|
||||||
}, 0, 60000);
|
}, 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()); i++) {
|
|
||||||
GameState.addToken(allTokens.get(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A client has tried to connect to the server
|
* A client has tried to connect to the server
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ public class MessageFactory {
|
|||||||
|
|
||||||
public static XMLMessage getRaceXML() {
|
public static XMLMessage getRaceXML() {
|
||||||
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||||
List<Token> tokens = GameState.getTokens();
|
List<Token> tokens = GameState.getTokensInPlay();
|
||||||
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||||
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@ public class MessageFactory {
|
|||||||
|
|
||||||
public static XMLMessage getBoatXML() {
|
public static XMLMessage getBoatXML() {
|
||||||
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
List<ServerYacht> yachts = new ArrayList<>(GameState.getYachts().values());
|
||||||
List<Token> tokens = GameState.getTokens();
|
List<Token> tokens = GameState.getTokensInPlay();
|
||||||
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens);
|
||||||
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
xmlGenerator.setRaceTemplate(raceXMLTemplate);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user