95 lines
3.4 KiB
Java
95 lines
3.4 KiB
Java
package magic.game.state;
|
|
|
|
import java.io.File;
|
|
import java.util.List;
|
|
|
|
import magic.ai.MagicAIImpl;
|
|
import magic.model.DuelPlayerConfig;
|
|
import magic.model.MagicDeckProfile;
|
|
import magic.model.MagicDuel;
|
|
import magic.model.MagicGame;
|
|
import magic.model.MagicPlayer;
|
|
import magic.model.phase.MagicMainPhase;
|
|
import magic.model.player.AiProfile;
|
|
import magic.model.player.HumanProfile;
|
|
import magic.model.player.PlayerProfile;
|
|
import magic.test.TestGameBuilder;
|
|
|
|
public final class GameLoader {
|
|
private GameLoader() {}
|
|
|
|
public static MagicGame loadSavedGame(final File gameFile) {
|
|
final GameState gameState = GameStateFileReader.loadGameStateFromFile(gameFile);
|
|
final MagicDuel duel = getDuelState(gameState);
|
|
return getGameState(gameState, duel);
|
|
}
|
|
|
|
private static MagicGame getGameState(final GameState gameState, final MagicDuel duel) {
|
|
final MagicGame game = duel.nextGame();
|
|
game.setPhase(MagicMainPhase.getFirstInstance());
|
|
setPlayerGameState(game.getPlayer(0), gameState.getPlayer(0));
|
|
setPlayerGameState(game.getPlayer(1), gameState.getPlayer(1));
|
|
return game;
|
|
}
|
|
|
|
private static MagicDuel getDuelState(final GameState gameState) {
|
|
final MagicDuel duel = new MagicDuel();
|
|
final DuelPlayerConfig[] playerDefs = new DuelPlayerConfig[2];
|
|
|
|
for (int i = 0; i < playerDefs.length; i++) {
|
|
final PlayerProfile pp = gameState.getPlayer(i).isAi() ?
|
|
AiProfile.create(
|
|
gameState.getPlayer(i).getName(),
|
|
MagicAIImpl.valueOf(gameState.getPlayer(i).getAiType()),
|
|
gameState.getDifficulty()
|
|
) :
|
|
HumanProfile.create(
|
|
gameState.getPlayer(i).getName()
|
|
);
|
|
final MagicDeckProfile deckProfile = new MagicDeckProfile(gameState.getPlayer(i).getDeckProfileColors());
|
|
playerDefs[i] = new DuelPlayerConfig(pp, deckProfile);
|
|
}
|
|
|
|
duel.setPlayers(playerDefs);
|
|
duel.setStartPlayer(gameState.getStartPlayerIndex());
|
|
return duel;
|
|
}
|
|
|
|
private static void setPlayerGameState(final MagicPlayer player, final GamePlayerState playerState) {
|
|
|
|
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(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());
|
|
}
|
|
|
|
}
|
|
|
|
}
|