- Added the option "RemoveType" to continuous static abilities to remove one special type.

- Added Melting.
This commit is contained in:
Sloth
2011-09-04 10:14:19 +00:00
parent e2c99a4218
commit b6581dba64
8 changed files with 79 additions and 25 deletions

View File

@@ -3120,13 +3120,11 @@ public class Card extends GameEntity implements Comparable<Card> {
ArrayList<String> newType = new ArrayList<String>(type);
ArrayList<Card_Type> types = changedCardTypes;
//TODO: Any reason why changedCardTypes can't be sorted in place
// Does changedCardTypes ever get out of increasing time
// stamp order?
Collections.sort(types); // sorts types by timeStamp
for (Card_Type ct : types) {
ArrayList<String> removeTypes = new ArrayList<String>();
removeTypes.addAll(ct.getRemoveType());
//remove old types
for (int i = 0; i < newType.size(); i++) {
String t = newType.get(i);
@@ -3141,7 +3139,9 @@ public class Card extends GameEntity implements Comparable<Card> {
}
newType.removeAll(removeTypes);
//add new types
newType.addAll(ct.getType());
if (ct.getType() != null) {
newType.addAll(ct.getType());
}
}
@@ -3160,16 +3160,26 @@ public class Card extends GameEntity implements Comparable<Card> {
return changedCardTypes;
}
public void addChangedCardTypes(ArrayList<String> types, boolean removeSuperTypes, boolean removeCardTypes,
boolean removeSubTypes, boolean removeCreatureTypes, long timestamp) {
public void addChangedCardTypes(ArrayList<String> types, ArrayList<String> removeTypes, boolean removeSuperTypes,
boolean removeCardTypes, boolean removeSubTypes, boolean removeCreatureTypes, long timestamp) {
changedCardTypes.add(new Card_Type(types, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, timestamp));
changedCardTypes.add(new Card_Type(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes,
timestamp));
}
public void addChangedCardTypes(String[] types, boolean removeSuperTypes, boolean removeCardTypes,
public void addChangedCardTypes(String[] types, String[] removeTypes, boolean removeSuperTypes, boolean removeCardTypes,
boolean removeSubTypes, boolean removeCreatureTypes, long timestamp) {
ArrayList<String> typeList = new ArrayList<String>(Arrays.asList(types));
addChangedCardTypes(typeList, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, timestamp);
ArrayList<String> typeList = null;
ArrayList<String> removeTypeList = null;
if(types != null) {
typeList = new ArrayList<String>(Arrays.asList(types));
}
if(removeTypes != null) {
removeTypeList = new ArrayList<String>(Arrays.asList(removeTypes));
}
addChangedCardTypes(typeList, removeTypeList, removeSuperTypes, removeCardTypes, removeSubTypes, removeCreatureTypes, timestamp);
}
public void removeChangedCardTypes(long timestamp) {

View File

@@ -12,6 +12,7 @@ import java.util.ArrayList;
public class Card_Type implements Comparable<Card_Type> {
// takes care of individual card types
private ArrayList<String> type = new ArrayList<String>();
private ArrayList<String> removeType = new ArrayList<String>();
private boolean removeSuperTypes;
private boolean removeCardTypes;
private boolean removeSubTypes;
@@ -36,10 +37,11 @@ public class Card_Type implements Comparable<Card_Type> {
* @param removeCreatureType a boolean
* @param stamp a long
*/
Card_Type(final ArrayList<String> types, final boolean removeSuperType, final boolean removeCardType,
final boolean removeSubType, final boolean removeCreatureType, final long stamp)
Card_Type(final ArrayList<String> types, final ArrayList<String> removeTypes, final boolean removeSuperType,
final boolean removeCardType, final boolean removeSubType, final boolean removeCreatureType, final long stamp)
{
type = types;
removeType = removeTypes;
removeSuperTypes = removeSuperType;
removeCardTypes = removeCardType;
removeSubTypes = removeSubType;
@@ -49,16 +51,25 @@ public class Card_Type implements Comparable<Card_Type> {
/**
*
* TODO Write javadoc for this method.
* Write javadoc for this method.
* @return type
*/
public final ArrayList<String> getType() {
return type;
}
/**
*
* Write javadoc for this method.
* @return removeType
*/
public final ArrayList<String> getRemoveType() {
return removeType;
}
/**
*
* TODO Write javadoc for this method.
* Write javadoc for this method.
* @return removeSuperTypes
*/
public final boolean isRemoveSuperTypes() {
@@ -67,7 +78,7 @@ public class Card_Type implements Comparable<Card_Type> {
/**
*
* TODO Write javadoc for this method.
* Write javadoc for this method.
* @return removeCardTypes
*/
public final boolean isRemoveCardTypes() {
@@ -76,7 +87,7 @@ public class Card_Type implements Comparable<Card_Type> {
/**
*
* TODO Write javadoc for this method.
* Write javadoc for this method.
* @return removeSubTypes
*/
public final boolean isRemoveSubTypes() {
@@ -85,7 +96,7 @@ public class Card_Type implements Comparable<Card_Type> {
/**
*
* TODO Write javadoc for this method.
* Write javadoc for this method.
* @return removeCreatureTypes
*/
public final boolean isRemoveCreatureTypes() {

View File

@@ -130,7 +130,7 @@ public class StaticEffects {
}
//remove Types
if (params.containsKey("AddType")) {
if (params.containsKey("AddType") || params.containsKey("RemoveType")) {
affectedCard.removeChangedCardTypes(se.getTimestamp());
}

View File

@@ -425,6 +425,11 @@ public class AbilityFactory_Animate {
if (params.containsKey("Types")) {
types.addAll(Arrays.asList(params.get("Types").split(",")));
}
final ArrayList<String> removeTypes = new ArrayList<String>();
if (params.containsKey("RemoveTypes")) {
removeTypes.addAll(Arrays.asList(params.get("RemoveTypes").split(",")));
}
//allow ChosenType - overrides anything else specified
if (types.contains("ChosenType")) {
@@ -493,7 +498,7 @@ public class AbilityFactory_Animate {
for (final Card c : tgts) {
final long colorTimestamp = doAnimate(c, af, power, toughness, types, finalDesc, keywords, timestamp);
final long colorTimestamp = doAnimate(c, af, power, toughness, types, removeTypes, finalDesc, keywords, timestamp);
//give abilities
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();
@@ -572,7 +577,8 @@ public class AbilityFactory_Animate {
* @return a long.
*/
private static long doAnimate(final Card c, final AbilityFactory af, final int power, final int toughness,
final ArrayList<String> types, final String colors, final ArrayList<String> keywords, final long timestamp)
final ArrayList<String> types, final ArrayList<String> removeTypes, final String colors, final ArrayList<String> keywords,
final long timestamp)
{
HashMap<String, String> params = af.getMapParams();
@@ -617,7 +623,7 @@ public class AbilityFactory_Animate {
}
if (!types.isEmpty()) {
c.addChangedCardTypes(types, removeSuperTypes, removeCardTypes, removeSubTypes,
c.addChangedCardTypes(types, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, timestamp);
}
@@ -920,6 +926,11 @@ public class AbilityFactory_Animate {
if (params.containsKey("Types")) {
types.addAll(Arrays.asList(params.get("Types").split(",")));
}
final ArrayList<String> removeTypes = new ArrayList<String>();
if (params.containsKey("RemoveTypes")) {
removeTypes.addAll(Arrays.asList(params.get("RemoveTypes").split(",")));
}
//allow ChosenType - overrides anything else specified
if (types.contains("ChosenType")) {
@@ -976,7 +987,7 @@ public class AbilityFactory_Animate {
for (final Card c : list) {
final long colorTimestamp = doAnimate(c, af, power, toughness, types, finalDesc, keywords, timestamp);
final long colorTimestamp = doAnimate(c, af, power, toughness, types, removeTypes, finalDesc, keywords, timestamp);
//give abilities
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();

View File

@@ -87,7 +87,7 @@ public class StaticAbility {
if(mapParams.containsKey("AddColor") || mapParams.containsKey("RemoveColor") || mapParams.containsKey("SetColor"))
return 5;
if(mapParams.containsKey("AddType") || mapParams.containsKey("RemoveCardType")
if(mapParams.containsKey("AddType") || mapParams.containsKey("RemoveType") || mapParams.containsKey("RemoveCardType")
|| mapParams.containsKey("RemoveSubType") || mapParams.containsKey("RemoveSuperType"))
return 4;

View File

@@ -39,6 +39,7 @@ public class StaticAbility_Continuous {
String addAbilities[] = null;
String addSVars[] = null;
String addTypes[] = null;
String removeTypes[] = null;
String addColors = null;
String addTriggers[] = null;
boolean removeSuperTypes = false;
@@ -104,6 +105,15 @@ public class StaticAbility_Continuous {
}
}
if (params.containsKey("RemoveType")) {
removeTypes = params.get("RemoveType").split(" & ");
if(removeTypes[0].equals("ChosenType")) {
String chosenType = hostCard.getChosenType();
removeTypes[0] = chosenType;
se.setChosenType(chosenType);
}
}
if (params.containsKey("RemoveSuperTypes")) {
removeSuperTypes = true;
}
@@ -175,8 +185,8 @@ public class StaticAbility_Continuous {
affectedCard.setSVar(sVar, hostCard.getSVar(sVar));
// add Types
if (addTypes != null)
affectedCard.addChangedCardTypes(addTypes, removeSuperTypes, removeCardTypes, removeSubTypes,
if (addTypes != null || removeTypes != null)
affectedCard.addChangedCardTypes(addTypes, removeTypes, removeSuperTypes, removeCardTypes, removeSubTypes,
removeCreatureTypes, hostCard.getTimestamp());
// add colors