From 8ba28ffda01c4e83c33842d5f71997153e9d8af8 Mon Sep 17 00:00:00 2001 From: William Muir Date: Sat, 9 Sep 2017 13:11:44 +1200 Subject: [PATCH] Minor refactor moving Spawning and token creation to game state #story[1250] --- .../java/seng302/gameServer/GameState.java | 55 +++++++++++++------ .../seng302/gameServer/MainServerThread.java | 26 +-------- .../seng302/gameServer/MessageFactory.java | 4 +- 3 files changed, 40 insertions(+), 45 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index 23b02917..d5c8fb07 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -1,10 +1,12 @@ package seng302.gameServer; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import javafx.scene.paint.Color; import javax.xml.parsers.DocumentBuilder; @@ -74,7 +76,6 @@ public class GameState implements Runnable { private static String hostIpAddress; private static List players; private static Map yachts; - private static List tokens; private static Boolean isRaceStarted; private static GameStages currentStage; private static MarkOrder markOrder; @@ -82,6 +83,9 @@ public class GameState implements Runnable { private static Set marks; private static List courseLimit; + private static List allTokens; + private static List tokensInPlay; + private static List markListeners; private static Map playerStringMap = new HashMap<>(); @@ -89,9 +93,8 @@ public class GameState implements Runnable { public GameState(String hostIpAddress) { windDirection = 180d; windSpeed = 10000d; - this.hostIpAddress = hostIpAddress; yachts = new HashMap<>(); - tokens = new ArrayList<>(); + tokensInPlay = new ArrayList<>(); players = new ArrayList<>(); GameState.hostIpAddress = hostIpAddress; @@ -103,6 +106,7 @@ public class GameState implements Runnable { previousUpdateTime = System.currentTimeMillis(); markOrder = new MarkOrder(); //This could be instantiated at some point with a select map? markListeners = new ArrayList<>(); + allTokens = makeTokens(); resetStartTime(); @@ -127,6 +131,21 @@ public class GameState implements Runnable { 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 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() { return hostIpAddress; } @@ -139,16 +158,8 @@ public class GameState implements Runnable { return players; } - public static void addToken(Token token) { - tokens.add(token); - } - - public static List getTokens() { - return tokens; - } - - public static void clearTokens() { - tokens.clear(); + public static List getTokensInPlay() { + return tokensInPlay; } 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 */ @@ -299,8 +320,6 @@ public class GameState implements Runnable { checkForLegProgression(yacht); raceFinished = false; } - - } 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 */ private void checkTokenPickUp(ServerYacht serverYacht) { - for (Token token : tokens) { + for (Token token : tokensInPlay) { Double distance = GeoUtility.getDistance(token, serverYacht.getLocation()); if (distance < YACHT_COLLISION_DISTANCE) { - tokens.remove(token); + tokensInPlay.remove(token); serverYacht.powerUp(token.getTokenType()); logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token .getTokenType()); diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 20c454a2..e2f330d7 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -185,36 +185,12 @@ public class MainServerThread implements Runnable, ClientConnectionDelegate { timer.schedule(new TimerTask() { @Override public void run() { - spawnNewCoins(); + GameState.spawnNewToken(); broadcastMessage(MessageFactory.getRaceXML()); } }, 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 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 * diff --git a/src/main/java/seng302/gameServer/MessageFactory.java b/src/main/java/seng302/gameServer/MessageFactory.java index c71e6028..62b5ea0a 100644 --- a/src/main/java/seng302/gameServer/MessageFactory.java +++ b/src/main/java/seng302/gameServer/MessageFactory.java @@ -96,7 +96,7 @@ public class MessageFactory { public static XMLMessage getRaceXML() { List yachts = new ArrayList<>(GameState.getYachts().values()); - List tokens = GameState.getTokens(); + List tokens = GameState.getTokensInPlay(); RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens); xmlGenerator.setRaceTemplate(raceXMLTemplate); @@ -124,7 +124,7 @@ public class MessageFactory { public static XMLMessage getBoatXML() { List yachts = new ArrayList<>(GameState.getYachts().values()); - List tokens = GameState.getTokens(); + List tokens = GameState.getTokensInPlay(); RaceXMLTemplate raceXMLTemplate = new RaceXMLTemplate(yachts, tokens); xmlGenerator.setRaceTemplate(raceXMLTemplate);