mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 19:41:59 -08:00
refactored targets
This commit is contained in:
parent
37cec55493
commit
5c01b832b9
16 changed files with 46 additions and 48 deletions
|
|
@ -86,12 +86,12 @@ class FireballEffect extends OneShotEffect<FireballEffect> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int numTargets = source.getTargets().get(0).getTargets().size();
|
int numTargets = targetPointer.getTargets(source).size();
|
||||||
int damage = source.getManaCostsToPay().getX();
|
int damage = source.getManaCostsToPay().getX();
|
||||||
if (numTargets > 0) {
|
if (numTargets > 0) {
|
||||||
int damagePer = damage/numTargets;
|
int damagePer = damage/numTargets;
|
||||||
if (damagePer > 0) {
|
if (damagePer > 0) {
|
||||||
for (UUID targetId: source.getTargets().get(0).getTargets()) {
|
for (UUID targetId: targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(targetId);
|
Permanent permanent = game.getPermanent(targetId);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
permanent.damage(damagePer, source.getSourceId(), game, true, false);
|
permanent.damage(damagePer, source.getSourceId(), game, true, false);
|
||||||
|
|
|
||||||
|
|
@ -88,15 +88,12 @@ class MorbidPlunderEffect extends OneShotEffect<MorbidPlunderEffect> {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
List<UUID> targets = source.getTargets().get(0).getTargets();
|
for (UUID target : targetPointer.getTargets(source)) {
|
||||||
if (targets.size() > 0) {
|
|
||||||
for (UUID target : targets) {
|
|
||||||
Card card = game.getCard(target);
|
Card card = game.getCard(target);
|
||||||
if (card != null) {
|
if (card != null) {
|
||||||
result |= card.moveToZone(Zone.HAND, source.getId(), game, true);
|
result |= card.moveToZone(Zone.HAND, source.getId(), game, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ class ArcTrailEffect extends OneShotEffect {
|
||||||
boolean twoDamageDone = false;
|
boolean twoDamageDone = false;
|
||||||
int damage = 2;
|
int damage = 2;
|
||||||
|
|
||||||
for ( UUID target : source.getTargets().get(0).getTargets() ) {
|
for ( UUID target : targetPointer.getTargets(source) ) {
|
||||||
Permanent permanent = game.getPermanent(target);
|
Permanent permanent = game.getPermanent(target);
|
||||||
|
|
||||||
if ( twoDamageDone ) {
|
if ( twoDamageDone ) {
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ class FulgentDistractionEffect extends OneShotEffect<FulgentDistractionEffect> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
for ( UUID target : source.getTargets().get(0).getTargets() ) {
|
for ( UUID target : targetPointer.getTargets(source) ) {
|
||||||
Permanent creature = game.getPermanent(target);
|
Permanent creature = game.getPermanent(target);
|
||||||
|
|
||||||
List<UUID> copiedAttachments = new ArrayList<UUID>(creature.getAttachments());
|
List<UUID> copiedAttachments = new ArrayList<UUID>(creature.getAttachments());
|
||||||
|
|
|
||||||
|
|
@ -174,7 +174,7 @@ class LiegeOfTheTangleEffect extends ContinuousEffectImpl<LiegeOfTheTangleEffect
|
||||||
public void init(Ability source, Game game) {
|
public void init(Ability source, Game game) {
|
||||||
super.init(source, game);
|
super.init(source, game);
|
||||||
if (this.affectedObjectsSet) {
|
if (this.affectedObjectsSet) {
|
||||||
for (UUID permId: source.getTargets().get(0).getTargets()) {
|
for (UUID permId: targetPointer.getTargets(source)) {
|
||||||
objects.add(permId);
|
objects.add(permId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ class RustTickTapTargetEffect extends TapTargetEffect {
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
Permanent rustTick = game.getPermanent(source.getSourceId());
|
Permanent rustTick = game.getPermanent(source.getSourceId());
|
||||||
if (rustTick != null) rustTick.clearConnectedCards();
|
if (rustTick != null) rustTick.clearConnectedCards();
|
||||||
for (UUID target : source.getTargets().get(0).getTargets()) {
|
for (UUID target : targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(target);
|
Permanent permanent = game.getPermanent(target);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
rustTick.addConnectedCard(permanent.getId());
|
rustTick.addConnectedCard(permanent.getId());
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ class KhalniGemReturnToHandTargetEffect extends OneShotEffect<KhalniGemReturnToH
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
for ( UUID target : source.getTargets().get(0).getTargets() ) {
|
for ( UUID target : targetPointer.getTargets(source) ) {
|
||||||
Permanent permanent = game.getPermanent(target);
|
Permanent permanent = game.getPermanent(target);
|
||||||
if ( permanent != null ) {
|
if ( permanent != null ) {
|
||||||
permanent.moveToZone(Zone.HAND, source.getId(), game, true);
|
permanent.moveToZone(Zone.HAND, source.getId(), game, true);
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ public class DamageMultiEffect extends OneShotEffect<DamageMultiEffect> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
|
if (source.getTargets().size() > 0) {
|
||||||
Target multiTarget = source.getTargets().get(0);
|
Target multiTarget = source.getTargets().get(0);
|
||||||
for (UUID target: multiTarget.getTargets()) {
|
for (UUID target: multiTarget.getTargets()) {
|
||||||
Permanent permanent = game.getPermanent(target);
|
Permanent permanent = game.getPermanent(target);
|
||||||
|
|
@ -79,6 +80,7 @@ public class DamageMultiEffect extends OneShotEffect<DamageMultiEffect> {
|
||||||
player.damage(multiTarget.getTargetAmount(target), source.getId(), game, false, true);
|
player.damage(multiTarget.getTargetAmount(target), source.getId(), game, false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ public class GainLifeTargetEffect extends OneShotEffect<GainLifeTargetEffect> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
for (UUID playerId: source.getTargets().get(0).getTargets()) {
|
for (UUID playerId: targetPointer.getTargets(source)) {
|
||||||
Player player = game.getPlayer(playerId);
|
Player player = game.getPlayer(playerId);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.gainLife(life, game);
|
player.gainLife(life, game);
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ public class SacrificeTargetEffect extends OneShotEffect<SacrificeTargetEffect>
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int affectedTargets = 0;
|
int affectedTargets = 0;
|
||||||
for (UUID permanentId : source.getTargets().get(0).getTargets()) {
|
for (UUID permanentId : targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(permanentId);
|
Permanent permanent = game.getPermanent(permanentId);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
permanent.sacrifice(source.getSourceId(), game);
|
permanent.sacrifice(source.getSourceId(), game);
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
public boolean replaceEvent(GameEvent event, Ability source, Game game) {
|
||||||
if (source.getTargets().get(0).getTargets().size() < 2) {
|
if (targetPointer.getTargets(source).size() < 2) {
|
||||||
used = true;
|
used = true;
|
||||||
} else {
|
} else {
|
||||||
count++;
|
count++;
|
||||||
|
|
@ -82,7 +82,7 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
|
||||||
// not clear how to turn off the effect for more than one target
|
// not clear how to turn off the effect for more than one target
|
||||||
// especially as some targets may leave the battlefield since the effect creation
|
// especially as some targets may leave the battlefield since the effect creation
|
||||||
// so handling this in applies method is the only option for now for such cases
|
// so handling this in applies method is the only option for now for such cases
|
||||||
if (count == source.getTargets().get(0).getTargets().size()) {
|
if (count == targetPointer.getTargets(source).size()) {
|
||||||
// this won't work for targets disappeared before applies() return true
|
// this won't work for targets disappeared before applies() return true
|
||||||
used = true;
|
used = true;
|
||||||
}
|
}
|
||||||
|
|
@ -91,10 +91,8 @@ public class SkipNextUntapTargetEffect extends ReplacementEffectImpl<SkipNextUnt
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean applies(GameEvent event, Ability source, Game game) {
|
public boolean applies(GameEvent event, Ability source, Game game) {
|
||||||
if (game.getTurn().getStepType() == PhaseStep.UNTAP &&
|
if (game.getTurn().getStepType() == PhaseStep.UNTAP && event.getType() == EventType.UNTAP) {
|
||||||
event.getType() == EventType.UNTAP) {
|
for (UUID target : targetPointer.getTargets(source)) {
|
||||||
|
|
||||||
for (UUID target : source.getTargets().get(0).getTargets()) {
|
|
||||||
if (event.getTargetId().equals(target)) {
|
if (event.getTargetId().equals(target)) {
|
||||||
if (!usedFor.contains(target)) {
|
if (!usedFor.contains(target)) {
|
||||||
usedFor.add(target);
|
usedFor.add(target);
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ public class TapTargetEffect extends OneShotEffect<TapTargetEffect> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
for (UUID target: source.getTargets().get(0).getTargets()) {
|
for (UUID target: targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(target);
|
Permanent permanent = game.getPermanent(target);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
permanent.tap(game);
|
permanent.tap(game);
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ public class BoostTargetEffect extends ContinuousEffectImpl<BoostTargetEffect> {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int affectedTargets = 0;
|
int affectedTargets = 0;
|
||||||
for (UUID permanentId : source.getTargets().get(0).getTargets()) {
|
for (UUID permanentId : targetPointer.getTargets(source)) {
|
||||||
Permanent target = (Permanent) game.getPermanent(permanentId);
|
Permanent target = (Permanent) game.getPermanent(permanentId);
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
target.addPower(power.calculate(game, source));
|
target.addPower(power.calculate(game, source));
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ public class GainAbilityTargetEffect extends ContinuousEffectImpl {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int affectedTargets = 0;
|
int affectedTargets = 0;
|
||||||
for (UUID permanentId : source.getTargets().get(0).getTargets()) {
|
for (UUID permanentId : targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(permanentId);
|
Permanent permanent = game.getPermanent(permanentId);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
permanent.addAbility(ability);
|
permanent.addAbility(ability);
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ public class LoseAllAbilitiesTargetEffect extends ContinuousEffectImpl {
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Game game, Ability source) {
|
public boolean apply(Game game, Ability source) {
|
||||||
int affectedTargets = 0;
|
int affectedTargets = 0;
|
||||||
for (UUID permanentId : source.getTargets().get(0).getTargets()) {
|
for (UUID permanentId : targetPointer.getTargets(source)) {
|
||||||
Permanent permanent = game.getPermanent(permanentId);
|
Permanent permanent = game.getPermanent(permanentId);
|
||||||
if (permanent != null) {
|
if (permanent != null) {
|
||||||
permanent.getAbilities().clear();
|
permanent.getAbilities().clear();
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ public class FirstTargetPointer implements TargetPointer {
|
||||||
@Override
|
@Override
|
||||||
public List<UUID> getTargets(Ability source) {
|
public List<UUID> getTargets(Ability source) {
|
||||||
ArrayList<UUID> target = new ArrayList<UUID>();
|
ArrayList<UUID> target = new ArrayList<UUID>();
|
||||||
|
if (source.getTargets().size() > 0)
|
||||||
target.addAll(source.getTargets().get(0).getTargets());
|
target.addAll(source.getTargets().get(0).getTargets());
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue