From 54a9140f31cb495aa01a4211333482f728e02d28 Mon Sep 17 00:00:00 2001 From: Fan-Wu Yang Date: Mon, 11 Sep 2017 20:29:15 +1200 Subject: [PATCH] lobby listener is added and removed so that the program doesn't drasticaly slow down when the lobby is connected to multiple times #story[1188] --- .../Controllers/InGameLobbyController.java | 107 ++++++++++-------- 1 file changed, 61 insertions(+), 46 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java index 7cc40eeb..5e9c8792 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/InGameLobbyController.java @@ -83,6 +83,8 @@ public class InGameLobbyController extends Controller { private StlMeshImporter importer; + private PopulatePlayers lobbyUpdateListener; + @Override public void initialize(URL location, ResourceBundle resources) { allPlayerLabels = new ArrayList(Arrays.asList(playerLabel, playerLabel2, @@ -94,6 +96,8 @@ public class InGameLobbyController extends Controller { URL asset = HostController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl"); importer = new StlMeshImporter(); importer.read(asset); + lobbyUpdateListener = new PopulatePlayers(); + } private void resetLobby(){ @@ -110,56 +114,69 @@ public class InGameLobbyController extends Controller { } } - private void populatePlayers(ListChangeListener.Change change){ + public class PopulatePlayers implements ListChangeListener { + + @Override + public void onChanged(Change change) { - Platform.runLater( - () -> { - while (change.next()){ - if (change.wasAdded() || change.wasRemoved() || change.wasUpdated() || change.wasPermutated()){ - try{ - resetLobby(); - int count = 0; - int row = 0; - for (VisualiserBoat boat :this.visualiserRaceEvent.getVisualiserRaceState().getBoats()) { - View3D playerBoatToSet = new View3D(); - playerBoatToSet.setItems(subjects); - - playerContainer.add(playerBoatToSet, (count % 3) , row); - playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10)); - - MeshView mesh = new MeshView(importer.getImport()); - Subject3D subject = new Subject3D(mesh); - subjects.add(subject); - - playerBoatToSet.setDistance(50); - playerBoatToSet.setYaw(45); - playerBoatToSet.setPitch(20); - - - - AnimationTimer rotate = new AnimationTimer() { - @Override - public void handle(long now) { - subject.setHeading(subject.getHeading().getAngle() + 0.1); + Platform.runLater( + () -> { + if (visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum() != RaceStatusEnum.PRESTART){ + return; + } + while (change.next()){ + if (change.wasAdded() || change.wasRemoved() || change.wasUpdated() || change.wasPermutated()){ + if (visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum() != RaceStatusEnum.PRESTART){ + return; + } + try{ + resetLobby(); + int count = 0; + int row = 0; + for (VisualiserBoat boat :visualiserRaceEvent.getVisualiserRaceState().getBoats()) { + View3D playerBoatToSet = new View3D(); + playerBoatToSet.setItems(subjects); + + playerContainer.add(playerBoatToSet, (count % 3) , row); + playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10)); + + MeshView mesh = new MeshView(importer.getImport()); + Subject3D subject = new Subject3D(mesh); + subjects.add(subject); + + playerBoatToSet.setDistance(50); + playerBoatToSet.setYaw(45); + playerBoatToSet.setPitch(20); + + + + AnimationTimer rotate = new AnimationTimer() { + @Override + public void handle(long now) { + subject.setHeading(subject.getHeading().getAngle() + 0.1); + } + }; + rotate.start(); + + allPlayerLabels.get(count).setText("Player: " + boat.getSourceID()); + allPlayerLabels.get(count).toFront(); + count += 1; + if (count > 2){ + row = 1; } - }; - rotate.start(); - - allPlayerLabels.get(count).setText("Player: " + boat.getSourceID()); - allPlayerLabels.get(count).toFront(); - count += 1; - if (count > 2){ - row = 1; } } - } - catch(ConcurrentModificationException e){ + catch(ConcurrentModificationException e){ + } } } } - } - ); + ); + } } + /* + private void populatePlayers(ListChangeListener.Change change){ + }*/ /** * Starts the race. @@ -220,7 +237,7 @@ public class InGameLobbyController extends Controller { //Hide this, and display the race controller. gameLobbyWrapper.setVisible(false); - + visualiserRaceEvent.getVisualiserRaceState().getBoats().removeListener(lobbyUpdateListener); parent.beginRace(visualiserRaceEvent, controllerClient, isHost); } @@ -239,9 +256,7 @@ public class InGameLobbyController extends Controller { this.controllerClient = visualiserRaceEvent.getControllerClient(); - this.visualiserRaceEvent.getVisualiserRaceState().getBoats().addListener((ListChangeListener) c ->{ - populatePlayers(c); - }); + this.visualiserRaceEvent.getVisualiserRaceState().getBoats().addListener(this.lobbyUpdateListener); gameLobbyWrapper.setVisible(true);