mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-20 04:38:00 +00:00
build fuse ability moved to ability/AbilityFactory.java
had to copy svars from sides to joined 'original' card in order to support cards like Beck//Call from http://www.slightlymagic.net/forum/viewtopic.php?p=114908#p114908
This commit is contained in:
@@ -22,6 +22,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import forge.Card;
|
||||
import forge.CardCharacteristicName;
|
||||
import forge.card.cost.Cost;
|
||||
import forge.card.spellability.AbilitySub;
|
||||
import forge.card.spellability.SpellAbility;
|
||||
@@ -120,7 +121,7 @@ public final class AbilityFactory {
|
||||
return abCost;
|
||||
}
|
||||
|
||||
public static final SpellAbility getAbility(AbilityRecordType type, ApiType api, Map<String, String> mapParams, Cost abCost, Card hostCard) {
|
||||
private static final SpellAbility getAbility(AbilityRecordType type, ApiType api, Map<String, String> mapParams, Cost abCost, Card hostCard) {
|
||||
|
||||
|
||||
Target abTgt = mapParams.containsKey("ValidTgts") ? readTarget(hostCard, mapParams) : null;
|
||||
@@ -351,4 +352,33 @@ public final class AbilityFactory {
|
||||
}
|
||||
}
|
||||
|
||||
public static final SpellAbility buildFusedAbility(final Card card) {
|
||||
if(!card.isSplitCard())
|
||||
throw new IllegalStateException("Fuse ability may be built only on split cards");
|
||||
|
||||
final String strLeftAbility = card.getState(CardCharacteristicName.LeftSplit).getIntrinsicAbility().get(0);
|
||||
Map<String, String> leftMap = getMapParams(strLeftAbility);
|
||||
AbilityRecordType leftType = AbilityRecordType.getRecordType(leftMap);
|
||||
Cost leftCost = parseAbilityCost(card, leftMap, leftType);
|
||||
ApiType leftApi = leftType.getApiTypeOf(leftMap);
|
||||
leftMap.put("StackDecription", leftMap.get("SpellDescription"));
|
||||
leftMap.put("SpellDescription", "Fuse (you may cast both halves of this card from your hand).");
|
||||
leftMap.put("ActivationZone", "Hand");
|
||||
|
||||
final String strRightAbility = card.getState(CardCharacteristicName.RightSplit).getIntrinsicAbility().get(0);
|
||||
Map<String, String> rightMap = getMapParams(strRightAbility);
|
||||
AbilityRecordType rightType = AbilityRecordType.getRecordType(leftMap);
|
||||
Cost rightCost = parseAbilityCost(card, rightMap, rightType);
|
||||
ApiType rightApi = leftType.getApiTypeOf(rightMap);
|
||||
rightMap.put("StackDecription", rightMap.get("SpellDescription"));
|
||||
rightMap.put("SpellDescription", "");
|
||||
|
||||
|
||||
Cost joinedCost = Cost.combine(rightCost, leftCost);
|
||||
final SpellAbility left = getAbility(leftType, leftApi, leftMap, joinedCost, card);
|
||||
final AbilitySub right = (AbilitySub) getAbility(AbilityRecordType.SubAbility, rightApi, rightMap, null, card);
|
||||
left.appendSubAbility(right);
|
||||
return left;
|
||||
}
|
||||
|
||||
} // end class AbilityFactory
|
||||
|
||||
@@ -291,8 +291,10 @@ public class CardFactory {
|
||||
|
||||
if ( state == CardCharacteristicName.LeftSplit || state == CardCharacteristicName.RightSplit )
|
||||
{
|
||||
card.getState(CardCharacteristicName.Original).getSpellAbility().addAll(card.getCharacteristics().getSpellAbility());
|
||||
card.getState(CardCharacteristicName.Original).getIntrinsicKeyword().addAll(card.getIntrinsicKeyword()); // Copy 'Fuse' to original side
|
||||
CardCharacteristics original = card.getState(CardCharacteristicName.Original);
|
||||
original.getSpellAbility().addAll(card.getCharacteristics().getSpellAbility());
|
||||
original.getIntrinsicKeyword().addAll(card.getIntrinsicKeyword()); // Copy 'Fuse' to original side
|
||||
original.getSVars().putAll(card.getCharacteristics().getSVars()); // Unfortunately need to copy these to (Effect looks for sVars on execute)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2373,34 +2373,6 @@ public class CardFactoryUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static final SpellAbility buildFusedAbility(final Card card) {
|
||||
if(!card.isSplitCard())
|
||||
throw new IllegalStateException("Fuse ability may be built only on split cards");
|
||||
|
||||
final String strLeftAbility = card.getState(CardCharacteristicName.LeftSplit).getIntrinsicAbility().get(0);
|
||||
Map<String, String> leftMap = AbilityFactory.getMapParams(strLeftAbility);
|
||||
AbilityFactory.AbilityRecordType leftType = AbilityFactory.AbilityRecordType.getRecordType(leftMap);
|
||||
Cost leftCost = AbilityFactory.parseAbilityCost(card, leftMap, leftType);
|
||||
ApiType leftApi = leftType.getApiTypeOf(leftMap);
|
||||
leftMap.put("StackDecription", leftMap.get("SpellDescription"));
|
||||
leftMap.put("SpellDescription", "Fuse (you may cast both halves of this card from your hand).");
|
||||
|
||||
final String strRightAbility = card.getState(CardCharacteristicName.RightSplit).getIntrinsicAbility().get(0);
|
||||
Map<String, String> rightMap = AbilityFactory.getMapParams(strRightAbility);
|
||||
AbilityFactory.AbilityRecordType rightType = AbilityFactory.AbilityRecordType.getRecordType(leftMap);
|
||||
Cost rightCost = AbilityFactory.parseAbilityCost(card, rightMap, rightType);
|
||||
ApiType rightApi = leftType.getApiTypeOf(rightMap);
|
||||
rightMap.put("StackDecription", rightMap.get("SpellDescription"));
|
||||
rightMap.put("SpellDescription", "");
|
||||
|
||||
|
||||
Cost joinedCost = Cost.combine(rightCost, leftCost);
|
||||
final SpellAbility left = AbilityFactory.getAbility(leftType, leftApi, leftMap, joinedCost, card);
|
||||
final AbilitySub right = (AbilitySub) AbilityFactory.getAbility(AbilityFactory.AbilityRecordType.SubAbility, rightApi, rightMap, null, card);
|
||||
left.appendSubAbility(right);
|
||||
return left;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* postFactoryKeywords.
|
||||
@@ -2446,7 +2418,7 @@ public class CardFactoryUtil {
|
||||
}
|
||||
|
||||
if(CardFactoryUtil.hasKeyword(card, "Fuse") != -1) {
|
||||
card.getState(CardCharacteristicName.Original).getSpellAbility().add(buildFusedAbility(card));
|
||||
card.getState(CardCharacteristicName.Original).getSpellAbility().add(AbilityFactory.buildFusedAbility(card));
|
||||
}
|
||||
|
||||
final int evokePos = CardFactoryUtil.hasKeyword(card, "Evoke");
|
||||
|
||||
Reference in New Issue
Block a user