From 8af80e6c3a934df041eb8c1a1c89fcaa4e5ec731 Mon Sep 17 00:00:00 2001 From: Zhi You Tan Date: Thu, 3 Aug 2017 18:39:15 +1200 Subject: [PATCH] WIP: Connected game client to main server thread to pass compound mark variable. Boats are initialised in main server thread behind start line before game starts. #story[1117] --- .../seng302/gameServer/MainServerThread.java | 48 +++++ .../gameServer/ServerToClientThread.java | 8 +- .../java/seng302/visualiser/GameClient.java | 8 +- src/main/resources/server_config/boats1.xml | 171 ------------------ src/main/resources/server_config/boats2.xml | 161 ----------------- src/main/resources/server_config/boats3.xml | 171 ------------------ src/main/resources/views/StartScreenView.fxml | 8 +- 7 files changed, 69 insertions(+), 506 deletions(-) delete mode 100644 src/main/resources/server_config/boats1.xml delete mode 100644 src/main/resources/server_config/boats2.xml delete mode 100644 src/main/resources/server_config/boats3.xml diff --git a/src/main/java/seng302/gameServer/MainServerThread.java b/src/main/java/seng302/gameServer/MainServerThread.java index 6e827d95..23041a75 100644 --- a/src/main/java/seng302/gameServer/MainServerThread.java +++ b/src/main/java/seng302/gameServer/MainServerThread.java @@ -7,7 +7,14 @@ import java.util.ArrayList; import java.util.Observable; import java.util.Timer; import java.util.TimerTask; +import seng302.model.GeoPoint; import seng302.model.Player; +import seng302.model.Yacht; +import seng302.model.mark.CompoundMark; +import seng302.model.mark.Mark; +import seng302.model.stream.xml.parser.RaceXMLData; +import seng302.utilities.GeoUtility; +import seng302.visualiser.GameClient; /** * A class describing the overall server, which creates and collects server threads for each client @@ -25,6 +32,8 @@ public class MainServerThread extends Observable implements Runnable, ClientConn private ServerSocket serverSocket = null; private ArrayList serverToClientThreads = new ArrayList<>(); + private GameClient gameClient; + public MainServerThread() { try { serverSocket = new ServerSocket(PORT); @@ -130,6 +139,8 @@ public class MainServerThread extends Observable implements Runnable, ClientConn } public void startGame() { + initialiseBoatPosition(); + Timer t = new Timer(); t.schedule(new TimerTask() { @@ -146,4 +157,41 @@ public class MainServerThread extends Observable implements Runnable, ClientConn public void terminate() { terminated = true; } + + /** + * Pass GameClient to main server thread so it can access the properties inside. + * + * @param gameClient gameClient + */ + public void setGameClient(GameClient gameClient) { + this.gameClient = gameClient; + } + + /** + * Initialise boats to specific spaced out geopoint behind starting line. + */ + private void initialiseBoatPosition() { + System.out.println("ran"); + RaceXMLData raceXMLData = gameClient.getCourseData(); + CompoundMark cm = raceXMLData.getCompoundMarks().get(1); + GeoPoint geoPoint1 = new GeoPoint(cm.getMarks().get(0).getLat(), cm.getMarks().get(0).getLng()); + GeoPoint geoPoint2 = new GeoPoint(cm.getMarks().get(1).getLat(), cm.getMarks().get(1).getLng()); + Double perpendicularAngle = GeoUtility.getBearing(geoPoint1, geoPoint2); + + Double x = geoPoint1.getLat() + Math.sin(perpendicularAngle) * 1000; + Double y = geoPoint1.getLng() + Math.cos(perpendicularAngle) * 1000; + + ServerToClientThread stct0 = serverToClientThreads.get(0); + Yacht yacht0 = GameState.getYachts().get(stct0.getYacht().getSourceId()); + ServerToClientThread stct1 = serverToClientThreads.get(1); + Yacht yacht1 = GameState.getYachts().get(stct1.getYacht().getSourceId()); + yacht1.updateLocation(x,y, yacht1.getHeading(), yacht1.getVelocity()); + + System.out.println(yacht0.getLat() + " " + yacht0.getLon()); + System.out.println(yacht1.getLat() + " " + yacht1.getLon()); + + for (Yacht yacht : GameState.getYachts().values()) { + System.out.println("GS: " + yacht.getLat() + " " + yacht.getLon()); + } + } } diff --git a/src/main/java/seng302/gameServer/ServerToClientThread.java b/src/main/java/seng302/gameServer/ServerToClientThread.java index ff2c4f23..c41f7ed0 100644 --- a/src/main/java/seng302/gameServer/ServerToClientThread.java +++ b/src/main/java/seng302/gameServer/ServerToClientThread.java @@ -64,6 +64,8 @@ public class ServerToClientThread implements Runnable, Observer { private XMLGenerator xml; + private Yacht yacht; + public ServerToClientThread(Socket socket) { this.socket = socket; BufferedReader fn; @@ -98,7 +100,7 @@ public class ServerToClientThread implements Runnable, Observer { sourceId = GameState.getUniquePlayerID(); if (threeWayHandshake(sourceId)) { serverLog("Successful handshake. Client allocated id: " + sourceId, 0); - Yacht yacht = new Yacht( + yacht = new Yacht( "Yacht", sourceId, sourceId.toString(), fName, fName + " " + lName, "NZ" ); // Yacht yacht = new Yacht("Kappa", "Kap", new GeoPoint(57.6708220, 11.8321340), 90.0); @@ -366,4 +368,8 @@ public class ServerToClientThread implements Runnable, Observer { public Socket getSocket() { return socket; } + + public Yacht getYacht() { + return yacht; + } } diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 915eef37..6278e06f 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -89,6 +89,8 @@ public class GameClient { loadStartScreen(); } }); + + server.setGameClient(this); } private void loadStartScreen() { @@ -174,7 +176,7 @@ public class GameClient { break; case BOAT_XML: - System.out.println("GOT SUM BOATS YAY :)"); +// System.out.println("GOT SUM BOATS YAY :)"); allBoatsMap = XMLParser.parseBoats( StreamParser.extractXmlMessage(packet) ); @@ -322,4 +324,8 @@ public class GameClient { break; } } + + public RaceXMLData getCourseData() { + return courseData; + } } diff --git a/src/main/resources/server_config/boats1.xml b/src/main/resources/server_config/boats1.xml deleted file mode 100644 index 401e7bf6..00000000 --- a/src/main/resources/server_config/boats1.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - 2015-08-28T17:32:59+0100 - 12 - 219 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/server_config/boats2.xml b/src/main/resources/server_config/boats2.xml deleted file mode 100644 index c7255771..00000000 --- a/src/main/resources/server_config/boats2.xml +++ /dev/null @@ -1,161 +0,0 @@ - - - 2015-08-28T17:32:59+0100 - 12 - 219 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/server_config/boats3.xml b/src/main/resources/server_config/boats3.xml deleted file mode 100644 index 401e7bf6..00000000 --- a/src/main/resources/server_config/boats3.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - 2015-08-28T17:32:59+0100 - 12 - 219 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/views/StartScreenView.fxml b/src/main/resources/views/StartScreenView.fxml index ec629307..4bd0a808 100644 --- a/src/main/resources/views/StartScreenView.fxml +++ b/src/main/resources/views/StartScreenView.fxml @@ -1,5 +1,10 @@ + + + + + @@ -10,6 +15,7 @@ + @@ -25,7 +31,7 @@ - +