Merged with develop. Fixed many bugs in Visualiser.

#bugs
This commit is contained in:
Calum
2017-07-26 02:49:31 +12:00
parent acd54dec7a
commit 08e369f1ae
41 changed files with 1693 additions and 1636 deletions
@@ -1,14 +1,9 @@
package seng302.visualiser.controllers;
import java.io.IOException;
import java.io.InputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.URL;
import java.util.*;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
@@ -24,17 +19,28 @@ import javafx.scene.layout.Pane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.text.Text;
import seng302.client.ClientState;
import seng302.client.ClientStateQueryingRunnable;
import seng302.gameServer.GameStages;
import seng302.gameServer.GameState;
import seng302.gameServer.MainServerThread;
/**
* A class describing the actions of the lobby screen
* Created by wmu16 on 10/07/17.
*/
public class LobbyController implements Initializable, Observer{
public class LobbyController implements Initializable {
public enum CloseStatus {
LEAVE,
READY
}
@FunctionalInterface
public interface LobbyCloseListener {
void notify(CloseStatus exitCause);
}
@FXML
private ListView<String> competitorsListView;
@FXML
private GridPane lobbyScreen;
@FXML
@@ -42,7 +48,7 @@ public class LobbyController implements Initializable, Observer{
@FXML
private Button readyButton;
@FXML
private ListView firstListView;
private ListView<String> firstListView;
@FXML
private ListView secondListView;
@FXML
@@ -83,10 +89,11 @@ public class LobbyController implements Initializable, Observer{
private static ObservableList<String> sixthCompetitor = FXCollections.observableArrayList();
private static ObservableList<String> seventhCompetitor = FXCollections.observableArrayList();
private static ObservableList<String> eighthCompetitor = FXCollections.observableArrayList();
private ClientStateQueryingRunnable clientStateQueryingRunnable;
// private ClientStateQueryingRunnable clientStateQueryingRunnable;
private Boolean switchedPane = false;
private MainServerThread mainServerThread;
private List<LobbyCloseListener> lobbyListeners = new ArrayList<>();
private void setContentPane(String jfxUrl) {
try {
@@ -105,51 +112,54 @@ public class LobbyController implements Initializable, Observer{
@Override
public void initialize(URL location, ResourceBundle resources) {
if (ClientState.isHost()) {
lobbyIpText.setText("Lobby Host IP: " + ClientState.getHostIp());
readyButton.setDisable(false);
}
else {
lobbyIpText.setText("Connected to IP: ");
readyButton.setDisable(true);
}
initialiseListView();
// if (ClientState.isHost()) {
// lobbyIpText.setText("Lobby Host IP: " + ClientState.getHostIp());
// readyButton.setDisable(false);
// }
// else {
// lobbyIpText.setText("Connected to IP: ");
// readyButton.setDisable(true);
// readyButton.setVisible(false);
// }
// initialiseListView();
// initialiseLobbyControllerThread();
initialiseImageView(); // parrot gif init
// initialiseImageView(); // parrot gif init
// set up client state query thread, so that when it receives the race-started packet
// it can switch to the race view
ClientStateQueryingRunnable clientStateQueryingRunnable = new ClientStateQueryingRunnable();
clientStateQueryingRunnable.addObserver(this);
Thread clientStateQueryingThread = new Thread(clientStateQueryingRunnable, "Client State querying thread");
clientStateQueryingThread.setDaemon(true);
clientStateQueryingThread.start();
// ClientStateQueryingRunnable clientStateQueryingRunnable = new ClientStateQueryingRunnable();
// clientStateQueryingRunnable.addObserver(this);
// Thread clientStateQueryingThread = new Thread(clientStateQueryingRunnable, "Client State querying thread");
// clientStateQueryingThread.setDaemon(true);
// clientStateQueryingThread.start();
}
@Override
public void update(Observable o, Object arg) {
Platform.runLater(new Runnable() {
@Override
public void run() {
if (arg.equals("game started") && !switchedPane) {
switchToRaceView();
}
if (arg.equals(("update players"))) {
initialiseListView();
}
}
});
}
// @Override
// public void update(Observable o, Object arg) {
// Platform.runLater(new Runnable() {
// @Override
// public void run() {
// if (arg.equals("game started") && !switchedPane) {
// switchToRaceView();
// }
// if (arg.equals(("update players"))) {
// initialiseListView();
// }
// }
// });
// }
private void initialiseListView() {
firstListView.getItems().clear();
secondListView.getItems().clear();
thirdListView.getItems().clear();
fourthListView.getItems().clear();
fifthListView.getItems().clear();
sixthListView.getItems().clear();
seventhListView.getItems().clear();
eighthListView.getItems().clear();
// firstListView.getItems().clear();
// secondListView.getItems().clear();
// thirdListView.getItems().clear();
// fourthListView.getItems().clear();
// fifthListView.getItems().clear();
// sixthListView.getItems().clear();
// seventhListView.getItems().clear();
// eighthListView.getItems().clear();
competitors = new ArrayList<>();
Collections.addAll(competitors, firstCompetitor, secondCompetitor, thirdCompetitor,
@@ -159,19 +169,19 @@ public class LobbyController implements Initializable, Observer{
ol.removeAll();
}
firstCompetitor.add(ClientState.getClientSourceId());
// firstCompetitor.add(ClientState.getClientSourceId());
int competitorIndex = 1;
for (Integer yachtId : ClientState.getBoats().keySet()) {
// break if there are more than 7 competitors
if (competitorIndex >= 8) {
break;
}
if (!yachtId.equals(Integer.parseInt(ClientState.getClientSourceId()))) {
competitors.get(competitorIndex).add(String.valueOf(yachtId));
competitorIndex++;
}
}
// int competitorIndex = 1;
// for (Integer yachtId : ClientState.getBoats().keySet()) {
// // break if there are more than 7 competitors
// if (competitorIndex >= 8) {
// break;
// }
// if (!yachtId.equals(Integer.parseInt(ClientState.getClientSourceId()))) {
// competitors.get(competitorIndex).add(String.valueOf(yachtId));
// competitorIndex++;
// }
// }
firstListView.setItems(firstCompetitor);
secondListView.setItems(secondCompetitor);
@@ -183,20 +193,20 @@ public class LobbyController implements Initializable, Observer{
eighthListView.setItems(eighthCompetitor);
}
private void initialiseLobbyControllerThread() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
}
});
}
});
thread.start();
}
// private void initialiseLobbyControllerThread() {
// Thread thread = new Thread(new Runnable() {
// @Override
// public void run() {
// Platform.runLater(new Runnable() {
// @Override
// public void run() {
//
// }
// });
// }
// });
// thread.start();
// }
private void initialiseImageView() {
Image image1 = new Image(getClass().getResourceAsStream("/ParrotGif/alistair.gif"));
@@ -223,7 +233,7 @@ public class LobbyController implements Initializable, Observer{
setContentPane("/views/StartScreenView.fxml");
GameState.setCurrentStage(GameStages.CANCELLED);
// TODO: 20/07/17 wmu16 - Implement some way of terminating the game
ClientState.setConnectedToHost(false);
// ClientState.setConnectedToHost(false);
}
@FXML
@@ -231,7 +241,8 @@ public class LobbyController implements Initializable, Observer{
// setContentPane("/views/RaceView.fxml");
playTheme();
GameState.setCurrentStage(GameStages.RACING);
mainServerThread.startGame();
for (LobbyCloseListener readyListener : lobbyListeners)
readyListener.notify(CloseStatus.READY);
}
@@ -253,14 +264,27 @@ public class LobbyController implements Initializable, Observer{
}
}
private void switchToRaceView() {
if (!switchedPane) {
switchedPane = true;
setContentPane("/views/RaceView.fxml");
}
// private void switchToRaceView() {
// if (!switchedPane) {
// switchedPane = true;
// setContentPane("/views/RaceView.fxml");
// }
// }
// TODO: 26/07/17 cir27 - Could probably be done in a cleaner way.
public void setTitle (String title) {
lobbyIpText.setText(title);
}
public void setMainServerThread(MainServerThread mainServerThread) {
this.mainServerThread = mainServerThread;
public void addCloseListener(LobbyCloseListener listener) {
lobbyListeners.add(listener);
}
public void setPlayerListSource (ObservableList<String> players) {
if (competitorsListView != null)
competitorsListView.setItems(players);
if (firstListView != null) {
firstListView.setItems(players);
firstImageView.setVisible(false);
}
}
}