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 java.util.Map;
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
import forge.CardCharacteristicName;
|
||||||
import forge.card.cost.Cost;
|
import forge.card.cost.Cost;
|
||||||
import forge.card.spellability.AbilitySub;
|
import forge.card.spellability.AbilitySub;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
@@ -120,7 +121,7 @@ public final class AbilityFactory {
|
|||||||
return abCost;
|
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;
|
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
|
} // end class AbilityFactory
|
||||||
|
|||||||
@@ -291,8 +291,10 @@ public class CardFactory {
|
|||||||
|
|
||||||
if ( state == CardCharacteristicName.LeftSplit || state == CardCharacteristicName.RightSplit )
|
if ( state == CardCharacteristicName.LeftSplit || state == CardCharacteristicName.RightSplit )
|
||||||
{
|
{
|
||||||
card.getState(CardCharacteristicName.Original).getSpellAbility().addAll(card.getCharacteristics().getSpellAbility());
|
CardCharacteristics original = card.getState(CardCharacteristicName.Original);
|
||||||
card.getState(CardCharacteristicName.Original).getIntrinsicKeyword().addAll(card.getIntrinsicKeyword()); // Copy 'Fuse' to original side
|
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>
|
* <p>
|
||||||
* postFactoryKeywords.
|
* postFactoryKeywords.
|
||||||
@@ -2446,7 +2418,7 @@ public class CardFactoryUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(CardFactoryUtil.hasKeyword(card, "Fuse") != -1) {
|
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");
|
final int evokePos = CardFactoryUtil.hasKeyword(card, "Evoke");
|
||||||
|
|||||||
Reference in New Issue
Block a user