Merge remote-tracking branch 'origin/master'

This commit is contained in:
Jonas 2022-05-14 17:04:34 +02:00
commit 9bdfa6ad02
9 changed files with 142 additions and 26 deletions

View File

@ -5,3 +5,4 @@ Jonas of Istanbul
serai serai
serai serai
serai serai
serai

View File

@ -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:

View File

@ -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");

View File

@ -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();

View File

@ -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();
}
}
}

View File

@ -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;
} }

View File

@ -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

View File

@ -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

View File

@ -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);