Fix so conquest can load

This commit is contained in:
drdev
2016-01-02 02:56:41 +00:00
parent 95ea47a8bf
commit fef533e3ce
5 changed files with 57 additions and 52 deletions

View File

@@ -4,17 +4,20 @@ import forge.deck.Deck;
import forge.deck.generation.DeckGenPool;
import forge.item.InventoryItem;
import forge.item.PaperCard;
import forge.model.FModel;
import forge.planarconquest.ConquestPlane.Region;
import forge.util.XmlReader;
import forge.util.XmlWriter;
import forge.util.XmlWriter.IXmlWritable;
public class ConquestCommander implements InventoryItem, IXmlWritable {
private final PaperCard card;
private final Deck deck;
private final ConquestRecord record;
private final ConquestPlane originPlane;
private final String originRegionName;
private Deck deck;
public ConquestCommander(PaperCard card0) {
this(card0, new Deck(card0.getName()));
}
@@ -22,9 +25,12 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
this(card0, ConquestUtil.generateDeck(card0, cardPool0, forAi));
}
private ConquestCommander(PaperCard card0, Deck deck0) {
this(card0, deck0, new ConquestRecord());
}
private ConquestCommander(PaperCard card0, Deck deck0, ConquestRecord record0) {
card = card0;
deck = deck0;
record = new ConquestRecord();
record = record0;
//determine origin of commander
ConquestPlane originPlane0 = null;
@@ -45,6 +51,15 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
originRegionName = originRegionName0;
}
public ConquestCommander(XmlReader xml) {
this(xml.read("card", FModel.getMagicDb().getCommonCards()), null, xml.read("record", ConquestRecord.class));
}
@Override
public void saveToXml(XmlWriter xml) {
xml.write("card", card);
xml.write("record", record);
}
public String getName() {
return card.getName();
}
@@ -66,6 +81,12 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
}
public Deck getDeck() {
if (deck == null) { //if deck not yet initialized, attempt to load deck file
deck = FModel.getConquest().getDecks().get(card.getName());
if (deck == null) {
deck = new Deck(card.getName());
}
}
return deck;
}
@@ -95,10 +116,4 @@ public class ConquestCommander implements InventoryItem, IXmlWritable {
public String toString() {
return card.getName();
}
@Override
public void saveToXml(XmlWriter xml) {
xml.write("card", card);
xml.write("record", record);
}
}

View File

@@ -93,9 +93,9 @@ public final class ConquestData {
try {
XmlReader xml = new XmlReader(xmlFilename);
CardDb cardDb = FModel.getMagicDb().getCommonCards();
planeswalker = xml.read("planeswalker", planeswalker, cardDb);
planeswalker = xml.read("planeswalker", cardDb);
aetherShards = xml.read("aetherShards", aetherShards);
currentLocation = xml.read("currentLocation", currentLocation, ConquestLocation.class);
currentLocation = xml.read("currentLocation", ConquestLocation.class);
xml.read("unlockedCards", unlockedCards, cardDb);
xml.read("newCards", newCards, cardDb);
xml.read("commanders", commanders, ConquestCommander.class);

View File

@@ -27,7 +27,7 @@ public class ConquestLocation implements IXmlWritable {
}
public ConquestLocation(XmlReader xml) {
plane = xml.read("plane", ConquestPlane.class);
plane = xml.read("plane", ConquestPlane.Alara);
regionIndex = xml.read("regionIndex", 0);
row = xml.read("row", 0);
col = xml.read("col", 0);

View File

@@ -17,7 +17,7 @@ public class ConquestPlaneData implements IXmlWritable {
}
public ConquestPlaneData(XmlReader xml) {
plane = xml.read("plane", ConquestPlane.class);
plane = xml.read("plane", ConquestPlane.Alara);
eventResults = new ConquestRecord[plane.getEventCount()];
xml.read("eventResults", eventResults, ConquestRecord.class);
}

View File

@@ -37,12 +37,6 @@ public class XmlReader {
}
return defaultValue;
}
public <E extends Enum<E>> E read(String key, Class<E> enumType) {
if (currentElement.hasAttribute(key)) {
return Enum.valueOf(enumType, currentElement.getAttribute(key));
}
return null;
}
public int read(String key, int defaultValue) {
if (currentElement.hasAttribute(key)) {
return Integer.parseInt(currentElement.getAttribute(key));
@@ -61,26 +55,26 @@ public class XmlReader {
}
return defaultValue;
}
public PaperCard read(String key, PaperCard defaultValue, CardDb cardDb) {
public PaperCard read(String key, CardDb cardDb) {
paperCardBuilder.setup(this, cardDb);
return read(key, defaultValue, paperCardBuilder);
return parseChildElements(key, paperCardBuilder);
}
public <T extends Collection<PaperCard>> void read(String key, T collectionToLoad, CardDb cardDb) {
paperCardBuilder.setup(this, cardDb);
read(key, collectionToLoad, null, paperCardBuilder);
parseChildElements(key, collectionToLoad, null, paperCardBuilder);
}
public <T extends Collection<PaperCard>> T read(String key, Class<T> collectionType, CardDb cardDb) {
paperCardBuilder.setup(this, cardDb);
return read(key, null, collectionType, paperCardBuilder);
return parseChildElements(key, null, collectionType, paperCardBuilder);
}
public <T extends IXmlWritable> T read(String key, T defaultValue, Class<T> type) {
return read(key, defaultValue, new GenericBuilder<T>(type));
public <T extends IXmlWritable> T read(String key, Class<T> type) {
return parseChildElements(key, new GenericBuilder<T>(type));
}
public <V extends IXmlWritable, T extends Collection<V>> void read(String key, T collectionToLoad, Class<V> elementType) {
read(key, collectionToLoad, null, new GenericBuilder<V>(elementType));
parseChildElements(key, collectionToLoad, null, new GenericBuilder<V>(elementType));
}
public <V extends IXmlWritable, T extends Collection<V>> T read(String key, Class<T> collectionType, Class<V> elementType) {
return read(key, null, collectionType, new GenericBuilder<V>(elementType));
return parseChildElements(key, null, collectionType, new GenericBuilder<V>(elementType));
}
public <V extends IXmlWritable> void read(final String key, final V[] array, final Class<V> elementType) {
parseChildElements(key, new Evaluator<Void>() {
@@ -135,16 +129,28 @@ public class XmlReader {
/* Private helper methods */
private <T> T read(String key, T defaultValue, final Evaluator<T> builder) {
T result = parseChildElements(key, builder);
if (result == null) {
result = defaultValue;
}
private <T> T parseChildElements(String findKey, Evaluator<T> handler) {
Element parentElement = currentElement;
NodeList childNodes = currentElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node node = childNodes.item(i);
if (node instanceof Element) {
Element element = (Element)node;
if (findKey == null || element.getTagName().equals(findKey)) {
currentElement = (Element)node;
T result = handler.evaluate();
currentElement = parentElement;
if (findKey != null) {
return result;
}
}
}
}
return null;
}
private <V, T extends Collection<V>> T read(String key, final T collectionToLoad, final Class<T> collectionType, final Evaluator<V> builder) {
return read(key, collectionToLoad, new Evaluator<T>() {
private <V, T extends Collection<V>> T parseChildElements(String key, final T collectionToLoad, final Class<T> collectionType, final Evaluator<V> builder) {
T result = parseChildElements(key, new Evaluator<T>() {
@Override
public T evaluate() {
final T result;
@@ -173,27 +179,11 @@ public class XmlReader {
return result;
}
});
if (result == null) {
result = collectionToLoad;
}
private <T> T parseChildElements(String findKey, Evaluator<T> handler) {
Element parentElement = currentElement;
NodeList childNodes = currentElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node node = childNodes.item(i);
if (node instanceof Element) {
Element element = (Element)node;
if (findKey == null || element.getTagName().equals(findKey)) {
currentElement = (Element)node;
T result = handler.evaluate();
currentElement = parentElement;
if (findKey != null) {
return result;
}
}
}
}
return null;
}
private static final PaperCardBuilder paperCardBuilder = new PaperCardBuilder();
private static class PaperCardBuilder extends Evaluator<PaperCard> {