package fr.lyrgard.hexScape.listener;
import java.io.File;
import java.util.concurrent.Callable;
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.message.DisplayMapMessage;
import fr.lyrgard.hexScape.message.LoadMapMessage;
import fr.lyrgard.hexScape.message.MapLoadedMessage;
import fr.lyrgard.hexScape.model.CurrentUserInfo;
import fr.lyrgard.hexScape.model.Universe;
import fr.lyrgard.hexScape.model.card.CardInstance;
import fr.lyrgard.hexScape.model.game.Game;
import fr.lyrgard.hexScape.model.piece.PieceInstance;
import fr.lyrgard.hexScape.model.player.Player;
import fr.lyrgard.hexScape.service.MapManager;
import fr.lyrgard.hexScape.service.PieceManager;
public class MapMessageListener extends AbstractMessageListener {
private static MapMessageListener instance;
public static void start() {
if (instance == null) {
instance = new MapMessageListener();
CoreMessageBus.register(instance);
}
}
private MapMessageListener() {
}
@Subscribe public void onLoadMapMessage(LoadMapMessage message) {
final File file = message.getMapFile();
MapManager mapManager = MapManager.fromFile(file);
if (mapManager != null) {
CoreMessageBus.post(new MapLoadedMessage(CurrentUserInfo.getInstance().getId(), mapManager.getMap()));
}
}
@Subscribe public void onMapLoaded(MapLoadedMessage message) {
GuiMessageBus.post(message);
}
@Subscribe public void onDisplayMap(DisplayMapMessage message) {
String gameId = message.getGameId();
final boolean displayFigures = message.isDisplayFigures();
final Game game = Universe.getInstance().getGamesByGameIds().get(gameId);
if (game != null && game.getMap() != null) {
final MapManager mapManager = new MapManager(game.getMap());
HexScapeCore.getInstance().getHexScapeJme3Application().enqueue(new Callable<Void>() {
public Void call() throws Exception {
HexScapeCore.getInstance().getHexScapeJme3Application().setScene(mapManager);
HexScapeCore.getInstance().setMapManager(mapManager);
if (displayFigures) {
for (Player player : game.getPlayers()) {
if (player.getArmy() != null) {
for (CardInstance card : player.getArmy().getCards()) {
for (PieceInstance piece : card.getPieces()) {
final PieceManager pieceManager = new PieceManager(piece);
pieceManager.rotate(piece.getDirection());
mapManager.placePiece(pieceManager, piece.getX(), piece.getY(), piece.getZ(), piece.getDirection());
}
}
}
}
}
return null;
}
});
}
}
}