magarena/src/magic/model/action/GainAbilityAction.java

79 lines
2.7 KiB
Java
Raw Normal View History

2013-04-12 19:32:25 -07:00
package magic.model.action;
2020-01-15 12:02:42 -08:00
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
2013-04-12 19:32:25 -07:00
import magic.model.MagicAbility;
import magic.model.MagicAbilityList;
2013-04-12 19:32:25 -07:00
import magic.model.MagicGame;
import magic.model.MagicPermanent;
import magic.model.MurmurHash3;
2013-04-12 19:32:25 -07:00
import magic.model.mstatic.MagicLayer;
import magic.model.mstatic.MagicStatic;
// Set an ability until end of turn.
public class GainAbilityAction extends MagicAction {
2013-04-12 19:32:25 -07:00
private final MagicPermanent permanent;
private final MagicAbilityList abilityList;
2013-04-12 19:32:25 -07:00
private final boolean duration;
2015-12-31 02:54:52 -08:00
public GainAbilityAction(final MagicPermanent permanent,final MagicAbilityList abilityList, final boolean duration) {
2013-04-12 19:32:25 -07:00
this.permanent=permanent;
this.abilityList=abilityList;
2013-04-12 19:32:25 -07:00
this.duration=duration;
}
2013-06-23 18:33:35 -07:00
public GainAbilityAction(final MagicPermanent permanent,final Set<MagicAbility> abilities, final boolean duration) {
this(permanent,MagicAbility.getAbilityList(abilities), duration);
}
2015-12-31 02:54:52 -08:00
public GainAbilityAction(final MagicPermanent permanent,final MagicAbilityList abilityList) {
this(permanent,abilityList,MagicStatic.UntilEOT);
}
public GainAbilityAction(final MagicPermanent permanent,final List<MagicAbility> abilities) {
2013-05-13 23:11:11 -07:00
this(permanent,EnumSet.copyOf(abilities),MagicStatic.UntilEOT);
}
2013-06-23 18:33:35 -07:00
public GainAbilityAction(final MagicPermanent permanent,final MagicAbility first, final MagicAbility ... rest) {
2013-04-12 19:32:25 -07:00
this(permanent,MagicAbility.of(first,rest),MagicStatic.UntilEOT);
}
2013-06-23 18:33:35 -07:00
public GainAbilityAction(final MagicPermanent permanent,final MagicAbility ability,final boolean duration) {
2013-04-12 19:32:25 -07:00
this(permanent,MagicAbility.of(ability),duration);
}
2013-06-23 18:33:35 -07:00
public GainAbilityAction(final MagicPermanent permanent,final MagicAbility ability) {
2013-04-12 19:32:25 -07:00
this(permanent,MagicAbility.of(ability),MagicStatic.UntilEOT);
}
2013-06-23 18:33:35 -07:00
2013-04-12 19:32:25 -07:00
@Override
public void doAction(final MagicGame game) {
game.doAction(new AddStaticAction(permanent, new MagicStatic(MagicLayer.Ability, duration) {
2013-04-12 19:32:25 -07:00
@Override
public void modAbilityFlags(final MagicPermanent source, final MagicPermanent permanent, final Set<MagicAbility> flags) {
abilityList.giveAbility(permanent, flags);
2013-06-23 18:33:35 -07:00
}
@Override
public long getStateId() {
return MurmurHash3.hash(new long[] {
MagicLayer.Ability.ordinal(),
duration ? -1L : 1L,
abilityList.hashCode(),
});
}
2013-04-12 19:32:25 -07:00
}));
}
@Override
public void undoAction(final MagicGame game) {
}
2013-06-23 18:33:35 -07:00
2013-04-12 19:32:25 -07:00
@Override
public String toString() {
return super.toString() + " (" + permanent + "," + abilityList + ')';
2013-04-12 19:32:25 -07:00
}
}