package fr.lyrgard.hexScape.gui.desktop.view.game;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.EventQueue;
import net.miginfocom.swing.MigLayout;
import com.google.common.eventbus.Subscribe;
import fr.lyrgard.hexScape.HexScapeCore;
import fr.lyrgard.hexScape.bus.CoreMessageBus;
import fr.lyrgard.hexScape.bus.GuiMessageBus;
import fr.lyrgard.hexScape.gui.desktop.HexScapeFrame;
import fr.lyrgard.hexScape.gui.desktop.navigation.ViewEnum;
import fr.lyrgard.hexScape.gui.desktop.view.AbstractView;
import fr.lyrgard.hexScape.gui.desktop.view.common.View3d;
import fr.lyrgard.hexScape.gui.desktop.view.game.leftPanel.LeftPanel;
import fr.lyrgard.hexScape.gui.desktop.view.game.rightPanel.RightPanel;
import fr.lyrgard.hexScape.message.DisplayMapMessage;
import fr.lyrgard.hexScape.message.GameLeftMessage;
import fr.lyrgard.hexScape.message.GameObservedMessage;
import fr.lyrgard.hexScape.message.GameStartedMessage;
import fr.lyrgard.hexScape.model.CurrentUserInfo;
public class GameView extends AbstractView {
private static final long serialVersionUID = 2076159331208010791L;
//private JButton leaveGameButton;
private String currentGameId;
public GameView(final View3d view3d) {
// setLayout(new BorderLayout());
// final JPanel leftPanel = new LeftPanel();
// //leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.Y_AXIS));
// leftPanel.setMaximumSize(new Dimension(180, Integer.MAX_VALUE));
this.setLayout(new MigLayout(
"wrap", // Layout Constraints
"[210:210:][][250:250:]", // Column constraints
"[40:40:][]" // Row constraints
));
add(new LeftPanel(), "span 1 2, grow");
add(new ActionMenu());
add(new RightPanel(), "span 1 2, grow");
GuiMessageBus.register(this);
}
@Subscribe public void onGameStarted(GameStartedMessage message) {
final String gameId = message.getGameId();
if (gameId.equals(CurrentUserInfo.getInstance().getGameId())) {
this.currentGameId = gameId;
DisplayMapMessage displayMap = new DisplayMapMessage(gameId, true);
CoreMessageBus.post(displayMap);
EventQueue.invokeLater(new Runnable() {
public void run() {
//leaveGameButton.setAction(new LeaveGameAction(gameId));
HexScapeFrame.getInstance().showView(ViewEnum.GAME);
}
});
}
}
@Subscribe public void onGameObserved(GameObservedMessage message) {
final String gameId = message.getGameId();
if (gameId.equals(CurrentUserInfo.getInstance().getGameId())) {
this.currentGameId = gameId;
DisplayMapMessage displayMap = new DisplayMapMessage(gameId, true);
CoreMessageBus.post(displayMap);
EventQueue.invokeLater(new Runnable() {
public void run() {
//leaveGameButton.setAction(new LeaveGameAction(gameId));
HexScapeFrame.getInstance().showView(ViewEnum.GAME);
}
});
}
}
@Subscribe public void onGameLeft(GameLeftMessage message) {
String playerId = message.getPlayerId();
String gameId = message.getGameId();
if (gameId.equals(currentGameId) && CurrentUserInfo.getInstance().getPlayer() == null) {
// Current game && the player is null == the current user left the game
EventQueue.invokeLater(new Runnable() {
public void run() {
if (HexScapeCore.getInstance().isOnline()) {
HexScapeFrame.getInstance().showView(ViewEnum.ROOM);
} else {
HexScapeFrame.getInstance().showView(ViewEnum.HOME);
}
}
});
}
}
@Override
public void refresh() {
Component view3d = HexScapeFrame.getInstance().getView3d().getComponent();
view3d.setSize(new Dimension(50, 50));
//view3d.setPreferredSize(new Dimension(200, 200));
add(view3d, "cell 1 1, grow, push");
System.out.println("GAME VIEW TAKES 3D");
}
}