From 65286f273b996f4cc052e004a23b2c2b7f3a733e Mon Sep 17 00:00:00 2001 From: William Muir Date: Wed, 16 Aug 2017 23:22:58 +1200 Subject: [PATCH] Working ordering for in game AND race finish screen. List in RaceState holds a sorted list of yachts. A Listener is added to this list, listening for a permutation change, on perm change, sorts the list by comparitor of leg number of each yacht (stable sort) --- src/main/java/seng302/gameServer/GameState.java | 2 +- src/main/java/seng302/model/RaceState.java | 5 +++-- src/main/java/seng302/visualiser/GameClient.java | 7 ++++++- .../visualiser/controllers/RaceViewController.java | 12 ++++++------ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/seng302/gameServer/GameState.java b/src/main/java/seng302/gameServer/GameState.java index c1562e87..5201862e 100644 --- a/src/main/java/seng302/gameServer/GameState.java +++ b/src/main/java/seng302/gameServer/GameState.java @@ -437,6 +437,7 @@ public class GameState implements Runnable { } if (hasProgressed) { + yacht.incrementLegNumber(); sendMarkRoundingMessage(yacht); logMarkRounding(yacht); yacht.setHasPassedLine(false); @@ -444,7 +445,6 @@ public class GameState implements Runnable { yacht.setHasPassedThroughGate(false); if (!markOrder.isLastMark(currentMarkSeqID)) { yacht.incrementMarkSeqID(); - yacht.incrementLegNumber(); } } } diff --git a/src/main/java/seng302/model/RaceState.java b/src/main/java/seng302/model/RaceState.java index cd62428f..2bb60220 100644 --- a/src/main/java/seng302/model/RaceState.java +++ b/src/main/java/seng302/model/RaceState.java @@ -83,10 +83,11 @@ public class RaceState { } public void sortPlayers() { - playerPositions.sort(Comparator.comparingInt(ClientYacht::getLegNumber)); + playerPositions.sort((yacht1, yacht2) -> Integer.compare(yacht2.getLegNumber(), + yacht1.getLegNumber())); } public ObservableList getPlayerPositions() { - return FXCollections.unmodifiableObservableList(playerPositions); + return playerPositions; } } diff --git a/src/main/java/seng302/visualiser/GameClient.java b/src/main/java/seng302/visualiser/GameClient.java index 2c5c07c9..e056edd7 100644 --- a/src/main/java/seng302/visualiser/GameClient.java +++ b/src/main/java/seng302/visualiser/GameClient.java @@ -198,7 +198,7 @@ public class GameClient { } FinishScreenViewController controller = fxmlLoader.getController(); - controller.setFinishers(allBoatsMap.values()); + controller.setFinishers(raceState.getPlayerPositions()); } private void parsePackets() { @@ -338,6 +338,11 @@ public class GameClient { if (legNumber != clientYacht.getLegNumber()) { clientYacht.setLegNumber(legNumber); raceState.sortPlayers(); +// System.out.println("ORDER:"); +// for (ClientYacht clientYacht1 : raceState.getPlayerPositions()) { +// System.out.println(clientYacht1.getShortName()); +// } +// System.out.println(); } } } diff --git a/src/main/java/seng302/visualiser/controllers/RaceViewController.java b/src/main/java/seng302/visualiser/controllers/RaceViewController.java index 85051ca1..f0bf2688 100644 --- a/src/main/java/seng302/visualiser/controllers/RaceViewController.java +++ b/src/main/java/seng302/visualiser/controllers/RaceViewController.java @@ -394,17 +394,17 @@ public class RaceViewController extends Thread implements ImportantAnnotationDel private void updateOrder(ObservableList yachts) { List vboxEntries = new ArrayList<>(); - for (ClientYacht clientYacht : yachts) { + for (int i = 0; i < yachts.size(); i++) { // System.out.println("yacht == null " + String.valueOf(yacht == null)); - if (clientYacht.getBoatStatus() == 3) { // 3 is finish status - Text textToAdd = new Text(clientYacht.getPositionInteger() + ". " + - clientYacht.getShortName() + " (Finished)"); + if (yachts.get(i).getBoatStatus() == 3) { // 3 is finish status + Text textToAdd = new Text(i + 1 + ". " + + yachts.get(i).getShortName() + " (Finished)"); textToAdd.setFill(Paint.valueOf("#d3d3d3")); vboxEntries.add(textToAdd); } else { - Text textToAdd = new Text(clientYacht.getPositionInteger() + ". " + - clientYacht.getShortName() + " "); + Text textToAdd = new Text(i + 1 + ". " + + yachts.get(i).getShortName() + " "); textToAdd.setFill(Paint.valueOf("#d3d3d3")); textToAdd.setStyle(""); vboxEntries.add(textToAdd);