diff --git a/src/main/java/net/deckserver/dwr/DeckserverRemote.java b/src/main/java/net/deckserver/dwr/DeckserverRemote.java index a783d1c0..3059c8cb 100644 --- a/src/main/java/net/deckserver/dwr/DeckserverRemote.java +++ b/src/main/java/net/deckserver/dwr/DeckserverRemote.java @@ -6,11 +6,15 @@ import net.deckserver.dwr.creators.UpdateFactory; import net.deckserver.dwr.model.GameModel; import net.deckserver.dwr.model.GameView; +import net.deckserver.dwr.model.JolGame; import net.deckserver.dwr.model.PlayerModel; import net.deckserver.game.enums.GameFormat; +import net.deckserver.game.enums.RegionType; import net.deckserver.services.*; +import net.deckserver.storage.json.deck.CardCount; import net.deckserver.storage.json.deck.Deck; import net.deckserver.storage.json.deck.ExtendedDeck; +import net.deckserver.storage.json.game.CardSimple; import net.deckserver.storage.json.game.ChatData; import net.deckserver.storage.json.system.DeckInfo; import net.deckserver.storage.json.system.GameHistory; @@ -26,6 +30,7 @@ import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; public class DeckserverRemote { @@ -196,6 +201,14 @@ public Deck getGameDeck(String gameName) { return null; } + public List getLib(String gameName) { + JolGame game = GameService.getGameByName(gameName); + String playerName = getPlayer(request); + return game.data().getPlayerRegion(playerName, RegionType.LIBRARY).getCards().stream() + .map(card -> new CardCount(Integer.valueOf(card.getCardId()), card.getName(), 0, null)) + .collect(Collectors.toList()); + } + public Set getGamePlayers(String gameName) { String playerName = getPlayer(request); if (gameName != null && !Strings.isNullOrEmpty(playerName)) { @@ -395,6 +408,12 @@ public Map setMessage(String message) { return UpdateFactory.getUpdate(); } + public List removeShownCards(String name) { + String playerName = getPlayer(request); + GameService.getGameByName(name).setShownCards(playerName, null); + return null; + } + public String exportPastGamesAsCsv() throws IOException { CSVFormat format = CSVFormat.DEFAULT.builder() .setHeader("Game", "Started", "Ended", "Player", "Deck", "GW", "VP") diff --git a/src/main/java/net/deckserver/dwr/bean/GameBean.java b/src/main/java/net/deckserver/dwr/bean/GameBean.java index 4a75a7f6..716936c4 100644 --- a/src/main/java/net/deckserver/dwr/bean/GameBean.java +++ b/src/main/java/net/deckserver/dwr/bean/GameBean.java @@ -1,6 +1,7 @@ package net.deckserver.dwr.bean; import lombok.Getter; +import net.deckserver.storage.json.game.CardSimple; import java.util.List; @@ -13,6 +14,7 @@ public class GameBean { private final String hand; private final String globalNotes; private final String privateNotes; + private final List shownCards; private final String label; private final String phase; private final List turn; @@ -29,7 +31,7 @@ public class GameBean { private final int logLength; private final String currentPlayer; - public GameBean(boolean isPlayer, boolean isAdmin, boolean isJudge, int refresh, String hand, String globalNotes, String privateNotes, + public GameBean(boolean isPlayer, boolean isAdmin, boolean isJudge, int refresh, String hand, String globalNotes, String privateNotes, List shownCards, String label, String phase, boolean resetChat, boolean turnChanged, List turn, List turns, String state, List phases, List ping, List pinged, String stamp, String name, int logLength, String currentPlayer) { this.ping = ping; @@ -41,6 +43,7 @@ public GameBean(boolean isPlayer, boolean isAdmin, boolean isJudge, int refresh, this.hand = hand; this.globalNotes = globalNotes; this.privateNotes = privateNotes; + this.shownCards = shownCards; this.label = label; this.phase = phase; this.resetChat = resetChat; diff --git a/src/main/java/net/deckserver/dwr/model/GameView.java b/src/main/java/net/deckserver/dwr/model/GameView.java index fa3d9ce1..f8146d66 100644 --- a/src/main/java/net/deckserver/dwr/model/GameView.java +++ b/src/main/java/net/deckserver/dwr/model/GameView.java @@ -7,6 +7,7 @@ import net.deckserver.services.ChatService; import net.deckserver.services.GameService; import net.deckserver.services.PlayerService; +import net.deckserver.storage.json.game.CardSimple; import net.deckserver.storage.json.game.ChatData; import org.directwebremoting.WebContextFactory; import org.slf4j.Logger; @@ -90,6 +91,7 @@ public GameBean create() { String hand = null; String globalNotes = null; String privateNotes = null; + List shownCards = null; String label; List turn = new ArrayList<>(); List turns = new ArrayList<>(); @@ -118,6 +120,7 @@ public GameBean create() { if (privateNotesChanged) { privateNotes = game.getPrivateNotes(playerName); + shownCards = game.getShownCards(playerName); } label = game.getTurnLabel() + " - " + game.getPhase(); @@ -160,7 +163,7 @@ public GameBean create() { clearAccess(); String stamp = OffsetDateTime.now().format(ISO_OFFSET_DATE_TIME); int logLength = ChatService.getTurn(id, game.getTurnLabel()).size(); - return new GameBean(isPlayer, isAdmin, isJudge, refresh, hand, globalNotes, privateNotes, label, phase.getDescription(), + return new GameBean(isPlayer, isAdmin, isJudge, refresh, hand, globalNotes, privateNotes, shownCards,label, phase.getDescription(), chatReset, tc, turn, turns, state, phases, ping, pinged, stamp, gameName, logLength, currentPlayer); } diff --git a/src/main/java/net/deckserver/dwr/model/JolGame.java b/src/main/java/net/deckserver/dwr/model/JolGame.java index 0adbad8d..bb77136e 100644 --- a/src/main/java/net/deckserver/dwr/model/JolGame.java +++ b/src/main/java/net/deckserver/dwr/model/JolGame.java @@ -14,10 +14,7 @@ import net.deckserver.services.ParserService; import net.deckserver.storage.json.cards.CardSummary; import net.deckserver.storage.json.deck.Deck; -import net.deckserver.storage.json.game.CardData; -import net.deckserver.storage.json.game.GameData; -import net.deckserver.storage.json.game.PlayerData; -import net.deckserver.storage.json.game.RegionData; +import net.deckserver.storage.json.game.*; import java.text.DecimalFormat; import java.util.*; @@ -379,6 +376,13 @@ public void setPrivateNotes(String player, String text) { data.getPlayer(player).setNotes(text); } + public List getShownCards(String player) { + return Optional.ofNullable(data.getPlayer(player)).get().getShownCards(); + } + public void setShownCards(String player, List shownCards) { + data.getPlayer(player).setShownCards(shownCards); + } + public void setLabel(String player, String cardId, String text, boolean quiet) { CardData card = data.getCard(cardId); String cardName = getCardName(card); @@ -626,6 +630,7 @@ public void show(String player, RegionType targetRegion, int amount, Listnew CardSimple(card.getCardId(), card.getName(), card.getOwnerName(), targetRegion.description())).collect(Collectors.toList())); } String msg; boolean self = recipients.size() == 1 && recipients.contains(player); diff --git a/src/main/java/net/deckserver/storage/json/game/CardSimple.java b/src/main/java/net/deckserver/storage/json/game/CardSimple.java new file mode 100644 index 00000000..f8786881 --- /dev/null +++ b/src/main/java/net/deckserver/storage/json/game/CardSimple.java @@ -0,0 +1,21 @@ +package net.deckserver.storage.json.game; + +import lombok.Data; + +@Data +public class CardSimple { + String id; + String name; + String owner; + String region; + + public CardSimple() { + } + + public CardSimple(String cardId, String name, String ownerName, String region) { + this.id = cardId; + this.name = name; + this.owner = ownerName; + this.region = region; + } +} diff --git a/src/main/java/net/deckserver/storage/json/game/PlayerData.java b/src/main/java/net/deckserver/storage/json/game/PlayerData.java index 91789459..3967e81b 100644 --- a/src/main/java/net/deckserver/storage/json/game/PlayerData.java +++ b/src/main/java/net/deckserver/storage/json/game/PlayerData.java @@ -7,6 +7,7 @@ import net.deckserver.game.enums.RegionType; import java.util.HashMap; +import java.util.List; import java.util.Map; @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "name") @@ -31,6 +32,7 @@ public class PlayerData { private boolean ousted = false; private String notes; private String choice; + private List shownCards; public PlayerData(String name) { this.name = name; diff --git a/src/main/webapp/WEB-INF/jsps/game/notes.jsp b/src/main/webapp/WEB-INF/jsps/game/notes.jsp index 0941763d..8355aa0d 100644 --- a/src/main/webapp/WEB-INF/jsps/game/notes.jsp +++ b/src/main/webapp/WEB-INF/jsps/game/notes.jsp @@ -8,9 +8,30 @@
- - + placeholder="Global Notes" style="height: 150px;"> + +
+ +
+
+
    +
    +
    + + +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsps/game/quick-command-modal.jsp b/src/main/webapp/WEB-INF/jsps/game/quick-command-modal.jsp index 76863934..d3136858 100644 --- a/src/main/webapp/WEB-INF/jsps/game/quick-command-modal.jsp +++ b/src/main/webapp/WEB-INF/jsps/game/quick-command-modal.jsp @@ -33,7 +33,11 @@ + +
    Crypt