Spectate mode can be selected by clients when they join a game.
#story[1194]
This commit is contained in:
@@ -8,6 +8,7 @@ import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import mock.app.Event;
|
||||
import mock.exceptions.EventConstructionException;
|
||||
import network.Messages.Enums.RequestToJoinEnum;
|
||||
import visualiser.app.App;
|
||||
import visualiser.app.MatchBrowserSingleton;
|
||||
import visualiser.network.MatchBrowserInterface;
|
||||
@@ -95,7 +96,7 @@ public class HostGameController extends Controller {
|
||||
public void connectSocket(String address, int port) throws IOException {
|
||||
Socket socket = new Socket(address, port);
|
||||
InGameLobbyController iglc = (InGameLobbyController)loadScene("gameLobby.fxml");
|
||||
iglc.enterGameLobby(socket, true);
|
||||
iglc.enterGameLobby(socket, true, RequestToJoinEnum.PARTICIPANT);//TODO may want to let the host spectate if they wish.
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -262,10 +262,16 @@ public class InGameLobbyController extends Controller {
|
||||
}.start();
|
||||
}
|
||||
|
||||
public void enterGameLobby(Socket socket, boolean isHost){
|
||||
/**
|
||||
* Joins a game and enters the game lobby for it.
|
||||
* @param socket Socket to connect to.
|
||||
* @param isHost Whether this client is the host.
|
||||
* @param joinType How the client wishes to join (e.g., participant).
|
||||
*/
|
||||
public void enterGameLobby(Socket socket, boolean isHost, RequestToJoinEnum joinType){
|
||||
try {
|
||||
|
||||
this.visualiserRaceEvent = new VisualiserRaceEvent(socket, RequestToJoinEnum.PARTICIPANT);
|
||||
this.visualiserRaceEvent = new VisualiserRaceEvent(socket, joinType);
|
||||
this.isHost = isHost;
|
||||
this.controllerClient = visualiserRaceEvent.getControllerClient();
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ import javafx.scene.control.Button;
|
||||
import javafx.scene.control.TableColumn;
|
||||
import javafx.scene.control.TableView;
|
||||
import javafx.scene.control.TextField;
|
||||
import network.Messages.Enums.RequestToJoinEnum;
|
||||
import network.Messages.HostGame;
|
||||
import visualiser.app.MatchBrowserSingleton;
|
||||
import visualiser.model.RaceConnection;
|
||||
@@ -28,6 +29,7 @@ public class LobbyController extends Controller {
|
||||
private @FXML TableColumn<RaceConnection, String> hostNameColumn;
|
||||
private @FXML TableColumn<RaceConnection, String> statusColumn;
|
||||
private @FXML Button joinGameBtn;
|
||||
private @FXML Button spectateButton;
|
||||
private @FXML TextField addressFld;
|
||||
private @FXML TextField portFld;
|
||||
|
||||
@@ -53,11 +55,14 @@ public class LobbyController extends Controller {
|
||||
lobbyTable.getSelectionModel().selectedItemProperty().addListener((obs, prev, curr) -> {
|
||||
if (curr != null && curr.statusProperty().getValue().equals("Ready")) {
|
||||
joinGameBtn.setDisable(false);
|
||||
spectateButton.setDisable(false);
|
||||
} else {
|
||||
joinGameBtn.setDisable(true);
|
||||
spectateButton.setDisable(true);
|
||||
}
|
||||
});
|
||||
joinGameBtn.setDisable(true);
|
||||
spectateButton.setDisable(true);
|
||||
|
||||
this.udpSocket = MatchBrowserSingleton.getInstance().getUdpSocket();
|
||||
receiveMatchData();
|
||||
@@ -74,21 +79,40 @@ public class LobbyController extends Controller {
|
||||
try {
|
||||
if (lobbyTable.getSelectionModel().getSelectedItem().statusProperty().getValue().equals("Ready")) {
|
||||
joinGameBtn.setDisable(false);
|
||||
spectateButton.setDisable(false);
|
||||
} else {
|
||||
joinGameBtn.setDisable(true);
|
||||
spectateButton.setDisable(true);
|
||||
}
|
||||
} catch (Exception ignored){}
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to a connection.
|
||||
* @param joinType How the client wishes to join (e.g., participant).
|
||||
* @throws IOException socket error
|
||||
*/
|
||||
public void connectSocket() throws IOException {
|
||||
public void connectSocket(RequestToJoinEnum joinType) throws IOException {
|
||||
RaceConnection connection = lobbyTable.getSelectionModel().getSelectedItem();
|
||||
Socket socket = new Socket(connection.getHostname(), connection.getPort());
|
||||
InGameLobbyController iglc = (InGameLobbyController)loadScene("gameLobby.fxml");
|
||||
iglc.enterGameLobby(socket, false);
|
||||
iglc.enterGameLobby(socket, false, joinType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests to join the game as a participant.
|
||||
* @throws IOException socket error.
|
||||
*/
|
||||
public void connectParticipate() throws IOException {
|
||||
connectSocket(RequestToJoinEnum.PARTICIPANT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Requests to join the game as a spectator.
|
||||
* @throws IOException socket error.
|
||||
*/
|
||||
public void connectSpectate() throws IOException {
|
||||
connectSocket(RequestToJoinEnum.SPECTATOR);
|
||||
}
|
||||
|
||||
public void menuBtnPressed() throws IOException {
|
||||
|
||||
@@ -14,15 +14,25 @@ public class ThisBoat {
|
||||
}
|
||||
|
||||
public void setSailsOut(boolean sailsOut) {
|
||||
this.boat.setSailsOut(sailsOut);
|
||||
if (this.boat != null) {
|
||||
this.boat.setSailsOut(sailsOut);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSailsOut() {
|
||||
return this.boat.isSailsOut();
|
||||
if (this.boat != null) {
|
||||
return this.boat.isSailsOut();
|
||||
} else {
|
||||
return true;//TODO junk value to allow the client to spectate.
|
||||
}
|
||||
}
|
||||
|
||||
public int getSourceID() {
|
||||
return this.boat.getSourceID();
|
||||
if (this.boat != null) {
|
||||
return this.boat.getSourceID();
|
||||
} else {
|
||||
return 0;//TODO junk value to allow the client to spectate.
|
||||
}
|
||||
}
|
||||
|
||||
public void setBoat(VisualiserBoat boat) {
|
||||
|
||||
Reference in New Issue
Block a user