package fr.lyrgard.hexScape.gui.desktop.view.game.rightPanel; import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import javax.swing.BoxLayout; import javax.swing.JPanel; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.gui.desktop.view.common.chat.ChatPanel; import fr.lyrgard.hexScape.message.ArmyLoadedMessage; import fr.lyrgard.hexScape.message.DiceThrownMessage; import fr.lyrgard.hexScape.message.GameJoinedMessage; import fr.lyrgard.hexScape.message.GameLeftMessage; import fr.lyrgard.hexScape.message.GameMessagePostedMessage; import fr.lyrgard.hexScape.message.GameObservedMessage; import fr.lyrgard.hexScape.message.GameStartedMessage; import fr.lyrgard.hexScape.message.MapLoadedMessage; import fr.lyrgard.hexScape.message.MarkerPlacedMessage; import fr.lyrgard.hexScape.message.MarkerRemovedMessage; import fr.lyrgard.hexScape.message.MarkerRevealedMessage; import fr.lyrgard.hexScape.message.PieceMovedMessage; import fr.lyrgard.hexScape.message.PiecePlacedMessage; import fr.lyrgard.hexScape.message.PieceRemovedMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.Universe; import fr.lyrgard.hexScape.model.card.Army; import fr.lyrgard.hexScape.model.card.CardInstance; import fr.lyrgard.hexScape.model.card.CardType; import fr.lyrgard.hexScape.model.dice.DiceFace; import fr.lyrgard.hexScape.model.dice.DiceType; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.map.Map; import fr.lyrgard.hexScape.model.marker.MarkerDefinition; import fr.lyrgard.hexScape.model.marker.MarkerInstance; import fr.lyrgard.hexScape.model.piece.PieceInstance; import fr.lyrgard.hexScape.model.player.Player; import fr.lyrgard.hexScape.model.player.User; import fr.lyrgard.hexScape.service.CardService; import fr.lyrgard.hexScape.service.DiceService; import fr.lyrgard.hexScape.service.MarkerService; public class RightPanel extends JPanel { private static final long serialVersionUID = -8890928527786697273L; private ChatPanel chatPanel; private DiceTabbedPane dicePanel = new DiceTabbedPane(); public RightPanel() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); chatPanel = new ChatPanel(null, null); add(chatPanel); add(dicePanel); GuiMessageBus.register(this); } @Subscribe public void onPiecePlaced(PiecePlacedMessage message) { // String playerId = message.getPlayerId(); // String modelId = message.getModelId(); // // Player player = Universe.getInstance().getPlayersByIds().get(playerId); // if (player != null) { // chatPanel.addPlayerAction(player, player.getDisplayName() + " added " + modelId + " to the map"); // } } @Subscribe public void onPieceMoved(PieceMovedMessage message) { // String playerId = message.getPlayerId(); // String pieceId = message.getPieceId(); // // Player player = Universe.getInstance().getPlayersByIds().get(playerId); // if (player != null) { // for (Player owner : Universe.getInstance().getPlayersByIds().values()) { // if (owner.getPiecesById().containsKey(pieceId)) { // PieceInstance piece = owner.getPiecesById().get(pieceId); // if (piece != null) { // chatPanel.addPlayerAction(player, player.getDisplayName() + " moved " + piece.getModelId()); // } // } // } // } } @Subscribe public void onPieceRemoved(PieceRemovedMessage message) { String playerId = message.getPlayerId(); String pieceId = message.getPieceId(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); if (player != null) { for (Player owner : game.getPlayers()) { if (owner.getArmy() != null) { for (CardInstance card : player.getArmy().getCards()) { PieceInstance piece = card.getPiece(pieceId); if (piece != null) { chatPanel.addPlayerAction(player, player.getDisplayName() + " removed " + piece.getModelId() + " from the map"); return; } } } } } } } @Subscribe public void onMapLoaded(MapLoadedMessage message) { Map map = message.getMap(); chatPanel.addAction("map " + map.getName() + " has been loaded"); } @Subscribe public void onArmyLoaded(ArmyLoadedMessage message) { String playerId = message.getPlayerId(); Army army = message.getArmy(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); if (player != null) { chatPanel.addPlayerAction(player, "player " + player.getName() + " loaded army " + army.getName()); } } } @Subscribe public void onDiceThrown(DiceThrownMessage message) { String diceTypeId = message.getDiceTypeId(); List<Integer> results = message.getResults(); String playerId = message.getPlayerId(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); if (player != null) { DiceType diceType = DiceService.getInstance().getDiceType(diceTypeId); List<DiceFace> faces = new ArrayList<>(); for (Integer result : results) { DiceFace face = diceType.getFaces().get(result); if (face != null) { faces.add(face); } } if (faces.size() == results.size()) { chatPanel.addDiceRoll(player, diceType, faces); } else { // TODO error } } } } @Subscribe public void onMarkerPlaced(MarkerPlacedMessage message) { String playerId = message.getPlayerId(); String cardId = message.getCardId(); String markerTypeId = message.getMarkerTypeId(); int number = message.getNumber(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); MarkerDefinition markerDefinition = MarkerService.getInstance().getMarkersByIds().get(markerTypeId); if (game != null && markerDefinition != null) { CardInstance card = game.getCard(cardId); Player player = game.getPlayer(playerId); if (card != null && player != null) { CardType cardType = CardService.getInstance().getCardInventory().getCardsById().get(card.getCardTypeId()); if (card != null) { chatPanel.addPlayerAction(player, "player " + player.getDisplayName() + " added " + number + " " + markerDefinition.getName() + " to " + cardType.getName()); return; } } } } @Subscribe public void onMarkerRemoved(MarkerRemovedMessage message) { String playerId = message.getPlayerId(); String cardId = message.getCardId(); String markerId = message.getMarkerId(); int number = message.getNumber(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); if (player != null) { for (Player owner : game.getPlayers()) { if (owner.getArmy() != null) { CardInstance card = owner.getArmy().getCard(cardId); CardType cardType = CardService.getInstance().getCardInventory().getCardsById().get(card.getCardTypeId()); if (card != null) { for (MarkerInstance marker : card.getMarkers()) { if (marker.getId().equals(markerId)) { MarkerDefinition markerDefinition = MarkerService.getInstance().getMarkersByIds().get(marker.getMarkerDefinitionId()); if (markerDefinition != null) { chatPanel.addPlayerAction(player, "player " + player.getDisplayName() + " removed " + number + " " + markerDefinition.getName() + " from " + cardType.getName()); return; } } } } } } } } } @Subscribe public void onMarkerOnCardRevealed(MarkerRevealedMessage message) { String playerId = message.getPlayerId(); String cardId = message.getCardId(); String markerId = message.getMarkerId(); Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); if (player != null) { for (Player owner : game.getPlayers()) { if (owner.getArmy() != null) { CardInstance card = owner.getArmy().getCard(cardId); CardType cardType = CardService.getInstance().getCardInventory().getCardsById().get(card.getCardTypeId()); if (card != null) { for (MarkerInstance marker : card.getMarkers()) { if (marker.getId().equals(markerId)) { MarkerDefinition markerDefinition = MarkerService.getInstance().getMarkersByIds().get(marker.getMarkerDefinitionId()); if (markerDefinition != null) { chatPanel.addPlayerAction(player, "player " + player.getDisplayName() + " revealed " + markerDefinition.getName() + " on " + cardType.getName()); return; } } } } } } } } } @Subscribe public void onChatMessage(GameMessagePostedMessage message) { Game game = CurrentUserInfo.getInstance().getGame(); String userId = message.getUserId(); String messageContent = message.getMessage(); User user = Universe.getInstance().getUsersByIds().get(userId); if (game != null && user != null) { Player player = game.getPlayerByUserId(userId); if (player != null) { chatPanel.addMessage(player, messageContent); } else { chatPanel.addMessage(user, messageContent); } } } @Subscribe public void onGameStarted(GameStartedMessage message) { final String gameId = message.getGameId(); EventQueue.invokeLater(new Runnable() { public void run() { if (gameId != null && gameId.equals(CurrentUserInfo.getInstance().getGameId())) { Game game = CurrentUserInfo.getInstance().getGame(); if (game != null) { chatPanel.setGameId(gameId); dicePanel.setVisible(true); } } } }); } @Subscribe public void onGameObserved(GameObservedMessage message) { final String gameId = message.getGameId(); EventQueue.invokeLater(new Runnable() { public void run() { if (gameId != null && gameId.equals(CurrentUserInfo.getInstance().getGameId())) { Game game = CurrentUserInfo.getInstance().getGame(); if (game != null) { chatPanel.setGameId(gameId); dicePanel.setVisible(false); } } } }); } @Subscribe public void onGameLeft(GameLeftMessage message) { final String playerId = message.getPlayerId(); final String gameId = message.getGameId(); EventQueue.invokeLater(new Runnable() { public void run() { if (CurrentUserInfo.getInstance().getGameId() == null) { // The current user left the game chatPanel.clearText(); } else { if (playerId != null && gameId != null && gameId.equals(CurrentUserInfo.getInstance().getGameId())) { Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); chatPanel.addPlayerAction(player, player.getDisplayName() + " left the game"); } } } } }); } @Subscribe public void onGamejoined(GameJoinedMessage message) { final String playerId = message.getPlayerId(); final String gameId = message.getGame().getId(); EventQueue.invokeLater(new Runnable() { public void run() { if (gameId != null && gameId.equals(CurrentUserInfo.getInstance().getGameId())) { Game game = Universe.getInstance().getGamesByGameIds().get(CurrentUserInfo.getInstance().getGameId()); if (game != null) { Player player = game.getPlayer(playerId); chatPanel.addPlayerAction(player, player.getDisplayName() + " joined the game"); } } } }); } }