package fr.lyrgard.hexScape.gui.desktop.view.room; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.HexScapeCore; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.gui.desktop.HexScapeFrame; import fr.lyrgard.hexScape.gui.desktop.action.DisconnectAction; import fr.lyrgard.hexScape.gui.desktop.message.GameSelectedMessage; import fr.lyrgard.hexScape.gui.desktop.navigation.ViewEnum; import fr.lyrgard.hexScape.gui.desktop.view.AbstractView; import fr.lyrgard.hexScape.gui.desktop.view.common.HexaFont; import fr.lyrgard.hexScape.gui.desktop.view.common.chat.ChatPanel; import fr.lyrgard.hexScape.gui.desktop.view.room.games.GameListPanel; import fr.lyrgard.hexScape.gui.desktop.view.room.games.SelectedGamePanel; import fr.lyrgard.hexScape.gui.desktop.view.room.users.UserList; import fr.lyrgard.hexScape.gui.desktop.view.room.users.UserListModel; import fr.lyrgard.hexScape.message.DisconnectedFromServerMessage; import fr.lyrgard.hexScape.message.GameCreatedMessage; import fr.lyrgard.hexScape.message.GameJoinedMessage; import fr.lyrgard.hexScape.message.GameLeftMessage; import fr.lyrgard.hexScape.message.GameStartedMessage; import fr.lyrgard.hexScape.message.RoomMessagePostedMessage; import fr.lyrgard.hexScape.message.UserJoinedRoomMessage; import fr.lyrgard.hexScape.message.RoomJoinedMessage; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.Universe; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.player.User; import fr.lyrgard.hexScape.model.room.Room; public class RoomView extends AbstractView { private static final long serialVersionUID = 2920503440331541048L; private JLabel roomTitle = new JLabel(); private UserListModel userListModel; private ChatPanel chatPanel; private JPanel centerPanel; private SelectedGamePanel selectedGamePanel = new SelectedGamePanel(); public RoomView() { setLayout(new BorderLayout()); roomTitle.setFont(HexaFont.getFont().deriveFont(40f)); JPanel topRow = new JPanel(); topRow.add(roomTitle); topRow.add(new JButton(new DisconnectAction())); add(topRow, BorderLayout.PAGE_START); add(new GameListPanel(), BorderLayout.LINE_START); JPanel playersPanel = new JPanel(new BorderLayout()); playersPanel.setPreferredSize(new Dimension(200, 400)); JLabel playersTitle = new JLabel("PLAYERS"); playersTitle.setFont(HexaFont.getFont().deriveFont(35f)); playersTitle.setHorizontalAlignment(SwingConstants.CENTER); playersPanel.add(playersTitle, BorderLayout.PAGE_START); userListModel = new UserListModel(); UserList userList = new UserList(userListModel); userList.setPreferredSize(new Dimension(200, 400)); playersPanel.add(userList, BorderLayout.CENTER); add(playersPanel, BorderLayout.LINE_END); centerPanel = new JPanel(new BorderLayout()); chatPanel = new ChatPanel(null, null); centerPanel.add(chatPanel, BorderLayout.CENTER); selectedGamePanel.setVisible(false); centerPanel.add(selectedGamePanel, BorderLayout.PAGE_END); add(centerPanel, BorderLayout.CENTER); ActivateOnlineService.getInstance().register(this); } public void setRoom(Room room) { chatPanel.clearText(); chatPanel.setRoomId(room.getId()); roomTitle.setText(room.getName()); userListModel.setUsers(room.getUsers()); chatPanel.addAction("Room " + room.getName() + " joined."); } // TODO // @Subscribe public void onRoomContentReceived(RoomContentReceivedEvent event) { // room = event.getRoom(); // roomTitle.setText(room.getName()); // playerListModel.setPlayers(room.getPlayers()); // chatPanel.addAction("Room " + room.getName() + " joined."); // // } // @Subscribe public void onRoomJoined(RoomJoinedMessage message) { final Room room = message.getRoom(); EventQueue.invokeLater(new Runnable() { public void run() { RoomView.this.setRoom(room); HexScapeFrame.getInstance().showView(ViewEnum.ROOM); } }); } @Subscribe public void onRoomMessageReceived(RoomMessagePostedMessage message) { String userId = message.getUserId(); String roomId = message.getRoomId(); final String messageContent = message.getMessage(); if (CurrentUserInfo.getInstance().getRoomId().equals(roomId)) { final User user = Universe.getInstance().getUsersByIds().get(userId); if (user != null) { EventQueue.invokeLater(new Runnable() { public void run() { chatPanel.addMessage(user, messageContent); } }); } } } @Subscribe public void onPlayerJoined(UserJoinedRoomMessage message) { String userId = message.getUserId(); final User user = Universe.getInstance().getUsersByIds().get(userId); EventQueue.invokeLater(new Runnable() { public void run() { if (user != null) { userListModel.addUser(user); chatPanel.addAction("player " + user.getName() + " joined the room"); } } }); } @Subscribe public void onPlayerLeftRoom(DisconnectedFromServerMessage message) { final String userId = message.getUserId(); if (!CurrentUserInfo.getInstance().getId().equals(userId)) { EventQueue.invokeLater(new Runnable() { public void run() { User user = Universe.getInstance().getUsersByIds().get(userId); if (user != null) { chatPanel.addAction("player " + user.getName() + " left the room"); userListModel.removeUser(user); } } }); } } @Subscribe public void onGameCreated(GameCreatedMessage message) { final String userId = message.getUserId(); final Game game = message.getGame(); if (HexScapeCore.getInstance().isOnline()) { if (game != null) { EventQueue.invokeLater(new Runnable() { public void run() { if (CurrentUserInfo.getInstance().getId().equals(userId)) { GuiMessageBus.post(new GameSelectedMessage(game)); selectedGamePanel.setVisible(true); } User user = Universe.getInstance().getUsersByIds().get(userId); if (user != null) { chatPanel.addAction("player " + user.getName() + " created game " + game.getName()); } userListModel.redraw(); } }); } } } @Subscribe public void gameJoined(GameJoinedMessage message) { final Game game = message.getGame(); final String userId = message.getUserId(); EventQueue.invokeLater(new Runnable() { public void run() { if (!userId.equals(CurrentUserInfo.getInstance().getId())) { User user = Universe.getInstance().getUsersByIds().get(userId); if (game != null) { chatPanel.addAction("player " + user.getName() + " joined game " + game.getName()); } } userListModel.redraw(); } }); } @Subscribe public void onGameLeft(GameLeftMessage message) { EventQueue.invokeLater(new Runnable() { public void run() { userListModel.redraw(); } }); } @Subscribe public void onGameStarted(GameStartedMessage message) { final String gameId = message.getGameId(); EventQueue.invokeLater(new Runnable() { public void run() { Game game = Universe.getInstance().getGamesByGameIds().get(gameId); if (game != null) { chatPanel.addAction("game " + game.getName() + " started"); } userListModel.redraw(); } }); } @Override public void refresh() { String roomId = CurrentUserInfo.getInstance().getRoomId(); Room room = Universe.getInstance().getRoomsByRoomIds().get(roomId); if (room != null) { } } }