use MagicAbilityList instead of Set<MagicAbility> to handle abilities with implementation

master
melvin 2014-02-01 11:18:06 +08:00
parent 4abb79f8ce
commit abb0c925a4
2 changed files with 14 additions and 7 deletions

View File

@ -884,6 +884,14 @@ public enum MagicAbility {
}
return abilityList;
}
public static MagicAbilityList getAbilityList(final Set<MagicAbility> abilities) {
final MagicAbilityList abilityList = new MagicAbilityList();
for (final MagicAbility ability : abilities) {
ability.addAbility(abilityList, ability.getName());
}
return abilityList;
}
private static final Pattern SUB_ABILITY_LIST = Pattern.compile("\"([^\"]*)\"|([A-Za-z][^,]*)");

View File

@ -3,6 +3,7 @@ package magic.model.action;
import magic.model.MagicAbility;
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MagicAbilityList;
import magic.model.mstatic.MagicLayer;
import magic.model.mstatic.MagicStatic;
@ -14,12 +15,12 @@ import java.util.List;
public class MagicGainAbilityAction extends MagicAction {
private final MagicPermanent permanent;
private final Set<MagicAbility> abilities;
private final MagicAbilityList abilityList;
private final boolean duration;
public MagicGainAbilityAction(final MagicPermanent permanent,final Set<MagicAbility> abilities, final boolean duration) {
this.permanent=permanent;
this.abilities=abilities;
this.abilityList=MagicAbility.getAbilityList(abilities);
this.duration=duration;
}
@ -41,15 +42,13 @@ public class MagicGainAbilityAction extends MagicAction {
@Override
public void doAction(final MagicGame game) {
game.doAction(new MagicAddStaticAction(permanent, new MagicStatic(
MagicLayer.Ability,
duration) {
game.doAction(new MagicAddStaticAction(permanent, new MagicStatic(MagicLayer.Ability, duration) {
@Override
public void modAbilityFlags(
final MagicPermanent source,
final MagicPermanent permanent,
final Set<MagicAbility> flags) {
flags.addAll(abilities);
abilityList.giveAbility(permanent, flags);
}
}));
}
@ -60,6 +59,6 @@ public class MagicGainAbilityAction extends MagicAction {
@Override
public String toString() {
return super.toString() + " (" + permanent + "," + abilities + ')';
return super.toString() + " (" + permanent + "," + abilityList + ')';
}
}