magarena/src/magic/data/CardProperty.java

308 lines
10 KiB
Java

package magic.data;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import magic.exception.ScriptParseException;
import magic.model.MagicAbility;
import magic.model.MagicCardDefinition;
import magic.model.MagicColor;
import magic.model.MagicManaCost;
import magic.model.MagicStaticType;
import magic.model.MagicSubType;
import magic.model.MagicType;
import magic.model.event.MagicPlayAuraEvent;
import magic.model.event.MagicSpellCardEvent;
import magic.model.event.MagicTiming;
import magic.model.mstatic.MagicStatic;
public enum CardProperty {
IMAGE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setImageURL(value);
}
},
VALUE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setValue(Double.parseDouble(value));
}
},
REMOVAL() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRemoval(Integer.parseInt(value));
}
},
RARITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRarity(value.charAt(0));
}
},
TYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(",");
for (final String name : names) {
card.addType(MagicType.getType(name));
}
}
},
SUBTYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSubTypes(value.split(COMMA));
card.setSubTypeText(value);
}
},
COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setColors(value);
}
},
COST() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setCost(MagicManaCost.create(value));
}
},
MANA() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setManaSourceText(value);
}
},
PT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] pt = value.split("/");
final int p = pt[0].contains("*") ? 0 : Integer.parseInt(pt[0]);
final int t = pt[1].contains("*") ? 0 : Integer.parseInt(pt[1]);
card.setPowerToughness(p, t);
card.setPowerToughnessText(value);
}
},
ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setAbilityProperty(value);
}
},
LOYALTY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStartingLoyalty(Integer.parseInt(value));
}
},
LOAD_ABILITY_COMMA() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(COMMA);
for (final String name : names) {
MagicAbility.getAbility(name).addAbility(card, name);
}
}
},
LOAD_ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] names=value.split(SEMI);
for (final String name : names) {
try {
MagicAbility.getAbility(name).addAbility(card, name);
} catch (final ScriptParseException origPE) {
try {
LOAD_ABILITY_COMMA.setProperty(card, name);
} catch (final ScriptParseException newPE) {
throw origPE;
}
}
}
}
},
SET_PT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String[] pt = value.split("/");
card.add(MagicStatic.genPTSetStatic(Integer.parseInt(pt[0]), Integer.parseInt(pt[1])));
}
},
GIVEN_ABILITY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.linkedABStatic(MagicAbility.getAbilityList(value.split(SEMI))));
}
},
GIVEN_SUBTYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.genSTStatic(MagicSubType.getSubTypes(value.split(COMMA))));
}
},
GIVEN_TYPE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.genTypeStatic(MagicType.getTypes(value.split(COMMA))));
}
},
GIVEN_COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.AddLinkedColor(MagicColor.getFlags(value)));
}
},
OVERWRITE_COLOR() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicStatic.SetLinkedColor(MagicColor.getFlags(value)));
}
},
STATIC() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStaticType(MagicStaticType.getStaticTypeFor(value));
}
},
TIMING() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setTiming(MagicTiming.getTimingFor(value));
}
},
IMAGE_UPDATED() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final SimpleDateFormat format = new SimpleDateFormat(IMAGE_UPDATED_FORMAT);
try {
card.setImageUpdated(format.parse(value));
} catch (final ParseException pe) {
throw new RuntimeException(pe);
}
}
},
MANA_OR_COMBAT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setExcludeManaOrCombat();
}
},
ENCHANT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicPlayAuraEvent.create(value));
}
},
TOKEN() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setToken();
card.setName(value);
}
},
NAME() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
assert card.getName() == null;
assert card.getDistinctName() == null;
final String[] names = value.split(SEMI);
card.setName(names[0]);
card.setDistinctName(names[names.length - 1]);
}
},
EFFECT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setEffectProperty(value);
}
},
LOAD_EFFECT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.add(MagicSpellCardEvent.create(card, value));
}
},
REQUIRES_GROOVY_CODE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setRequiresGroovy(value);
}
},
LOAD_GROOVY_CODE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
final String cardName = !value.isEmpty() ? value : card.getDistinctName();
final String[] names = cardName.split(SEMI);
for (final String name : names) {
CardDefinitions.addCardSpecificGroovyCode(card, name);
}
}
},
FLIP() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setFlipCardName(value);
}
},
TRANSFORM() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setTransformCardName(value);
}
},
MELD(){
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setMeldCardNames(value.split(SEMI));
}
},
SPLIT() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSplitCardName(value);
}
},
SECOND_HALF() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setSecondHalf();
}
},
ORACLE() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setText(value);
}
},
HIDDEN() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setHidden();
}
},
OVERLAY() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setOverlay();
}
},
STATUS() {
@Override
public void setProperty(final MagicCardDefinition card, final String value) {
card.setStatus(value);
}
},
;
public static final String IMAGE_UPDATED_FORMAT = "yyyy-MM-dd";
private static final String SEMI = "\\s*;\\s*";
private static final String COMMA = "\\s*,\\s*";
public void setProperty(final MagicCardDefinition card, final String value) {
//do nothing
}
}