2014-11-07 03:26:02 -08:00
|
|
|
package magic.game.state;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
import magic.ai.MagicAI;
|
|
|
|
import magic.ai.MagicAIImpl;
|
|
|
|
import magic.model.MagicDeckProfile;
|
|
|
|
import magic.model.MagicDuel;
|
|
|
|
import magic.model.MagicGame;
|
|
|
|
import magic.model.MagicPlayer;
|
|
|
|
import magic.model.MagicPlayerDefinition;
|
|
|
|
import magic.model.phase.MagicMainPhase;
|
2015-04-04 06:22:07 -07:00
|
|
|
import magic.model.player.AiPlayer;
|
|
|
|
import magic.model.player.HumanPlayer;
|
|
|
|
import magic.model.player.PlayerProfile;
|
2014-11-07 03:26:02 -08:00
|
|
|
import magic.test.TestGameBuilder;
|
|
|
|
|
|
|
|
public final class GameLoader {
|
|
|
|
private GameLoader() {}
|
|
|
|
|
|
|
|
public static MagicGame loadSavedGame(final String gameFile) {
|
|
|
|
final GameState gameState = GameStateFileReader.loadGameStateFromFile(gameFile);
|
|
|
|
final MagicDuel duel = getDuelState(gameState);
|
|
|
|
final MagicGame game = getGameState(gameState, duel);
|
|
|
|
return game;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static MagicGame getGameState(final GameState gameState, final MagicDuel duel) {
|
2014-11-29 04:58:07 -08:00
|
|
|
final MagicGame game = duel.nextGame();
|
2014-11-07 03:26:02 -08:00
|
|
|
game.setPhase(MagicMainPhase.getFirstInstance());
|
|
|
|
setPlayerGameState(game.getPlayer(0), gameState.getPlayer(0), game);
|
|
|
|
setPlayerGameState(game.getPlayer(1), gameState.getPlayer(1), game);
|
|
|
|
return game;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static MagicDuel getDuelState(final GameState gameState) {
|
|
|
|
final MagicDuel duel = new MagicDuel();
|
2015-04-04 06:22:07 -07:00
|
|
|
|
|
|
|
PlayerProfile pp1;
|
2014-11-07 03:26:02 -08:00
|
|
|
if (gameState.getPlayer(0).isAi()) {
|
2015-04-04 06:22:07 -07:00
|
|
|
final MagicAIImpl ai = MagicAIImpl.valueOf(gameState.getPlayer(0).getAiType());
|
|
|
|
final AiPlayer ap = new AiPlayer();
|
|
|
|
ap.setPlayerName(gameState.getPlayer(0).getName());
|
|
|
|
ap.setAiType(ai);
|
|
|
|
ap.setAiLevel(gameState.getDifficulty());
|
|
|
|
pp1 = ap;
|
|
|
|
} else {
|
|
|
|
final HumanPlayer hp = new HumanPlayer();
|
|
|
|
hp.setPlayerName(gameState.getPlayer(0).getName());
|
|
|
|
pp1 = hp;
|
2014-11-07 03:26:02 -08:00
|
|
|
}
|
2015-04-04 06:22:07 -07:00
|
|
|
|
|
|
|
final MagicDeckProfile deckProfile1 = new MagicDeckProfile(gameState.getPlayer(0).getDeckProfileColors());
|
|
|
|
final MagicPlayerDefinition playerDef1 = new MagicPlayerDefinition(pp1, deckProfile1);
|
|
|
|
|
|
|
|
PlayerProfile pp2;
|
2014-11-07 03:26:02 -08:00
|
|
|
if (gameState.getPlayer(1).isAi()) {
|
2015-04-04 06:22:07 -07:00
|
|
|
final MagicAIImpl ai = MagicAIImpl.valueOf(gameState.getPlayer(1).getAiType());
|
|
|
|
final AiPlayer ap = new AiPlayer();
|
|
|
|
ap.setPlayerName(gameState.getPlayer(1).getName());
|
|
|
|
ap.setAiType(ai);
|
|
|
|
ap.setAiLevel(gameState.getDifficulty());
|
|
|
|
pp2 = ap;
|
|
|
|
} else {
|
|
|
|
final HumanPlayer hp = new HumanPlayer();
|
|
|
|
hp.setPlayerName(gameState.getPlayer(1).getName());
|
|
|
|
pp2 = hp;
|
2014-11-07 03:26:02 -08:00
|
|
|
}
|
2015-04-04 06:22:07 -07:00
|
|
|
|
|
|
|
final MagicDeckProfile deckProfile2 = new MagicDeckProfile(gameState.getPlayer(1).getDeckProfileColors());
|
|
|
|
final MagicPlayerDefinition playerDef2 = new MagicPlayerDefinition(pp2, deckProfile2);
|
|
|
|
|
|
|
|
duel.setPlayers(new MagicPlayerDefinition[]{playerDef1, playerDef2});
|
|
|
|
duel.setStartPlayer(gameState.getStartPlayerIndex());
|
2014-11-07 03:26:02 -08:00
|
|
|
return duel;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void setPlayerGameState(
|
|
|
|
final MagicPlayer player,
|
|
|
|
final GamePlayerState playerState,
|
|
|
|
final MagicGame game) {
|
|
|
|
|
|
|
|
player.setLife(playerState.getLife());
|
|
|
|
|
|
|
|
// Library
|
|
|
|
final List<GameCardState> library = playerState.getLibrary();
|
|
|
|
for (GameCardState card : library) {
|
|
|
|
TestGameBuilder.addToLibrary(player, card.getCardName(), card.getQuantity());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Battlefield
|
|
|
|
final List<GameCardState> permanents = playerState.getPermanents();
|
|
|
|
for (GameCardState permanent : permanents) {
|
|
|
|
TestGameBuilder.createPermanent(game, player, permanent.getCardName(), permanent.isTapped(), permanent.getQuantity());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Hand
|
|
|
|
final List<GameCardState> hand = playerState.getHand();
|
|
|
|
for (GameCardState card : hand) {
|
|
|
|
TestGameBuilder.addToHand(player, card.getCardName(), card.getQuantity());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Graveyard
|
|
|
|
final List<GameCardState> graveyard = playerState.getGraveyard();
|
|
|
|
for (GameCardState card : graveyard) {
|
|
|
|
TestGameBuilder.addToGraveyard(player, card.getCardName(), card.getQuantity());
|
|
|
|
}
|
|
|
|
|
|
|
|
// Exiled
|
|
|
|
final List<GameCardState> exiled = playerState.getExiled();
|
|
|
|
for (GameCardState card : exiled) {
|
|
|
|
TestGameBuilder.addToExile(player, card.getCardName(), card.getQuantity());
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|