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

@ -885,6 +885,14 @@ public enum MagicAbility {
return abilityList; 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][^,]*)"); private static final Pattern SUB_ABILITY_LIST = Pattern.compile("\"([^\"]*)\"|([A-Za-z][^,]*)");
public static MagicAbility getAbility(final String names) { public static MagicAbility getAbility(final String names) {

View File

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