diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index f96e950a..57cd81a4 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -5,9 +5,7 @@ import java.text.SimpleDateFormat; import java.time.ZoneId; import java.time.ZoneOffset; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; -import java.util.List; import java.util.Map; import java.util.TimeZone; import java.util.Timer; @@ -17,7 +15,6 @@ import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; -import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.util.Pair; import seng302.gameServer.GameStages; @@ -55,7 +52,6 @@ import seng302.visualiser.controllers.dialogs.PopupDialogController; */ public class GameClient { - private Pane holderPane; private ClientToServerThread socketThread; private MainServerThread server; @@ -77,10 +73,8 @@ public class GameClient { /** * Create an instance of the game client. Does not do anything until run with runAsClient() * runAsHost(). - * @param holder The JavaFX Pane that the visual elements for the race will be inserted into. */ - public GameClient(Pane holder) { - this.holderPane = holder; + public GameClient() { this.gameKeyBind = GameKeyBind.getInstance(); } @@ -118,10 +112,7 @@ public class GameClient { ViewManager.getInstance().setProperty("serverName", regattaData.getRegattaName()); ViewManager.getInstance().setProperty("mapName", regattaData.getCourseName()); - getServerThread().setConnectionErrorListener((eMessage) -> { - ViewManager.getInstance().showErrorSnackBar(eMessage); - //destroyClientToServerThread(); - }); + getServerThread().setConnectionErrorListener((eMessage) -> ViewManager.getInstance().showErrorSnackBar(eMessage)); this.lobbyController = ViewManager.getInstance().goToLobby(true); @@ -132,18 +123,11 @@ public class GameClient { return true; } - private void destroyClientToServerThread() { - socketThread.closeSocket(); - socketThread = null; - } - /** * Connect to a game as the host at the given address and starts the visualiser. - * @param ipAddress IP to connect to. - * @param portNumber Port to connect to. */ public ServerDescription runAsHost( - String ipAddress, Integer portNumber, String serverName, Integer maxPlayers, String race, + String serverName, Integer maxPlayers, String race, Integer numLegs, Boolean tokensEnabled ) { XMLGenerator.setDefaultRaceName(serverName); @@ -159,7 +143,7 @@ public class GameClient { } try { - startClientToServerThread(ipAddress, 4942); + startClientToServerThread("localhost", 4942); } catch (IOException e) { showConnectionError("Cannot connect to server as host"); } @@ -194,7 +178,8 @@ public class GameClient { this.lobbyController = ViewManager.getInstance().goToLobby(false); ViewManager.getInstance().setPlayerList(clientLobbyList); - return new ServerDescription(serverName, regattaData.getCourseName(), GameState.getNumberOfPlayers(), GameState.getCapacity(), ipAddress, 4942); + return new ServerDescription(serverName, regattaData.getCourseName(), GameState.getNumberOfPlayers(), GameState.getCapacity(), + "localhost", 4942); } private void tearDownConnection() { @@ -297,10 +282,12 @@ public class GameClient { case CHATTER_TEXT: Pair playerIdMessagePair = StreamParser .extractChatterText(packet); - raceView.updateChatHistory( - allBoatsMap.get(playerIdMessagePair.getKey()).getColour(), - playerIdMessagePair.getValue() - ); + if (playerIdMessagePair != null) { + raceView.updateChatHistory( + allBoatsMap.get(playerIdMessagePair.getKey()).getColour(), + playerIdMessagePair.getValue() + ); + } } } } @@ -337,8 +324,6 @@ public class GameClient { positionData.getLon(), positionData.getHeading(), positionData.getGroundSpeed()); } - } else if (positionData.getType() == DeviceType.MARK_TYPE) { - //CompoundMark mark = courseData.getCompoundMarks().get(positionData.getDeviceId()); } } @@ -376,21 +361,17 @@ public class GameClient { ClientYacht clientYacht = allBoatsMap.get((int) boatData[0]); clientYacht.setEstimateTimeTillNextMark(raceState.getRaceTime() - boatData[1]); clientYacht.setEstimateTimeAtFinish(boatData[2]); -// int legNumber = (int) boatData[3]; clientYacht.setBoatStatus((int) boatData[4]); -// if (legNumber != clientYacht.getLegNumber()) { -// clientYacht.setLegNumber(legNumber); -// } } - if (raceFinished) { - raceViewController.showFinishDialog(finishedBoats); + if (raceFinished && !raceState.getRaceFinished()) { + raceState.setRaceFinished(); Sounds.playFinishSound(); - close(); - ViewManager.getInstance().getGameClient().stopGame(); + raceViewController.showFinishDialog(finishedBoats); +// close(); +// ViewManager.getInstance().getGameClient().stopGame(); //loadFinishScreenView(); } - raceState.setRaceFinished(); } } @@ -401,10 +382,6 @@ public class GameClient { } } - private void close() { - socketThread.setSocketToClose(); - } - /** * Handle the key-pressed event from the text field. * @param e The key event triggering this call @@ -531,10 +508,6 @@ public class GameClient { return socketThread; } - public List getPlayerNames(){ - return Collections.unmodifiableList(clientLobbyList.sorted()); - } - public void stopGame() { GameState.setCurrentStage(GameStages.CANCELLED); if (server != null) server.terminate(); diff --git a/src/main/java/seng302/visualiser/GameView3D.java b/src/main/java/seng302/visualiser/GameView3D.java index 177c481e..29c12074 100644 --- a/src/main/java/seng302/visualiser/GameView3D.java +++ b/src/main/java/seng302/visualiser/GameView3D.java @@ -350,18 +350,19 @@ public class GameView3D extends GameView { for (ObservableValue o : Arrays .asList(playerBoat.layoutXProperty(), playerBoat.layoutXProperty())) { o.addListener((obs, oldVal, newVal) -> { + if (playerYacht.getLegNumber() < course.size()) { + List marks = course.get(playerYacht.getLegNumber()).getMarks(); + Point2D midPoint = new Point2D(0, 0); + if (marks.size() == 1) { + midPoint = scaledPoint.findScaledXY(marks.get(0)); + } else if (marks.size() == 2) { + midPoint = (scaledPoint.findScaledXY(marks.get(0))) + .midpoint(scaledPoint.findScaledXY(marks.get(1))); + } - List marks = course.get(playerYacht.getLegNumber()).getMarks(); - Point2D midPoint = new Point2D(0, 0); - if (marks.size() == 1) { - midPoint = scaledPoint.findScaledXY(marks.get(0)); - } else if (marks.size() == 2) { - midPoint = (scaledPoint.findScaledXY(marks.get(0))) - .midpoint(scaledPoint.findScaledXY(marks.get(1))); - } - - if (midPoint != null) { - playerBoat.updateMarkIndicator(midPoint); + if (midPoint != null) { + playerBoat.updateMarkIndicator(midPoint); + } } }); diff --git a/src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java b/src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java deleted file mode 100644 index 86e39ead..00000000 --- a/src/main/java/seng302/visualiser/controllers/FinishScreenViewController.java +++ /dev/null @@ -1,97 +0,0 @@ -package seng302.visualiser.controllers; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.ResourceBundle; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.fxml.Initializable; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; -import javafx.scene.control.cell.PropertyValueFactory; -import javafx.scene.input.MouseEvent; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.Pane; -import seng302.model.ClientYacht; -import seng302.utilities.Sounds; - -public class FinishScreenViewController implements Initializable { - - @FXML - private GridPane finishScreenGridPane; - @FXML - private TableView finishOrderTable; - @FXML - private TableColumn posCol; - @FXML - private TableColumn boatNameCol; - @FXML - private TableColumn shortNameCol; - @FXML - private TableColumn countryCol; - - ObservableList data = FXCollections.observableArrayList(); - - @Override - public void initialize(URL location, ResourceBundle resources) { - finishScreenGridPane.getStylesheets() - .add(getClass().getResource("/css/Master.css").toString()); - finishOrderTable.getStylesheets().add(getClass().getResource("/css/Master.css").toString()); - - // set up data for table - finishOrderTable.setItems(data); - - // setting table col data - posCol.setCellValueFactory( - new PropertyValueFactory<>("position") - ); - boatNameCol.setCellValueFactory( - new PropertyValueFactory<>("boatName") - ); - shortNameCol.setCellValueFactory( - new PropertyValueFactory<>("shortName") - ); - countryCol.setCellValueFactory( - new PropertyValueFactory<>("country") - ); - finishOrderTable.refresh(); - } - - public void setFinishers(Collection participants) { - List sorted = new ArrayList<>(participants); - sorted.sort(Comparator.comparingInt(ClientYacht::getPlacing)); - finishOrderTable.getItems().setAll(sorted); - } - - private void setContentPane(String jfxUrl) { - try { - // get the main controller anchor pane (FinishView -> MainView) - AnchorPane contentPane = (AnchorPane) finishScreenGridPane.getParent(); - contentPane.getChildren().removeAll(); - contentPane.getChildren().clear(); - contentPane.getStylesheets().add(getClass().getResource("/css/master.css").toString()); - contentPane.getChildren() - .addAll((Pane) FXMLLoader.load(getClass().getResource(jfxUrl))); - } catch (javafx.fxml.LoadException e) { - System.out.println("[Controller] FXML load exception"); - } catch (IOException e) { - System.out.println("[Controller] IO exception"); - } - } - - public void switchToStartScreenView() { - Sounds.playButtonClick(); - setContentPane("/views/StartScreenView.fxml"); - } - - public void playButtonHoverSound(MouseEvent mouseEvent) { - Sounds.playHoverSound(); - } -} diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 745207d4..38354023 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -73,7 +73,7 @@ public class RaceViewController extends Thread { private GameView3D gameView; private RaceState raceState; private ChatHistory chatHistory; - private Timer timer = new Timer(); + private Timer timer = new Timer(); private ClientYacht player; private JFXDialog finishScreenDialog; private FinishDialogController finishDialogController; @@ -146,12 +146,7 @@ public class RaceViewController extends Thread { contentStackPane.setVisible(true); miniMapPane.setVisible(true); miniMapButton.setVisible(true); - Platform.runLater(new Runnable() { - @Override - public void run() { - contentStackPane.requestFocus(); - } - }); + Platform.runLater(() -> contentStackPane.requestFocus()); } /** @@ -288,7 +283,7 @@ public class RaceViewController extends Thread { } } - public void removeIcon(ClientYacht yacht) { + private void removeIcon(ClientYacht yacht) { if (yacht == player) { blinkingTimer.cancel(); iconToDisplay.setVisible(false); diff --git a/src/main/java/seng302/visualiser/controllers/ViewManager.java b/src/main/java/seng302/visualiser/controllers/ViewManager.java index 5152768c..b12a6c52 100644 --- a/src/main/java/seng302/visualiser/controllers/ViewManager.java +++ b/src/main/java/seng302/visualiser/controllers/ViewManager.java @@ -79,7 +79,7 @@ public class ViewManager { decorator.applyCss(); decorator.getStylesheets() .add(getClass().getResource("/css/Master.css").toExternalForm()); - gameClient = new GameClient(decorator); + gameClient = new GameClient(); setDecorator(decorator); stage.getIcons().add(new Image(getClass().getResourceAsStream("/PP.png"))); diff --git a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java index fcd33e0d..3cf9fc5e 100644 --- a/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java +++ b/src/main/java/seng302/visualiser/controllers/dialogs/ServerCreationController.java @@ -115,7 +115,7 @@ public class ServerCreationController implements Initializable { */ private void createServer() { ServerDescription serverDescription = ViewManager.getInstance().getGameClient() - .runAsHost("localhost", 4941, serverName.getText(), (int) maxPlayersSlider + .runAsHost(serverName.getText(), (int) maxPlayersSlider .getValue(), mapMaker.getCurrentRacePath(), (int) legsSlider.getValue(), pickupsCheckBox.isSelected()); if (serverDescription == null){ diff --git a/src/main/resources/maps/loop.xml b/src/main/resources/maps/loop.xml index aa72204a..008a58ce 100644 --- a/src/main/resources/maps/loop.xml +++ b/src/main/resources/maps/loop.xml @@ -15,7 +15,6 @@ - @@ -29,21 +28,27 @@ + + + + - + + + - + diff --git a/src/main/resources/views/FinishScreenView.fxml b/src/main/resources/views/FinishScreenView.fxml deleted file mode 100644 index 0ebdf261..00000000 --- a/src/main/resources/views/FinishScreenView.fxml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -