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]

main
Fan-Wu Yang 8 years ago
parent df04cdf87c
commit 54a9140f31

@ -83,6 +83,8 @@ public class InGameLobbyController extends Controller {
private StlMeshImporter importer; private StlMeshImporter importer;
private PopulatePlayers lobbyUpdateListener;
@Override @Override
public void initialize(URL location, ResourceBundle resources) { public void initialize(URL location, ResourceBundle resources) {
allPlayerLabels = new ArrayList(Arrays.asList(playerLabel, playerLabel2, 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"); URL asset = HostController.class.getClassLoader().getResource("assets/V1.2 Complete Boat.stl");
importer = new StlMeshImporter(); importer = new StlMeshImporter();
importer.read(asset); importer.read(asset);
lobbyUpdateListener = new PopulatePlayers();
} }
private void resetLobby(){ 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( Platform.runLater(
() -> { () -> {
while (change.next()){ if (visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum() != RaceStatusEnum.PRESTART){
if (change.wasAdded() || change.wasRemoved() || change.wasUpdated() || change.wasPermutated()){ return;
try{ }
resetLobby(); while (change.next()){
int count = 0; if (change.wasAdded() || change.wasRemoved() || change.wasUpdated() || change.wasPermutated()){
int row = 0; if (visualiserRaceEvent.getVisualiserRaceState().getRaceStatusEnum() != RaceStatusEnum.PRESTART){
for (VisualiserBoat boat :this.visualiserRaceEvent.getVisualiserRaceState().getBoats()) { return;
View3D playerBoatToSet = new View3D(); }
playerBoatToSet.setItems(subjects); try{
resetLobby();
playerContainer.add(playerBoatToSet, (count % 3) , row); int count = 0;
playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10)); int row = 0;
for (VisualiserBoat boat :visualiserRaceEvent.getVisualiserRaceState().getBoats()) {
MeshView mesh = new MeshView(importer.getImport()); View3D playerBoatToSet = new View3D();
Subject3D subject = new Subject3D(mesh); playerBoatToSet.setItems(subjects);
subjects.add(subject);
playerContainer.add(playerBoatToSet, (count % 3) , row);
playerBoatToSet.setDistance(50); playerContainer.setMargin(playerBoatToSet, new Insets(10, 10, 10, 10));
playerBoatToSet.setYaw(45);
playerBoatToSet.setPitch(20); MeshView mesh = new MeshView(importer.getImport());
Subject3D subject = new Subject3D(mesh);
subjects.add(subject);
AnimationTimer rotate = new AnimationTimer() { playerBoatToSet.setDistance(50);
@Override playerBoatToSet.setYaw(45);
public void handle(long now) { playerBoatToSet.setPitch(20);
subject.setHeading(subject.getHeading().getAngle() + 0.1);
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. * Starts the race.
@ -220,7 +237,7 @@ public class InGameLobbyController extends Controller {
//Hide this, and display the race controller. //Hide this, and display the race controller.
gameLobbyWrapper.setVisible(false); gameLobbyWrapper.setVisible(false);
visualiserRaceEvent.getVisualiserRaceState().getBoats().removeListener(lobbyUpdateListener);
parent.beginRace(visualiserRaceEvent, controllerClient, isHost); parent.beginRace(visualiserRaceEvent, controllerClient, isHost);
} }
@ -239,9 +256,7 @@ public class InGameLobbyController extends Controller {
this.controllerClient = visualiserRaceEvent.getControllerClient(); this.controllerClient = visualiserRaceEvent.getControllerClient();
this.visualiserRaceEvent.getVisualiserRaceState().getBoats().addListener((ListChangeListener<? super VisualiserBoat>) c ->{ this.visualiserRaceEvent.getVisualiserRaceState().getBoats().addListener(this.lobbyUpdateListener);
populatePlayers(c);
});
gameLobbyWrapper.setVisible(true); gameLobbyWrapper.setVisible(true);

Loading…
Cancel
Save