mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Merge pull request #618 from Card-Forge/triggerDamageByController
TriggerDamageDoneOnceByController
This commit is contained in:
@@ -19,6 +19,8 @@ import forge.game.Game;
|
|||||||
import forge.game.GameEntity;
|
import forge.game.GameEntity;
|
||||||
import forge.game.GameObjectPredicates;
|
import forge.game.GameObjectPredicates;
|
||||||
import forge.game.ability.AbilityKey;
|
import forge.game.ability.AbilityKey;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.player.PlayerCollection;
|
||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
|
|
||||||
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||||
@@ -66,11 +68,15 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
|||||||
game.getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Targets -> Source
|
// Targets -> Source
|
||||||
for (Map.Entry<GameEntity, Map<Card, Integer>> e : columnMap().entrySet()) {
|
for (Map.Entry<GameEntity, Map<Card, Integer>> e : columnMap().entrySet()) {
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (final int i : e.getValue().values()) {
|
// controller list
|
||||||
sum += i;
|
PlayerCollection controllers = new PlayerCollection();
|
||||||
|
for (Entry<Card, Integer> ec : e.getValue().entrySet()) {
|
||||||
|
sum += ec.getValue();
|
||||||
|
controllers.add(ec.getKey().getController());
|
||||||
}
|
}
|
||||||
if (sum > 0) {
|
if (sum > 0) {
|
||||||
final GameEntity ge = e.getKey();
|
final GameEntity ge = e.getKey();
|
||||||
@@ -81,6 +87,15 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
|||||||
|
|
||||||
game.getTriggerHandler().runTrigger(TriggerType.DamageDoneOnce, runParams, false);
|
game.getTriggerHandler().runTrigger(TriggerType.DamageDoneOnce, runParams, false);
|
||||||
}
|
}
|
||||||
|
for (Player p : controllers) {
|
||||||
|
final GameEntity ge = e.getKey();
|
||||||
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
|
runParams.put(AbilityKey.DamageTarget, ge);
|
||||||
|
runParams.put(AbilityKey.DamageSource, p);
|
||||||
|
runParams.put(AbilityKey.IsCombatDamage, isCombat);
|
||||||
|
|
||||||
|
game.getTriggerHandler().runTrigger(TriggerType.DamageDoneOnceByController, runParams, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
final Map<AbilityKey, Object> runParams = AbilityKey.newMap();
|
||||||
|
|||||||
@@ -17,14 +17,8 @@ public class TriggerDamageAll extends Trigger {
|
|||||||
@Override
|
@Override
|
||||||
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
||||||
if (hasParam("CombatDamage")) {
|
if (hasParam("CombatDamage")) {
|
||||||
if (getParam("CombatDamage").equals("True")) {
|
if (getParam("CombatDamage").equals("True") != (Boolean) runParams.get(AbilityKey.IsCombatDamage)) {
|
||||||
if (!((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (getParam("CombatDamage").equals("False")) {
|
|
||||||
if (((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final CardDamageMap table = (CardDamageMap) runParams.get(AbilityKey.DamageMap);
|
final CardDamageMap table = (CardDamageMap) runParams.get(AbilityKey.DamageMap);
|
||||||
|
|||||||
@@ -60,14 +60,8 @@ public class TriggerDamageDealtOnce extends Trigger {
|
|||||||
@Override
|
@Override
|
||||||
public final boolean performTest(final Map<AbilityKey, Object> runParams) {
|
public final boolean performTest(final Map<AbilityKey, Object> runParams) {
|
||||||
if (hasParam("CombatDamage")) {
|
if (hasParam("CombatDamage")) {
|
||||||
if (getParam("CombatDamage").equals("True")) {
|
if (getParam("CombatDamage").equals("True") != (Boolean) runParams.get(AbilityKey.IsCombatDamage)) {
|
||||||
if (!((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (getParam("CombatDamage").equals("False")) {
|
|
||||||
if (((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,14 +22,8 @@ public class TriggerDamageDoneOnce extends Trigger {
|
|||||||
@Override
|
@Override
|
||||||
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
||||||
if (hasParam("CombatDamage")) {
|
if (hasParam("CombatDamage")) {
|
||||||
if (getParam("CombatDamage").equals("True")) {
|
if (getParam("CombatDamage").equals("True") != (Boolean) runParams.get(AbilityKey.IsCombatDamage)) {
|
||||||
if (!((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (getParam("CombatDamage").equals("False")) {
|
|
||||||
if (((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package forge.game.trigger;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import forge.game.ability.AbilityKey;
|
||||||
|
import forge.game.card.Card;
|
||||||
|
import forge.game.card.CardUtil;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
|
import forge.util.Localizer;
|
||||||
|
|
||||||
|
public class TriggerDamageDoneOnceByController extends Trigger {
|
||||||
|
|
||||||
|
public TriggerDamageDoneOnceByController(Map<String, String> params, Card host, boolean intrinsic) {
|
||||||
|
super(params, host, intrinsic);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean performTest(Map<AbilityKey, Object> runParams) {
|
||||||
|
if (hasParam("CombatDamage")) {
|
||||||
|
if (getParam("CombatDamage").equals("True") != (Boolean) runParams.get(AbilityKey.IsCombatDamage)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matchesValidParam("ValidTarget", runParams.get(AbilityKey.DamageTarget))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!matchesValidParam("ValidSource", runParams.get(AbilityKey.DamageSource))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTriggeringObjects(SpellAbility sa, Map<AbilityKey, Object> runParams) {
|
||||||
|
|
||||||
|
Object target = runParams.get(AbilityKey.DamageTarget);
|
||||||
|
if (target instanceof Card) {
|
||||||
|
target = CardUtil.getLKICopy((Card)runParams.get(AbilityKey.DamageTarget));
|
||||||
|
}
|
||||||
|
sa.setTriggeringObject(AbilityKey.Target, target);
|
||||||
|
sa.setTriggeringObject(AbilityKey.Source, runParams.get(AbilityKey.DamageSource));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getImportantStackObjects(SpellAbility sa) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (sa.getTriggeringObject(AbilityKey.Target) != null) {
|
||||||
|
sb.append(Localizer.getInstance().getMessage("lblDamaged")).append(": ").append(sa.getTriggeringObject(AbilityKey.Target)).append(", ");
|
||||||
|
}
|
||||||
|
sb.append(Localizer.getInstance().getMessage("lblDamageSource")).append(": ").append(sa.getTriggeringObject(AbilityKey.Source));
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -65,14 +65,8 @@ public class TriggerDamagePrevented extends Trigger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (hasParam("CombatDamage")) {
|
if (hasParam("CombatDamage")) {
|
||||||
if (getParam("CombatDamage").equals("True")) {
|
if (getParam("CombatDamage").equals("True") != (Boolean) runParams.get(AbilityKey.IsCombatDamage)) {
|
||||||
if (!((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (getParam("CombatDamage").equals("False")) {
|
|
||||||
if (((Boolean) runParams.get(AbilityKey.IsCombatDamage))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ public enum TriggerType {
|
|||||||
DamageDealtOnce(TriggerDamageDealtOnce.class),
|
DamageDealtOnce(TriggerDamageDealtOnce.class),
|
||||||
DamageDone(TriggerDamageDone.class),
|
DamageDone(TriggerDamageDone.class),
|
||||||
DamageDoneOnce(TriggerDamageDoneOnce.class),
|
DamageDoneOnce(TriggerDamageDoneOnce.class),
|
||||||
|
DamageDoneOnceByController(TriggerDamageDoneOnceByController.class),
|
||||||
DamagePrevented(TriggerDamagePrevented.class),
|
DamagePrevented(TriggerDamagePrevented.class),
|
||||||
DamagePreventedOnce(TriggerDamagePreventedOnce.class),
|
DamagePreventedOnce(TriggerDamagePreventedOnce.class),
|
||||||
DayTimeChanges (TriggerDayTimeChanges.class),
|
DayTimeChanges (TriggerDayTimeChanges.class),
|
||||||
|
|||||||
Reference in New Issue
Block a user