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/IGameEventVisitor.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/Keyword.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.event.GameEvent;
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.Phase;
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.
*/
public class Game implements IGameStateObject {
public class Game {
private final GameRules rules;
private List<Player> roIngamePlayers;
private List<Player> roIngamePlayersReversed;
@@ -102,57 +99,6 @@ public class Game implements IGameStateObject {
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 */
rules = rules0;
match = match0;

View File

@@ -15,13 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package forge.game;
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.List;
@@ -34,10 +30,11 @@ import java.util.Observable;
* @author Forge
* @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 GameLogFormatter formatter = new GameLogFormatter(this);
/** Logging level:
* 0 - Turn
* 2 - Stack items
@@ -46,30 +43,9 @@ public class GameLog extends Observable implements IGameStateObject {
* 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() {
}
/**
* Adds the.
*
* @param type the type
* @param message the message
* @param type the level
*/
public void add(final GameLogEntryType type, final String message) {
add(new GameLogEntry(type, message));
}

View File

@@ -1,10 +1,7 @@
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 GameLogEntryType type;
// might add here date and some other fields
@@ -19,16 +16,4 @@ public class GameLogEntry implements IGameStateObject {
// TODO Auto-generated method stub
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;
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.PlayerOutcome;
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
// only getters) and
// 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 final List<PaperCard> lostCards;
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<>();
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) {
winCondition = reason;
players = list;

View File

@@ -3,11 +3,7 @@ package forge.game;
import java.util.EnumSet;
import java.util.Set;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
public class GameRules implements IGameStateObject {
public class GameRules {
private GameType gameType;
private boolean manaBurn;
private int poisonCountersToLose = 10; // is commonly 10, but turns into 15 for 2HG
@@ -20,41 +16,6 @@ public class GameRules implements IGameStateObject {
// it's a preference, not rule... but I could hardly find a better place for it
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) {
this.gameType = type;
}

View File

@@ -47,4 +47,21 @@ public class GameView {
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.CardUtil;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect;
import forge.game.spellability.AbilityStatic;
@@ -38,7 +35,7 @@ import java.util.*;
* @author Forge
* @version $Id$
*/
public class StaticEffects implements IGameStateObject {
public class StaticEffects {
// **************** StaticAbility system **************************
private final ArrayList<StaticEffect> staticEffects = new ArrayList<StaticEffect>();
@@ -264,20 +261,4 @@ public class StaticEffects implements IGameStateObject {
se.clearTimestamps();
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 forge.GameCommand;
import forge.game.io.GameStateDeserializer;
import forge.game.io.GameStateSerializer;
import forge.game.io.IGameStateObject;
import forge.game.player.Player;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
/**
@@ -39,7 +35,7 @@ import java.util.Map.Entry;
* @author Forge
* @version $Id$
*/
public class Phase implements java.io.Serializable, IGameStateObject {
public class Phase implements java.io.Serializable {
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>> 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>
* 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.cost.Cost;
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.PlayerController.BinaryChoiceType;
import forge.game.player.PlayerController.ManaPaymentPurpose;
@@ -59,7 +56,7 @@ import java.util.*;
* @author Forge
* @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>. */
private static final long serialVersionUID = 5207222278370963197L;
@@ -1145,18 +1142,4 @@ public class PhaseHandler implements java.io.Serializable, IGameStateObject {
public void endCombat() {
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.AbilityUtils;
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.spellability.SpellAbility;
import forge.game.zone.ZoneType;
@@ -35,11 +32,7 @@ import org.apache.commons.lang3.StringUtils;
import java.util.*;
/**
* TODO: Write javadoc for this type.
*
*/
public class ReplacementHandler implements IGameStateObject {
public class ReplacementHandler {
private final Game game;
/**
* 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.card.Card;
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.player.Player;
import forge.game.spellability.Ability;
@@ -39,7 +36,7 @@ import java.util.*;
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<Trigger> activeTriggers = new ArrayList<Trigger>();
@@ -510,18 +507,5 @@ public class TriggerHandler implements IGameStateObject {
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.GameEventSpellRemovedFromStack;
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.PlayerController.ManaPaymentPurpose;
import forge.game.replacement.ReplacementEffect;
@@ -64,7 +61,7 @@ import java.util.concurrent.LinkedBlockingDeque;
* @author Forge
* @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>();
// 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() {
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.event.EventValueChangeType;
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.util.CollectionSuppliers;
import forge.util.maps.EnumMapOfLists;
@@ -45,7 +42,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @author Forge
* @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>. */
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> cardsAddedLastTurn = new EnumMapOfLists<>(ZoneType.class, CollectionSuppliers.<Card>arrayLists());
public Zone(final ZoneType zone, Game game) {
this.zoneType = zone;
this.game = game;
this.roCardList = Collections.unmodifiableList(cardList);
//System.out.println(zoneName + " (ct) " + Integer.toHexString(System.identityHashCode(roCardList)));
public Zone(final ZoneType zone0, Game game0) {
zoneType = zone0;
game = game0;
roCardList = Collections.unmodifiableList(cardList);
}
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);
if (index == null) {
this.cardList.add(c);
cardList.add(c);
}
else {
this.cardList.add(index.intValue(), c);
cardList.add(index.intValue(), c);
}
game.fireEvent(new GameEventZone(zoneType, getPlayer(), EventValueChangeType.Added, 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) {
return Iterables.any(this.cardList, condition);
return Iterables.any(cardList, condition);
}
public void remove(final Card c) {
this.cardList.remove(c);
cardList.remove(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) {
return zone == this.zoneType;
return zone == zoneType;
}
// 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() {
return this.zoneType;
return zoneType;
}
public final int size() {
return this.cardList.size();
return cardList.size();
}
public final Card get(final int index) {
return this.cardList.get(index);
return cardList.get(index);
}
public final List<Card> getCards() {
//System.out.println(zoneName + ": " + Integer.toHexString(System.identityHashCode(roCardList)));
return this.getCards(true);
return getCards(true);
}
public List<Card> getCards(final boolean 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() {
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.
*/
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);
}
@@ -203,7 +198,7 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
* @return a {@link forge.CardList} object.
*/
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);
}
@@ -232,11 +227,11 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
* </p>
*/
public final void resetCardsAddedThisTurn() {
this.cardsAddedLastTurn.clear();
for (Entry<ZoneType, Collection<Card>> entry : this.cardsAddedThisTurn.entrySet()) {
this.cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue());
cardsAddedLastTurn.clear();
for (Entry<ZoneType, Collection<Card>> entry : cardsAddedThisTurn.entrySet()) {
cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue());
}
this.cardsAddedThisTurn.clear();
cardsAddedThisTurn.clear();
}
/* (non-Javadoc)
@@ -261,18 +256,6 @@ public class Zone implements java.io.Serializable, Iterable<Card>, IGameStateObj
*/
@Override
public String toString() {
return this.zoneType.toString();
}
@Override
public void loadState(GameStateDeserializer gsd) {
// TODO Auto-generated method stub
}
@Override
public void saveState(GameStateSerializer gss) {
// TODO Auto-generated method stub
return zoneType.toString();
}
}