2013-04-12 19:32:25 -07:00
|
|
|
package magic.model.action;
|
|
|
|
|
|
|
|
import magic.model.MagicAbility;
|
2014-04-18 06:58:52 -07:00
|
|
|
import magic.model.MagicAbilityList;
|
2013-04-12 19:32:25 -07:00
|
|
|
import magic.model.MagicGame;
|
|
|
|
import magic.model.MagicPermanent;
|
2017-07-29 06:33:12 -07:00
|
|
|
import magic.model.MurmurHash3;
|
2013-04-12 19:32:25 -07:00
|
|
|
import magic.model.mstatic.MagicLayer;
|
|
|
|
import magic.model.mstatic.MagicStatic;
|
|
|
|
|
2013-05-13 23:11:11 -07:00
|
|
|
import java.util.EnumSet;
|
|
|
|
import java.util.List;
|
2014-04-18 06:58:52 -07:00
|
|
|
import java.util.Set;
|
2013-04-12 19:32:25 -07:00
|
|
|
|
|
|
|
// Set an ability until end of turn.
|
2015-04-14 03:53:13 -07:00
|
|
|
public class GainAbilityAction extends MagicAction {
|
2013-04-12 19:32:25 -07:00
|
|
|
|
|
|
|
private final MagicPermanent permanent;
|
2014-01-31 19:18:06 -08:00
|
|
|
private final MagicAbilityList abilityList;
|
2013-04-12 19:32:25 -07:00
|
|
|
private final boolean duration;
|
2015-12-31 02:54:52 -08:00
|
|
|
|
2015-04-14 03:53:13 -07:00
|
|
|
public GainAbilityAction(final MagicPermanent permanent,final MagicAbilityList abilityList, final boolean duration) {
|
2013-04-12 19:32:25 -07:00
|
|
|
this.permanent=permanent;
|
2014-01-31 19:58:32 -08:00
|
|
|
this.abilityList=abilityList;
|
2013-04-12 19:32:25 -07:00
|
|
|
this.duration=duration;
|
|
|
|
}
|
2013-06-23 18:33:35 -07:00
|
|
|
|
2015-04-14 03:53:13 -07:00
|
|
|
public GainAbilityAction(final MagicPermanent permanent,final Set<MagicAbility> abilities, final boolean duration) {
|
2014-01-31 19:58:32 -08:00
|
|
|
this(permanent,MagicAbility.getAbilityList(abilities), duration);
|
|
|
|
}
|
2015-12-31 02:54:52 -08:00
|
|
|
|
2015-04-14 03:53:13 -07:00
|
|
|
public GainAbilityAction(final MagicPermanent permanent,final MagicAbilityList abilityList) {
|
2014-01-31 19:58:32 -08:00
|
|
|
this(permanent,abilityList,MagicStatic.UntilEOT);
|
|
|
|
}
|
|
|
|
|
2015-04-14 03:53:13 -07:00
|
|
|
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
|
|
|
|
2015-04-14 03:53:13 -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
|
|
|
|
2015-04-14 03:53:13 -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
|
|
|
|
2015-04-14 03:53:13 -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) {
|
2015-04-13 00:12:57 -07:00
|
|
|
game.doAction(new AddStaticAction(permanent, new MagicStatic(MagicLayer.Ability, duration) {
|
2013-04-12 19:32:25 -07:00
|
|
|
@Override
|
2015-05-15 04:39:05 -07:00
|
|
|
public void modAbilityFlags(final MagicPermanent source, final MagicPermanent permanent, final Set<MagicAbility> flags) {
|
2014-01-31 19:18:06 -08:00
|
|
|
abilityList.giveAbility(permanent, flags);
|
2013-06-23 18:33:35 -07:00
|
|
|
}
|
2017-07-29 06:33:12 -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() {
|
2014-01-31 19:18:06 -08:00
|
|
|
return super.toString() + " (" + permanent + "," + abilityList + ')';
|
2013-04-12 19:32:25 -07:00
|
|
|
}
|
|
|
|
}
|