diff --git a/src/main/java/com/bernard/nodecames/frontend/WebSocketController.java b/src/main/java/com/bernard/nodecames/frontend/WebSocketController.java index c51aceb..96ffef7 100644 --- a/src/main/java/com/bernard/nodecames/frontend/WebSocketController.java +++ b/src/main/java/com/bernard/nodecames/frontend/WebSocketController.java @@ -125,4 +125,15 @@ public class WebSocketController { e.printStackTrace(); } } + + @MessageMapping("enter-sudden-death") + public void enterSuddenDeath(@Header("room") String roomId, @Header("player") String player) { + Grid g = gm.findGrid(roomId); + try { + gm.enterSuddenDeath(g); + } catch (IllegalGameActionException e) { + publishError(player.charAt(0), e); + e.printStackTrace(); + } + } } diff --git a/src/main/java/com/bernard/nodecames/game/GameManager.java b/src/main/java/com/bernard/nodecames/game/GameManager.java index dc66c27..b43a8f0 100644 --- a/src/main/java/com/bernard/nodecames/game/GameManager.java +++ b/src/main/java/com/bernard/nodecames/game/GameManager.java @@ -188,7 +188,7 @@ public class GameManager { /** * Enters the sudden death phase */ - private void enterSuddenDeath(Grid g) { + private void enterSuddenDeathInternal(Grid g) { newGameEvent(g, GameEvent.newSuddenDeath()); if(allGreenRevealed(g, 'A', g.getConfig().isOnlyOneGreenGreen())) { // If all 'A''s greens are revealed, A is the only one to guess @@ -209,7 +209,7 @@ public class GameManager { if(g.getUsedHints() >= g.getConfig().getMaxMaxHint()) { if(!g.getConfig().isSuddenDeath()) { // We're entering sudden death - enterSuddenDeath(g); + enterSuddenDeathInternal(g); } else { // Only sudden death can get us out setPhase(g, Phase.NEED_SUDDEN_DEATH); @@ -301,6 +301,13 @@ public class GameManager { newGameEvent(g, GameEvent.newEndGuessingEvent(true, player)); } + public void enterSuddenDeath(Grid g) throws IllegalGameActionException { + if(!g.getPhase().isNeedMoreHints()) { + throw new IllegalGameActionException(g, "You can only enter sudden death when being out of hints"); + } + enterSuddenDeathInternal(g); + } + /** * UPDATE GAME CONFIG @@ -396,7 +403,7 @@ public class GameManager { setPhase(g, Phase.needMoreHints(g.getPhase().getHinting())); } else if (g.getPhase() == Phase.NEED_SUDDEN_DEATH) { // We're entering sudden death - enterSuddenDeath(g); + enterSuddenDeathInternal(g); } } diff --git a/src/main/java/com/bernard/nodecames/model/Grid.java b/src/main/java/com/bernard/nodecames/model/Grid.java index ff1746b..b39969a 100644 --- a/src/main/java/com/bernard/nodecames/model/Grid.java +++ b/src/main/java/com/bernard/nodecames/model/Grid.java @@ -84,7 +84,7 @@ public class Grid { return (this == HINTING_BOTH) || (this == ((player == 'A')?HINTING_A:HINTING_B)); } public boolean isGuessing(char player) { - return (this == ((player == 'A')?GUESSING_A:GUESSING_B)); + return this == guessing(player) || this == suddenDeathOnly(player) || this == SUDDEN_DEATH_BOTH; } public boolean isAnyoneGuessing() { return isGuessing('A') || isGuessing('B'); diff --git a/src/main/resources/static/js/grid.js b/src/main/resources/static/js/grid.js index 1d46fa1..1a617cc 100644 --- a/src/main/resources/static/js/grid.js +++ b/src/main/resources/static/js/grid.js @@ -57,6 +57,11 @@ function updatePhase() { $('.card-button').css('visibility', 'hidden') $('#end-guessing-button').hide() } + if(phase['name'] == 'need_more_hints_a' || phase['name'] == 'need_more_hints_b') { + $('#enter-sudden-death-button').show() + } else { + $('#enter-sudden-death-button').hide() + } if((phase['name'] == 'waiting_for_one_more_'+p) || (phase[p+'-guessing'] && (gc['end-guessing'] || (currentHint && currentGuessCount >= currentHint['wordCount'])))) { @@ -284,6 +289,9 @@ function pointCard(e) { function endGuessing(e) { socket.send('/app/end-guessing', wsHeaders, "") } +function enterSuddenDeath(e) { + socket.send('/app/enter-sudden-death', wsHeaders, "") +} function onNewPhase(m) { phase = JSON.parse(m.body) updatePhase() @@ -332,6 +340,7 @@ function initialize() { $('#select-player-b').on('click', selectPlayer) $('#submit-hint button').on('click', submitHint) $('#end-guessing-button').on('click', endGuessing) + $('#enter-sudden-death-button').on('click', enterSuddenDeath) roomId = getRoomId() diff --git a/src/main/resources/templates/grid.html b/src/main/resources/templates/grid.html index eb1266b..93fab88 100644 --- a/src/main/resources/templates/grid.html +++ b/src/main/resources/templates/grid.html @@ -33,6 +33,9 @@
+