Remove old implementation of game state serialization that was never used anyway

This commit is contained in:
drdev
2014-10-09 01:30:16 +00:00
parent 122e1ca75a
commit 5e22f01358
17 changed files with 54 additions and 561 deletions

3
.gitattributes vendored
View File

@@ -529,9 +529,6 @@ forge-game/src/main/java/forge/game/event/GameEventTurnPhase.java -text
forge-game/src/main/java/forge/game/event/GameEventZone.java -text forge-game/src/main/java/forge/game/event/GameEventZone.java -text
forge-game/src/main/java/forge/game/event/IGameEventVisitor.java -text forge-game/src/main/java/forge/game/event/IGameEventVisitor.java -text
forge-game/src/main/java/forge/game/event/package-info.java -text forge-game/src/main/java/forge/game/event/package-info.java -text
forge-game/src/main/java/forge/game/io/GameStateDeserializer.java -text
forge-game/src/main/java/forge/game/io/GameStateSerializer.java -text
forge-game/src/main/java/forge/game/io/IGameStateObject.java -text
forge-game/src/main/java/forge/game/keyword/Cycling.java -text forge-game/src/main/java/forge/game/keyword/Cycling.java -text
forge-game/src/main/java/forge/game/keyword/Keyword.java -text forge-game/src/main/java/forge/game/keyword/Keyword.java -text
forge-game/src/main/java/forge/game/keyword/KeywordCollection.java -text forge-game/src/main/java/forge/game/keyword/KeywordCollection.java -text

View File

@@ -42,9 +42,6 @@ import forge.game.card.CardPredicates;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.event.GameEvent; import forge.game.event.GameEvent;
import forge.game.event.GameEventGameOutcome; import forge.game.event.GameEventGameOutcome;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.phase.EndOfTurn; import forge.game.phase.EndOfTurn;
import forge.game.phase.Phase; import forge.game.phase.Phase;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
@@ -67,7 +64,7 @@ import forge.util.Aggregates;
/** /**
* Represents the state of a <i>single game</i>, a new instance is created for each game. * Represents the state of a <i>single game</i>, a new instance is created for each game.
*/ */
public class Game implements IGameStateObject { public class Game {
private final GameRules rules; private final GameRules rules;
private List<Player> roIngamePlayers; private List<Player> roIngamePlayers;
private List<Player> roIngamePlayersReversed; private List<Player> roIngamePlayersReversed;
@@ -102,57 +99,6 @@ public class Game implements IGameStateObject {
private final GameView view = new GameView(); private final GameView view = new GameView();
@Override
public void loadState(GameStateDeserializer gsd) {
gsd.readObject(rules);
gsd.readObject(cleanup);
gsd.readObject(endOfTurn);
gsd.readObject(endOfCombat);
gsd.readObject(untap);
gsd.readObject(upkeep);
gsd.readObject(stack);
gsd.readObject(phaseHandler);
gsd.readObject(staticEffects);
gsd.readObject(triggerHandler);
gsd.readObject(gameLog);
gsd.readObject(stackZone);
turnOrder = Direction.valueOf(gsd.readString());
timestamp = gsd.readLong();
age = GameStage.valueOf(gsd.readString());
outcome = (GameOutcome)gsd.readObject();
gsd.readPlayerList(allPlayers);
gsd.readPlayerList(ingamePlayers);
}
@Override
public void saveState(GameStateSerializer gss) {
gss.write(rules);
gss.write(cleanup);
gss.write(endOfTurn);
gss.write(endOfCombat);
gss.write(untap);
gss.write(upkeep);
gss.write(stack);
gss.write(phaseHandler);
gss.write(staticEffects);
gss.write(triggerHandler);
gss.write(replacementHandler);
gss.write(gameLog);
gss.write(stackZone);
gss.write(turnOrder.name());
gss.write(timestamp);
gss.write(age.name());
gss.write(outcome);
gss.writePlayerList(allPlayers);
gss.writePlayerList(ingamePlayers);
roIngamePlayers = Collections.unmodifiableList(ingamePlayers);
roIngamePlayersReversed = Lists.reverse(roIngamePlayers); // reverse of unmodifiable list is also unmodifiable
}
/**
* Constructor.
* @param match0
*/
public Game(List<RegisteredPlayer> players0, GameRules rules0, Match match0) { /* no more zones to map here */ public Game(List<RegisteredPlayer> players0, GameRules rules0, Match match0) { /* no more zones to map here */
rules = rules0; rules = rules0;
match = match0; match = match0;

View File

@@ -15,13 +15,9 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package forge.game; package forge.game;
import forge.game.event.IGameEventVisitor; import forge.game.event.IGameEventVisitor;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -34,10 +30,11 @@ import java.util.Observable;
* @author Forge * @author Forge
* @version $Id: GameLog.java 12297 2011-11-28 19:56:47Z slapshot5 $ * @version $Id: GameLog.java 12297 2011-11-28 19:56:47Z slapshot5 $
*/ */
public class GameLog extends Observable implements IGameStateObject { public class GameLog extends Observable {
private List<GameLogEntry> log = new ArrayList<GameLogEntry>(); private List<GameLogEntry> log = new ArrayList<GameLogEntry>();
private GameLogFormatter formatter = new GameLogFormatter(this); private GameLogFormatter formatter = new GameLogFormatter(this);
/** Logging level: /** Logging level:
* 0 - Turn * 0 - Turn
* 2 - Stack items * 2 - Stack items
@@ -46,30 +43,9 @@ public class GameLog extends Observable implements IGameStateObject {
* 6 - All Phase information * 6 - All Phase information
*/ */
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
gss.writeList(log);
}
/**
* Instantiates a new game log.
*/
public GameLog() { public GameLog() {
} }
/**
* Adds the.
*
* @param type the type
* @param message the message
* @param type the level
*/
public void add(final GameLogEntryType type, final String message) { public void add(final GameLogEntryType type, final String message) {
add(new GameLogEntry(type, message)); add(new GameLogEntry(type, message));
} }

View File

@@ -1,10 +1,7 @@
package forge.game; package forge.game;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
public class GameLogEntry implements IGameStateObject { public class GameLogEntry {
public final String message; public final String message;
public final GameLogEntryType type; public final GameLogEntryType type;
// might add here date and some other fields // might add here date and some other fields
@@ -19,16 +16,4 @@ public class GameLogEntry implements IGameStateObject {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return type.getCaption() + ": " + message; return type.getCaption() + ": " + message;
} }
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
gss.write(type.name());
gss.write(message);
}
} }

View File

@@ -18,9 +18,6 @@
package forge.game; package forge.game;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerOutcome; import forge.game.player.PlayerOutcome;
import forge.game.player.PlayerStatistics; import forge.game.player.PlayerStatistics;
@@ -43,7 +40,7 @@ import java.util.Map.Entry;
// This class might be divided in two parts: the very summary (immutable with // This class might be divided in two parts: the very summary (immutable with
// only getters) and // only getters) and
// GameObserver class - who should be notified of any considerable ingame event // GameObserver class - who should be notified of any considerable ingame event
public final class GameOutcome implements Iterable<Pair<LobbyPlayer, PlayerStatistics>>, IGameStateObject { public final class GameOutcome implements Iterable<Pair<LobbyPlayer, PlayerStatistics>> {
public static class AnteResult { public static class AnteResult {
public final List<PaperCard> lostCards; public final List<PaperCard> lostCards;
public final List<PaperCard> wonCards; public final List<PaperCard> wonCards;
@@ -79,20 +76,6 @@ public final class GameOutcome implements Iterable<Pair<LobbyPlayer, PlayerStati
public final Map<Player, AnteResult> anteResult = new TreeMap<>(); public final Map<Player, AnteResult> anteResult = new TreeMap<>();
private GameEndReason winCondition; private GameEndReason winCondition;
@Override
public void loadState(GameStateDeserializer gsd) {
lastTurnNumber = gsd.readInt();
lifeDelta = gsd.readInt();
winCondition = GameEndReason.valueOf(gsd.readString());
}
@Override
public void saveState(GameStateSerializer gss) {
gss.write(lastTurnNumber);
gss.write(lifeDelta);
gss.write(winCondition.name());
}
public GameOutcome(GameEndReason reason, final Iterable<Player> list) { public GameOutcome(GameEndReason reason, final Iterable<Player> list) {
winCondition = reason; winCondition = reason;
players = list; players = list;

View File

@@ -3,11 +3,7 @@ package forge.game;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Set; import java.util.Set;
import forge.game.io.GameStateDeserializer; public class GameRules {
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
public class GameRules implements IGameStateObject {
private GameType gameType; private GameType gameType;
private boolean manaBurn; private boolean manaBurn;
private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG
@@ -19,41 +15,6 @@ public class GameRules implements IGameStateObject {
// it's a preference, not rule... but I could hardly find a better place for it // it's a preference, not rule... but I could hardly find a better place for it
public boolean canCloneUseTargetsImage; public boolean canCloneUseTargetsImage;
@Override
public void loadState(GameStateDeserializer gsd) {
gameType = GameType.valueOf(gsd.readString());
manaBurn = gsd.readBoolean();
poisonCountersToLose = gsd.readInt();
gamesPerMatch = gsd.readInt();
gamesToWinMatch = gsd.readInt();
playForAnte = gsd.readBoolean();
matchAnteRarity = gsd.readBoolean();
canCloneUseTargetsImage = gsd.readBoolean();
int variantCount = gsd.readInt();
appliedVariants.clear();
for (int i = 0; i < variantCount; i++) {
appliedVariants.add(GameType.valueOf(gsd.readString()));
}
}
@Override
public void saveState(GameStateSerializer gss) {
gss.write(gameType.name());
gss.write(manaBurn);
gss.write(poisonCountersToLose);
gss.write(gamesPerMatch);
gss.write(gamesToWinMatch);
gss.write(playForAnte);
gss.write(matchAnteRarity);
gss.write(canCloneUseTargetsImage);
gss.write(appliedVariants.size());
for (GameType variant : appliedVariants) {
gss.write(variant.name());
}
}
public GameRules(GameType type) { public GameRules(GameType type) {
this.gameType = type; this.gameType = type;

View File

@@ -47,4 +47,21 @@ public class GameView {
CardView.getCollection(blockers)); CardView.getCollection(blockers));
} }
} }
public void serialize() {
/*try {
GameStateSerializer serializer = new GameStateSerializer(filename);
game.saveState(serializer);
serializer.writeEndOfFile();
serializer.bw.close();
}
catch (Exception e) {
e.printStackTrace();
}*/
}
public void deserialize() {
/*GameStateDeserializer deserializer = new GameStateDeserializer();
deserializer.readObject();*/
}
} }

View File

@@ -19,9 +19,6 @@ package forge.game;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
import forge.game.spellability.AbilityStatic; import forge.game.spellability.AbilityStatic;
@@ -38,7 +35,7 @@ import java.util.*;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class StaticEffects implements IGameStateObject { public class StaticEffects {
// **************** StaticAbility system ************************** // **************** StaticAbility system **************************
private final ArrayList<StaticEffect> staticEffects = new ArrayList<StaticEffect>(); private final ArrayList<StaticEffect> staticEffects = new ArrayList<StaticEffect>();
@@ -264,20 +261,4 @@ public class StaticEffects implements IGameStateObject {
se.clearTimestamps(); se.clearTimestamps();
return affectedCards; return affectedCards;
} }
}
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
}
// **************** End StaticAbility system **************************
} // end class StaticEffects

View File

@@ -1,108 +0,0 @@
package forge.game.io;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.util.Collection;
import forge.game.Game;
import forge.game.card.Card;
import forge.game.player.Player;
import forge.item.PaperCard;
import forge.util.FileUtil;
public class GameStateDeserializer {
private int index;
private final String[] pieces;
public static void loadGameState(Game game, String filename) {
GameStateDeserializer deserializer = new GameStateDeserializer(filename);
deserializer.readObject(game);
}
private GameStateDeserializer(String filename) {
pieces = FileUtil.readFileToString(filename).split(String.valueOf(GameStateSerializer.DELIMITER));
}
public String readString() {
return pieces[index++];
}
public boolean readBoolean() {
return readString().equals("1");
}
public int readInt() {
return Integer.parseInt(readString());
}
public long readLong() {
return Long.parseLong(readString());
}
public float readFloat() {
return Float.parseFloat(readString());
}
public double readDouble() {
return Double.parseDouble(readString());
}
public IGameStateObject readObject() {
IGameStateObject obj = null;
try {
obj = (IGameStateObject)Class.forName(readString()).newInstance();
}
catch (Exception e) {
e.printStackTrace();
}
if (obj != null) {
obj.loadState(this);
}
return obj;
}
public void readObject(IGameStateObject obj) { //read into existing object
if (obj != null && obj.getClass().getName().equals(readString())) {
obj.loadState(this);
}
}
public Card readCard() {
return null;
}
public PaperCard readPaperCard() {
return null;
}
public Player readPlayer() {
return null;
}
public void readCardList(Collection<Card> value) {
if (value == null) { return; }
value.clear();
int count = readInt();
for (int i = 0; i < count; i++) {
value.add(readCard());
}
}
public void readPaperCardList(Collection<PaperCard> value) {
if (value == null) { return; }
value.clear();
int count = readInt();
for (int i = 0; i < count; i++) {
value.add(readPaperCard());
}
}
public void readPlayerList(Collection<Player> value) {
if (value == null) { return; }
value.clear();
int count = readInt();
for (int i = 0; i < count; i++) {
value.add(readPlayer());
}
}
public Object deserialize() {
ObjectInputStream ois;
try {
ois = new ObjectInputStream(new ByteArrayInputStream(readString().getBytes()));
Object obj = ois.readObject();
ois.close();
return obj;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

View File

@@ -1,126 +0,0 @@
package forge.game.io;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import forge.game.Game;
import forge.game.card.Card;
import forge.game.player.Player;
public class GameStateSerializer {
public final static char DELIMITER = (char)5;
private final Map<Integer, Card> cards = new HashMap<Integer, Card>();
private final List<Player> players = new ArrayList<Player>();
private final BufferedWriter bw;
public static void saveGameState(Game game, String filename) {
GameStateSerializer serializer = null;
try {
serializer = new GameStateSerializer(filename);
game.saveState(serializer);
serializer.writeEndOfFile();
serializer.bw.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
private GameStateSerializer(String filename) throws IOException {
bw = new BufferedWriter(new FileWriter(filename));
}
private void writeEndOfFile() {
}
public void write(String value) {
try {
bw.write(value + DELIMITER);
}
catch (Exception e) {}
}
public void write(IGameStateObject value) {
if (value == null) { return; }
write(value.getClass().getName()); //needed so state object can be initialized
value.saveState(this);
}
public void write(Card card) {
if (card == null) { return; }
int key = card.getId();
cards.put(key, card);
write(key); //only write info for each card once at end of file
}
public void write(Player player) {
if (player == null) { return; }
int key = players.indexOf(player);
if (key == -1) {
key = players.size();
players.add(player);
}
write(key); //only write info for each player once at end of file
}
public void write(boolean value) {
write(value ? "1" : "0");
}
public void write(int value) {
write(String.valueOf(value));
}
public void write(long value) {
write(String.valueOf(value));
}
public void write(float value) {
write(String.valueOf(value));
}
public void write(double value) {
write(String.valueOf(value));
}
public void writeList(Collection<? extends IGameStateObject> value) {
if (value == null) { return; }
write(value.size()); //must write size first
for (IGameStateObject obj : value) {
write(obj);
}
}
public void writeCardList(Collection<Card> value) {
if (value == null) { return; }
write(value.size()); //must write size first
for (Card card : value) {
write(card);
}
}
public void writePlayerList(Collection<Player> value) {
if (value == null) { return; }
write(value.size()); //must write size first
for (Player player : value) {
write(player);
}
}
public void serialize(Serializable obj) {
String str;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
str = baos.toString();
}
catch (Exception e) {
e.printStackTrace();
str = ""; //ensure placeholder include in output
}
write(str);
}
}

View File

@@ -1,6 +0,0 @@
package forge.game.io;
public interface IGameStateObject {
void loadState(GameStateDeserializer gsd);
void saveState(GameStateSerializer gss);
}

View File

@@ -20,15 +20,11 @@ package forge.game.phase;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.GameCommand; import forge.GameCommand;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map.Entry;
/** /**
@@ -39,7 +35,7 @@ import java.util.Map.Entry;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class Phase implements java.io.Serializable, IGameStateObject { public class Phase implements java.io.Serializable {
private static final long serialVersionUID = 4665309652476851977L; private static final long serialVersionUID = 4665309652476851977L;
@@ -55,30 +51,6 @@ public class Phase implements java.io.Serializable, IGameStateObject {
private final HashMap<Player, ArrayList<GameCommand>> untilEndMap = new HashMap<Player, ArrayList<GameCommand>>(); private final HashMap<Player, ArrayList<GameCommand>> untilEndMap = new HashMap<Player, ArrayList<GameCommand>>();
private final HashMap<Player, ArrayList<GameCommand>> registerMap = new HashMap<Player, ArrayList<GameCommand>>(); private final HashMap<Player, ArrayList<GameCommand>> registerMap = new HashMap<Player, ArrayList<GameCommand>>();
@Override
public void loadState(GameStateDeserializer gsd) {
}
@Override
public void saveState(GameStateSerializer gss) {
gss.write(type.name());
gss.serialize(at);
gss.serialize(until);
for (Entry<Player, ArrayList<GameCommand>> entry : untilMap.entrySet()) {
gss.write(entry.getKey());
gss.serialize(entry.getValue());
}
for (Entry<Player, ArrayList<GameCommand>> entry : untilEndMap.entrySet()) {
gss.write(entry.getKey());
gss.serialize(entry.getValue());
}
for (Entry<Player, ArrayList<GameCommand>> entry : registerMap.entrySet()) {
gss.write(entry.getKey());
gss.serialize(entry.getValue());
}
}
/** /**
* <p> * <p>
* Add a hardcoded trigger that will execute "at <phase>". * Add a hardcoded trigger that will execute "at <phase>".

View File

@@ -32,9 +32,6 @@ import forge.game.combat.Combat;
import forge.game.combat.CombatUtil; import forge.game.combat.CombatUtil;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.event.*; import forge.game.event.*;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerController.BinaryChoiceType; import forge.game.player.PlayerController.BinaryChoiceType;
import forge.game.player.PlayerController.ManaPaymentPurpose; import forge.game.player.PlayerController.ManaPaymentPurpose;
@@ -59,7 +56,7 @@ import java.util.*;
* @author Forge * @author Forge
* @version $Id: PhaseHandler.java 13001 2012-01-08 12:25:25Z Sloth $ * @version $Id: PhaseHandler.java 13001 2012-01-08 12:25:25Z Sloth $
*/ */
public class PhaseHandler implements java.io.Serializable, IGameStateObject { public class PhaseHandler implements java.io.Serializable {
/** Constant <code>serialVersionUID=5207222278370963197L</code>. */ /** Constant <code>serialVersionUID=5207222278370963197L</code>. */
private static final long serialVersionUID = 5207222278370963197L; private static final long serialVersionUID = 5207222278370963197L;
@@ -1145,18 +1142,4 @@ public class PhaseHandler implements java.io.Serializable, IGameStateObject {
public void endCombat() { public void endCombat() {
combat = null; combat = null;
} }
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
}
} }

View File

@@ -23,9 +23,6 @@ import forge.game.GameLogEntryType;
import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityFactory;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -35,11 +32,7 @@ import org.apache.commons.lang3.StringUtils;
import java.util.*; import java.util.*;
/** public class ReplacementHandler {
* TODO: Write javadoc for this type.
*
*/
public class ReplacementHandler implements IGameStateObject {
private final Game game; private final Game game;
/** /**
* ReplacementHandler. * ReplacementHandler.
@@ -301,16 +294,4 @@ public class ReplacementHandler implements IGameStateObject {
} }
} }
} }
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
}
} }

View File

@@ -26,9 +26,6 @@ import forge.game.ability.ApiType;
import forge.game.ability.effects.CharmEffect; import forge.game.ability.effects.CharmEffect;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardUtil; import forge.game.card.CardUtil;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.phase.PhaseType; import forge.game.phase.PhaseType;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.Ability; import forge.game.spellability.Ability;
@@ -39,7 +36,7 @@ import java.util.*;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
public class TriggerHandler implements IGameStateObject { public class TriggerHandler {
private final ArrayList<TriggerType> suppressedModes = new ArrayList<TriggerType>(); private final ArrayList<TriggerType> suppressedModes = new ArrayList<TriggerType>();
private final ArrayList<Trigger> activeTriggers = new ArrayList<Trigger>(); private final ArrayList<Trigger> activeTriggers = new ArrayList<Trigger>();
@@ -510,18 +507,5 @@ public class TriggerHandler implements IGameStateObject {
regtrig.getHostCard().getTriggers().remove(regtrig); regtrig.getHostCard().getTriggers().remove(regtrig);
} }
} }
}
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
} }
} }

View File

@@ -39,9 +39,6 @@ import forge.game.event.GameEventCardStatsChanged;
import forge.game.event.GameEventSpellAbilityCast; import forge.game.event.GameEventSpellAbilityCast;
import forge.game.event.GameEventSpellRemovedFromStack; import forge.game.event.GameEventSpellRemovedFromStack;
import forge.game.event.GameEventSpellResolved; import forge.game.event.GameEventSpellResolved;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.player.PlayerController.ManaPaymentPurpose; import forge.game.player.PlayerController.ManaPaymentPurpose;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
@@ -64,7 +61,7 @@ import java.util.concurrent.LinkedBlockingDeque;
* @author Forge * @author Forge
* @version $Id$ * @version $Id$
*/ */
public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbilityStackInstance>, IGameStateObject { public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbilityStackInstance> {
private final List<SpellAbility> simultaneousStackEntryList = new ArrayList<SpellAbility>(); private final List<SpellAbility> simultaneousStackEntryList = new ArrayList<SpellAbility>();
// They don't provide a LIFO queue, so had to use a deque // They don't provide a LIFO queue, so had to use a deque
@@ -975,17 +972,4 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
public String toString() { public String toString() {
return String.format("%s==%s==%s", simultaneousStackEntryList, frozenStack.toString(), stack.toString()); return String.format("%s==%s==%s", simultaneousStackEntryList, frozenStack.toString(), stack.toString());
} }
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
}
} }

View File

@@ -25,9 +25,6 @@ import forge.game.Game;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.event.EventValueChangeType; import forge.game.event.EventValueChangeType;
import forge.game.event.GameEventZone; import forge.game.event.GameEventZone;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player; import forge.game.player.Player;
import forge.util.CollectionSuppliers; import forge.util.CollectionSuppliers;
import forge.util.maps.EnumMapOfLists; import forge.util.maps.EnumMapOfLists;
@@ -45,7 +42,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @author Forge * @author Forge
* @version $Id: PlayerZone.java 17582 2012-10-19 22:39:09Z Max mtg $ * @version $Id: PlayerZone.java 17582 2012-10-19 22:39:09Z Max mtg $
*/ */
public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObject { public class Zone implements java.io.Serializable, Iterable<Card> {
/** Constant <code>serialVersionUID=-5687652485777639176L</code>. */ /** Constant <code>serialVersionUID=-5687652485777639176L</code>. */
private static final long serialVersionUID = -5687652485777639176L; private static final long serialVersionUID = -5687652485777639176L;
@@ -58,12 +55,10 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
protected final transient MapOfLists<ZoneType, Card> cardsAddedThisTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.<Card>arrayLists()); protected final transient MapOfLists<ZoneType, Card> cardsAddedThisTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.<Card>arrayLists());
protected final transient MapOfLists<ZoneType, Card> cardsAddedLastTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.<Card>arrayLists()); protected final transient MapOfLists<ZoneType, Card> cardsAddedLastTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.<Card>arrayLists());
public Zone(final ZoneType zone, Game game) { public Zone(final ZoneType zone0, Game game0) {
this.zoneType = zone; zoneType = zone0;
this.game = game; game = game0;
this.roCardList = Collections.unmodifiableList(cardList); roCardList = Collections.unmodifiableList(cardList);
//System.out.println(zoneName + " (ct) " + Integer.toHexString(System.identityHashCode(roCardList)));
} }
public Player getPlayer() { // generic zones like stack have no player associated public Player getPlayer() { // generic zones like stack have no player associated
@@ -89,24 +84,24 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
c.setZone(this); c.setZone(this);
if (index == null) { if (index == null) {
this.cardList.add(c); cardList.add(c);
} }
else { else {
this.cardList.add(index.intValue(), c); cardList.add(index.intValue(), c);
} }
game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Added, c)); game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Added, c));
} }
public final boolean contains(final Card c) { public final boolean contains(final Card c) {
return this.cardList.contains(c); return cardList.contains(c);
} }
public final boolean contains(final Predicate<Card> condition) { public final boolean contains(final Predicate<Card> condition) {
return Iterables.any(this.cardList, condition); return Iterables.any(cardList, condition);
} }
public void remove(final Card c) { public void remove(final Card c) {
this.cardList.remove(c); cardList.remove(c);
game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Removed, c)); game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Removed, c));
} }
@@ -120,7 +115,7 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
} }
public final boolean is(final ZoneType zone) { public final boolean is(final ZoneType zone) {
return zone == this.zoneType; return zone == zoneType;
} }
// PlayerZone should override it with a correct implementation // PlayerZone should override it with a correct implementation
@@ -130,25 +125,25 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
} }
public final ZoneType getZoneType() { public final ZoneType getZoneType() {
return this.zoneType; return zoneType;
} }
public final int size() { public final int size() {
return this.cardList.size(); return cardList.size();
} }
public final Card get(final int index) { public final Card get(final int index) {
return this.cardList.get(index); return cardList.get(index);
} }
public final List<Card> getCards() { public final List<Card> getCards() {
//System.out.println(zoneName + ": " + Integer.toHexString(System.identityHashCode(roCardList))); //System.out.println(zoneName + ": " + Integer.toHexString(System.identityHashCode(roCardList)));
return this.getCards(true); return getCards(true);
} }
public List<Card> getCards(final boolean filter) { public List<Card> getCards(final boolean filter) {
// Non-Battlefield PlayerZones don't care about the filter // Non-Battlefield PlayerZones don't care about the filter
return this.roCardList; return roCardList;
} }
/* /*
@@ -158,7 +153,7 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
*/ */
public final boolean isEmpty() { public final boolean isEmpty() {
return this.cardList.isEmpty(); return cardList.isEmpty();
} }
/** /**
@@ -189,7 +184,7 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
public final List<Card> getCardsAddedThisTurn(final ZoneType origin) { public final List<Card> getCardsAddedThisTurn(final ZoneType origin) {
//System.out.print("Request cards put into " + this.getZoneType() + " from " + origin + ".Amount: "); //System.out.print("Request cards put into " + getZoneType() + " from " + origin + ".Amount: ");
return getCardsAdded(cardsAddedThisTurn, origin); return getCardsAdded(cardsAddedThisTurn, origin);
} }
@@ -203,7 +198,7 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
* @return a {@link forge.CardList} object. * @return a {@link forge.CardList} object.
*/ */
public final List<Card> getCardsAddedLastTurn(final ZoneType origin) { public final List<Card> getCardsAddedLastTurn(final ZoneType origin) {
//System.out.print("Last turn - Request cards put into " + this.getZoneType() + " from " + origin + ".Amount: "); //System.out.print("Last turn - Request cards put into " + getZoneType() + " from " + origin + ".Amount: ");
return getCardsAdded(cardsAddedLastTurn, origin); return getCardsAdded(cardsAddedLastTurn, origin);
} }
@@ -232,11 +227,11 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
* </p> * </p>
*/ */
public final void resetCardsAddedThisTurn() { public final void resetCardsAddedThisTurn() {
this.cardsAddedLastTurn.clear(); cardsAddedLastTurn.clear();
for (Entry<ZoneType, Collection<Card>> entry : this.cardsAddedThisTurn.entrySet()) { for (Entry<ZoneType, Collection<Card>> entry : cardsAddedThisTurn.entrySet()) {
this.cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue()); cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue());
} }
this.cardsAddedThisTurn.clear(); cardsAddedThisTurn.clear();
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -261,18 +256,6 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
*/ */
@Override @Override
public String toString() { public String toString() {
return this.zoneType.toString(); return zoneType.toString();
}
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
} }
} }