From 850e09e0affcd5367d5c327bed39595024c1b8d8 Mon Sep 17 00:00:00 2001 From: Seraina Date: Wed, 13 Apr 2022 11:43:35 +0200 Subject: [PATCH] Integrated noise handling so it would run, some bugs still to work out --- .../ch/unibas/dmi/dbis/cs108/gamelogic/Game.java | 4 ++++ .../unibas/dmi/dbis/cs108/gamelogic/GameState.java | 2 +- .../dbis/cs108/gamelogic/ServerGameInfoHandler.java | 5 +++-- .../dmi/dbis/cs108/gamelogic/VoteHandler.java | 5 +++++ .../cs108/gamelogic/klassenstruktur/GhostNPC.java | 3 --- .../cs108/gamelogic/klassenstruktur/HumanNPC.java | 13 ++++++------- .../cs108/multiplayer/server/ClientHandler.java | 2 +- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java index fb7f007..460af73 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/Game.java @@ -58,6 +58,10 @@ public class Game implements Runnable { return nrOfUsers; } + public ClientHandler getClientHandler() { + return clientHandler; + } + public boolean getIsDay() {return isDay;} public void setDay(boolean day) { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java index 6aeef13..c28d553 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/GameState.java @@ -48,7 +48,7 @@ public class GameState { clientVoteData = new ClientVoteData(); Passenger[] passengerTrain = new Passenger[nrOfPlayers]; //Creates an array with Passengers with correlation positions (Train) for (int i = 0; i < nrOfPlayers; i++) { - if (i == 3) { + if (i == 3) { //TODO: randomize via Train.ghostposition Ghost g = new Ghost(); g.setPosition(train.orderOfTrain[i]); g.setGhost(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java index c15e7cc..ce8d57a 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/ServerGameInfoHandler.java @@ -6,6 +6,7 @@ import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.GhostNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.HumanNPC; import ch.unibas.dmi.dbis.cs108.gamelogic.klassenstruktur.Passenger; import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol; +import ch.unibas.dmi.dbis.cs108.multiplayer.server.ClientHandler; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -50,7 +51,7 @@ public class ServerGameInfoHandler { switch (msg) { case ClientGameInfoHandler.noiseNotification: //TODO(Seraina & Alex): noise handling - npc.noise(); + game.getClientHandler().broadcastChatMessage(ClientGameInfoHandler.noiseNotification); break; case ClientGameInfoHandler.ghostVoteRequest: npc.vote(game); @@ -68,7 +69,7 @@ public class ServerGameInfoHandler { public static void humanNpcParser(HumanNPC npc, String msg, Game game) { switch (msg) { case ClientGameInfoHandler.noiseNotification: - npc.noise(); + game.getClientHandler().broadcastChatMessage(ClientGameInfoHandler.noiseNotification); break; case ClientGameInfoHandler.humanVoteRequest: npc.vote(); diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java index 64ca673..3588b1e 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/VoteHandler.java @@ -113,6 +113,11 @@ public class VoteHandler { passengers[ghostPosition] = g; passengers[ghostPosition].send( ClientGameInfoHandler.youGotGhostyfied, game); // TODO: ServerGameInfoHandler might deal with this one + try { // waits 20 seconds before votes get collected + Thread.sleep(10); + } catch (InterruptedException e) { + LOGGER.warn("Thread " + Thread.currentThread() + " was interrupted"); + } /* notify passengers the ghosts passed by - for each ghost that ghostified a player, an instance of NoiseHandler is being created and the passengers this ghost passed by are being notified. The player who's just been ghostified diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java index 9125099..d4918d7 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/GhostNPC.java @@ -69,9 +69,6 @@ public class GhostNPC extends Ghost { * Decides what to do when a noise ist heard, currently just always broadcasts it * TODO: Make NPC smarter */ - public void noise() { - clientHandler.broadcastChatMessage("I heard some noise tonight"); - } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanNPC.java b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanNPC.java index 3b3a3c3..04d2674 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanNPC.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/gamelogic/klassenstruktur/HumanNPC.java @@ -7,6 +7,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class HumanNPC extends Human { + public static final Logger LOGGER = LogManager.getLogger(); public static final BudaLogConfig l = new BudaLogConfig(LOGGER); @@ -31,7 +32,8 @@ public class HumanNPC extends Human { /** * Sends a msg to the ServerGameInfoHandler.humanNpcParser to decide what has to happen now - * @param msg the message that is sent to this player. + * + * @param msg the message that is sent to this player. * @param game the game the HumanNPC lives on (in game.gameState.passengerTrain) */ @Override @@ -41,16 +43,13 @@ public class HumanNPC extends Human { /** * Currently returns a random integer for voting + * * @return integer between 0 and 5 */ - public void vote(){ - int randomNr = (int) (Math.random()*6); + public void vote() { + int randomNr = (int) (Math.random() * 6); vote = randomNr; hasVoted = true; LOGGER.info("HumanNPC at Position: " + this.getPosition() + " has voted for: " + vote); } - - public void noise() { - clientHandler.broadcastChatMessage("I heard some noise tonight"); - } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java index 0c02d39..30da240 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/multiplayer/server/ClientHandler.java @@ -210,7 +210,7 @@ public class ClientHandler implements Runnable { if(vote != Integer.MAX_VALUE) { //gets MAX_VALUE when the vote wasn't valid VoteHandler.getClientVoteData().setVote(position,vote); LOGGER.debug("Player vote: " + vote); - VoteHandler.getClientVoteData().setHasVoted(position,true); + VoteHandler.getClientVoteData().setHasVoted(position,true); //TODO: move clientVoteData to gamestate } }