Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
9bdfa6ad02
@ -5,3 +5,4 @@ Jonas of Istanbul
|
|||||||
serai
|
serai
|
||||||
serai
|
serai
|
||||||
serai
|
serai
|
||||||
|
serai
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package ch.unibas.dmi.dbis.cs108.multiplayer.client;
|
|||||||
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
||||||
import ch.unibas.dmi.dbis.cs108.gamelogic.ClientGameInfoHandler;
|
import ch.unibas.dmi.dbis.cs108.gamelogic.ClientGameInfoHandler;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.DayNightChangeListener;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GUI;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GUI;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
||||||
@ -350,24 +351,12 @@ public class Client {
|
|||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case GuiParameters.night: //ClientGameInfoHandler;
|
case GuiParameters.night: //ClientGameInfoHandler;
|
||||||
gameStateModel.setDayClone(false);
|
gameStateModel.setDayClone(false);
|
||||||
LOGGER.debug("----------------Night, Your role is:" + gameStateModel.getYourRole() + gameStateModel);
|
|
||||||
Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff());
|
|
||||||
chatApp.getGameController().updateGameSprites();
|
|
||||||
chatApp.getGameController().setNoiseButtonInvisible();
|
|
||||||
chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel);
|
|
||||||
break;
|
break;
|
||||||
case GuiParameters.day: //ClientGameInfoHandler
|
case GuiParameters.day: //ClientGameInfoHandler
|
||||||
gameStateModel.setDayClone(true);
|
gameStateModel.setDayClone(true);
|
||||||
LOGGER.debug("----------------Day, Your role is:" + gameStateModel.getYourRole()+ gameStateModel);
|
|
||||||
Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff());
|
|
||||||
chatApp.getGameController().updateGameSprites();
|
|
||||||
chatApp.getGameController().setNoiseButtonVisible();
|
|
||||||
chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel);
|
|
||||||
break;
|
break;
|
||||||
case GuiParameters.updateGameState:
|
case GuiParameters.updateGameState:
|
||||||
gameStateModel.setGSFromString(data);
|
gameStateModel.setGSFromString(data);
|
||||||
chatApp.getGameController().updateRoomLabels();
|
|
||||||
gameStateModel.setRoleFromPosition(position);
|
|
||||||
break;
|
break;
|
||||||
case GuiParameters.noiseHeardAtPosition:
|
case GuiParameters.noiseHeardAtPosition:
|
||||||
try {
|
try {
|
||||||
@ -382,6 +371,7 @@ public class Client {
|
|||||||
//TODO
|
//TODO
|
||||||
break;
|
break;
|
||||||
case GuiParameters.VoteIsOver:
|
case GuiParameters.VoteIsOver:
|
||||||
|
chatApp.getGameController().setNoiseButtonInvisible();
|
||||||
chatApp.getGameController().clearAllNoiseDisplay();
|
chatApp.getGameController().clearAllNoiseDisplay();
|
||||||
break;
|
break;
|
||||||
case GuiParameters.getMembersInLobby:
|
case GuiParameters.getMembersInLobby:
|
||||||
@ -389,13 +379,12 @@ public class Client {
|
|||||||
break;
|
break;
|
||||||
case GuiParameters.viewChangeToGame:
|
case GuiParameters.viewChangeToGame:
|
||||||
chatApp.getLoungeSceneViewController().addGameView();
|
chatApp.getLoungeSceneViewController().addGameView();
|
||||||
//TODO
|
gameStateModel.setGameOver(false);
|
||||||
|
new Thread(new DayNightChangeListener(gameStateModel, chatApp, position)).start();
|
||||||
break;
|
break;
|
||||||
/*case GuiParameters.viewChangeToStart:
|
|
||||||
//TODO
|
|
||||||
break;*/
|
|
||||||
case GuiParameters.viewChangeToLobby:
|
case GuiParameters.viewChangeToLobby:
|
||||||
chatApp.getLoungeSceneViewController().removeGameView();
|
chatApp.getLoungeSceneViewController().removeGameView();
|
||||||
|
gameStateModel.setGameOver(true);
|
||||||
//TODO
|
//TODO
|
||||||
break;
|
break;
|
||||||
case GuiParameters.addNewMemberToLobby:
|
case GuiParameters.addNewMemberToLobby:
|
||||||
|
|||||||
@ -50,6 +50,7 @@ public class JClientProtocolParser {
|
|||||||
break;
|
break;
|
||||||
case Protocol.serverConfirmQuit:
|
case Protocol.serverConfirmQuit:
|
||||||
c.disconnectFromServer();
|
c.disconnectFromServer();
|
||||||
|
c.getGameStateModel().setGameOver(true);
|
||||||
break;
|
break;
|
||||||
case Protocol.serverRequestsGhostVote:
|
case Protocol.serverRequestsGhostVote:
|
||||||
LOGGER.debug("Ghost received Vote request");
|
LOGGER.debug("Ghost received Vote request");
|
||||||
|
|||||||
@ -157,6 +157,7 @@ public class ChatApp extends Application {
|
|||||||
this.setGameC(gameController);
|
this.setGameC(gameController);
|
||||||
gameC.setClient(cModel);
|
gameC.setClient(cModel);
|
||||||
gameC.setGameStateModel(GameController.getGameStateModel());
|
gameC.setGameStateModel(GameController.getGameStateModel());
|
||||||
|
Sprites.setNightSprites(GameController.getGameStateModel().getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff());
|
||||||
Sprites.setDaySprites(GameController.getGameStateModel().getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff());
|
Sprites.setDaySprites(GameController.getGameStateModel().getPassengerTrainClone()[1], GameController.getGameStateModel().getKickedOff());
|
||||||
SpritesDay.setBells();
|
SpritesDay.setBells();
|
||||||
SpritesDay.setWheels();
|
SpritesDay.setWheels();
|
||||||
|
|||||||
@ -0,0 +1,63 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui;
|
||||||
|
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.game.GameController;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge.LoungeSceneViewController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class adds methods to listen if there is a change in the day&night state and calls methods accordingly
|
||||||
|
*/
|
||||||
|
public class DayNightChangeListener implements Runnable {
|
||||||
|
|
||||||
|
private GameStateModel gameStateModel;
|
||||||
|
private ChatApp chatApp;
|
||||||
|
private int position;
|
||||||
|
|
||||||
|
public DayNightChangeListener(GameStateModel gameStateModel, ChatApp chatApp, int position) {
|
||||||
|
this.gameStateModel = gameStateModel;
|
||||||
|
this.chatApp = chatApp;
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try{
|
||||||
|
while(!gameStateModel.isGameOver()) {
|
||||||
|
if(gameStateModel.getDayClone()) { //its Day
|
||||||
|
LoungeSceneViewController.getTrainAnimationDayController().dontShowFullWagon();
|
||||||
|
Sprites.setDaySprites(gameStateModel.getPassengerTrainClone()[1],
|
||||||
|
GameController.getGameStateModel().getKickedOff());
|
||||||
|
chatApp.getGameController()
|
||||||
|
.updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController());
|
||||||
|
chatApp.getGameController().setNoiseButtonVisible();
|
||||||
|
chatApp.getGameController().setVoteButtonVisibilityDay(gameStateModel);
|
||||||
|
} else { //its night
|
||||||
|
try {
|
||||||
|
if (gameStateModel.getYourRoleFromPosition(position).equals("")) {
|
||||||
|
LoungeSceneViewController.getTrainAnimationDayController().showFullWagon();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.getMessage();
|
||||||
|
}
|
||||||
|
Sprites.setNightSprites(gameStateModel.getPassengerTrainClone()[1],
|
||||||
|
GameController.getGameStateModel().getKickedOff());
|
||||||
|
chatApp.getGameController()
|
||||||
|
.updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController());
|
||||||
|
chatApp.getGameController().setNoiseButtonInvisible();
|
||||||
|
chatApp.getGameController().setVoteButtonVisibilityNight(gameStateModel);
|
||||||
|
}
|
||||||
|
chatApp.getGameController().updateGameSprites(LoungeSceneViewController.getTrainAnimationDayController());
|
||||||
|
chatApp.getGameController().updateRoomLabels();
|
||||||
|
gameStateModel.setRoleFromPosition(position);
|
||||||
|
try {
|
||||||
|
Thread.sleep(100);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,12 +19,19 @@ public class GameStateModel {
|
|||||||
*/
|
*/
|
||||||
private boolean isDayClone;
|
private boolean isDayClone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* true if the game is over
|
||||||
|
*/
|
||||||
|
private boolean gameOver = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* can take the values h/g/s for human/ghost/spectator. Safes the role the client this GamesStateModel
|
* can take the values h/g/s for human/ghost/spectator. Safes the role the client this GamesStateModel
|
||||||
* lives on currently has
|
* lives on currently has
|
||||||
*/
|
*/
|
||||||
private String yourRole; //TODO: Maybe add a GUI field to show this in
|
private String yourRole; //TODO: Maybe add a GUI field to show this in
|
||||||
|
|
||||||
|
private int yourPosition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A primitive clone of the passengerTrain in the GameState of the server.
|
* A primitive clone of the passengerTrain in the GameState of the server.
|
||||||
* in passengerTrainClone[0] the names of the passengers are stored, in passengerTrainClone[1] the roles
|
* in passengerTrainClone[0] the names of the passengers are stored, in passengerTrainClone[1] the roles
|
||||||
@ -48,6 +55,15 @@ public class GameStateModel {
|
|||||||
isDayClone = false;
|
isDayClone = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setGameOver(boolean gameOver) {
|
||||||
|
this.gameOver = gameOver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isGameOver() {
|
||||||
|
return gameOver;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the passengerTrainClone
|
* Updates the passengerTrainClone
|
||||||
* @param names an array of the names of the players
|
* @param names an array of the names of the players
|
||||||
@ -84,6 +100,10 @@ public class GameStateModel {
|
|||||||
return yourRole;
|
return yourRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getYourRoleFromPosition(int position) {
|
||||||
|
return passengerTrainClone[1][position];
|
||||||
|
}
|
||||||
|
|
||||||
public int getNrOfPlayers() {
|
public int getNrOfPlayers() {
|
||||||
return nrOfPlayers;
|
return nrOfPlayers;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,9 +78,7 @@ public class Sprites {
|
|||||||
shadow = SpritesDay.shadow;
|
shadow = SpritesDay.shadow;
|
||||||
secondWagon = SpritesDay.secondWagon;
|
secondWagon = SpritesDay.secondWagon;
|
||||||
emptyWagon = SpritesDay.emptyWagon;
|
emptyWagon = SpritesDay.emptyWagon;
|
||||||
for (int i = 0; i < roles.length; i++) {
|
updateDayRoomSprites(roles,kickedOff);
|
||||||
rooms[i] = getRoomDay(i, roles[i], kickedOff);
|
|
||||||
}
|
|
||||||
emptyWagonWall = SpritesDay.emptyWagonWall;
|
emptyWagonWall = SpritesDay.emptyWagonWall;
|
||||||
fullWagon = SpritesDay.fullWagon;
|
fullWagon = SpritesDay.fullWagon;
|
||||||
loki = SpritesDay.loki;
|
loki = SpritesDay.loki;
|
||||||
@ -92,6 +90,11 @@ public class Sprites {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public static void updateDayRoomSprites(String[] roles, boolean[] kickedOff) {
|
||||||
|
for (int i = 0; i < roles.length; i++) {
|
||||||
|
rooms[i] = getRoomDay(i, roles[i], kickedOff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets all Images of this class to the Night version, takes into account which room is a ghost
|
* Sets all Images of this class to the Night version, takes into account which room is a ghost
|
||||||
@ -104,9 +107,7 @@ public class Sprites {
|
|||||||
shadow = SpritesNight.shadow;
|
shadow = SpritesNight.shadow;
|
||||||
secondWagon = SpritesNight.secondWagon;
|
secondWagon = SpritesNight.secondWagon;
|
||||||
emptyWagon = SpritesNight.emptyWagon;
|
emptyWagon = SpritesNight.emptyWagon;
|
||||||
for (int i = 0; i < roles.length; i++) {
|
updateNightRoomSprites(roles,kickedOff);
|
||||||
rooms[i] = getRoomNight(i, roles[i], kickedOff);
|
|
||||||
}
|
|
||||||
emptyWagonWall = SpritesNight.emptyWagonWall;
|
emptyWagonWall = SpritesNight.emptyWagonWall;
|
||||||
fullWagon = SpritesNight.fullWagon;
|
fullWagon = SpritesNight.fullWagon;
|
||||||
loki = SpritesNight.loki;
|
loki = SpritesNight.loki;
|
||||||
@ -115,6 +116,12 @@ public class Sprites {
|
|||||||
fg = SpritesNight.fg;
|
fg = SpritesNight.fg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void updateNightRoomSprites(String[] roles, boolean[] kickedOff) {
|
||||||
|
for (int i = 0; i < roles.length; i++) {
|
||||||
|
rooms[i] = getRoomNight(i, roles[i], kickedOff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a room Image from SpritesDay, corresponding to the position and the role of the passenger in that room
|
* Returns a room Image from SpritesDay, corresponding to the position and the role of the passenger in that room
|
||||||
* @param position the position of the room integer 0-5
|
* @param position the position of the room integer 0-5
|
||||||
|
|||||||
@ -49,6 +49,14 @@ public class TrainAnimationDayController implements Initializable {
|
|||||||
LOGGER.debug("Empty TrainAnimationDayController() constructor was called");
|
LOGGER.debug("Empty TrainAnimationDayController() constructor was called");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateSprites(){
|
||||||
|
shadowTrain.setImage(Sprites.getShadow());
|
||||||
|
wagonBGImageView.setImage(Sprites.getSecondWagon());
|
||||||
|
wagonFloorImageView.setImage(Sprites.getEmptyWagon());
|
||||||
|
wagonFullImageView.setImage(Sprites.getFullWagon());
|
||||||
|
lokiImageView.setImage(Sprites.getLoki());
|
||||||
|
}
|
||||||
|
|
||||||
public ChatApp getChatApp() {
|
public ChatApp getChatApp() {
|
||||||
return chatApp;
|
return chatApp;
|
||||||
}
|
}
|
||||||
@ -86,6 +94,24 @@ public class TrainAnimationDayController implements Initializable {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showFullWagon() {
|
||||||
|
Platform.runLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
wagonFullImageView.setVisible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dontShowFullWagon() {
|
||||||
|
Platform.runLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
wagonFullImageView.setVisible(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the gameView to the existing LobbyView
|
* Adds the gameView to the existing LobbyView
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import static javafx.scene.AccessibleRole.PARENT;
|
|||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ChatApp;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.GameStateModel;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.Sprites;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.Sprites;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.SpritesDay;
|
||||||
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.TrainAnimationDayController;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters;
|
||||||
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
import ch.unibas.dmi.dbis.cs108.BudaLogConfig;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.ClientModel;
|
||||||
@ -126,17 +128,23 @@ public class GameController implements Initializable {
|
|||||||
@FXML
|
@FXML
|
||||||
private AnchorPane chatAreaGame;
|
private AnchorPane chatAreaGame;
|
||||||
|
|
||||||
public void updateGameSprites(){
|
public void updateGameSprites(TrainAnimationDayController trainAnimation){
|
||||||
Platform.runLater(new Runnable() {
|
Platform.runLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try{
|
try{
|
||||||
|
if(gameStateModel.getDayClone()) {
|
||||||
|
Sprites.updateDayRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
||||||
|
} else {
|
||||||
|
Sprites.updateNightRoomSprites(gameStateModel.getPassengerTrainClone()[1], gameStateModel.getKickedOff());
|
||||||
|
}
|
||||||
room0ImageView.setImage(Sprites.getARoom(0));
|
room0ImageView.setImage(Sprites.getARoom(0));
|
||||||
room1ImageView.setImage(Sprites.getARoom(1));
|
room1ImageView.setImage(Sprites.getARoom(1));
|
||||||
room2ImageView.setImage(Sprites.getARoom(2));
|
room2ImageView.setImage(Sprites.getARoom(2));
|
||||||
room3ImageView.setImage(Sprites.getARoom(3));
|
room3ImageView.setImage(Sprites.getARoom(3));
|
||||||
room4ImageView.setImage(Sprites.getARoom(4));
|
room4ImageView.setImage(Sprites.getARoom(4));
|
||||||
room5ImageView.setImage(Sprites.getARoom(5));
|
room5ImageView.setImage(Sprites.getARoom(5));
|
||||||
|
trainAnimation.updateSprites();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.info(e.getMessage());
|
LOGGER.info(e.getMessage());
|
||||||
}
|
}
|
||||||
@ -157,7 +165,7 @@ public class GameController implements Initializable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LOGGER.debug(buttonRoom0);
|
LOGGER.debug(buttonRoom0);
|
||||||
if (g.getYourRole().equals("h")) {
|
if (g.getYourRoleFromPosition(client.getClient().getPosition()).equals("")) { //human
|
||||||
try {
|
try {
|
||||||
buttonRoom0.setVisible(true);
|
buttonRoom0.setVisible(true);
|
||||||
buttonRoom1.setVisible(true);
|
buttonRoom1.setVisible(true);
|
||||||
@ -169,7 +177,7 @@ public class GameController implements Initializable {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else { //ghost
|
||||||
try {
|
try {
|
||||||
buttonRoom0.setVisible(false);
|
buttonRoom0.setVisible(false);
|
||||||
buttonRoom1.setVisible(false);
|
buttonRoom1.setVisible(false);
|
||||||
@ -190,7 +198,7 @@ public class GameController implements Initializable {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LOGGER.debug(buttonRoom0);
|
LOGGER.debug(buttonRoom0);
|
||||||
if (g.getYourRole().equals("g")) {
|
if (g.getYourRoleFromPosition(client.getClient().getPosition()).equals("g")) {//ghost
|
||||||
try {
|
try {
|
||||||
buttonRoom0.setVisible(true);
|
buttonRoom0.setVisible(true);
|
||||||
buttonRoom1.setVisible(true);
|
buttonRoom1.setVisible(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user