diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index bda5be6..f20d278 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -128,7 +128,8 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe monster.ResetBlock(); } - this.Apply(new DealDamageEffect(heroes[this.enemyTarget], 2)); + DealDamageEffect damageEffect = new DealDamageEffect(heroes[this.enemyTarget], 2); + this.Apply(damageEffect); DecideEnemyTarget(); StartHeroTurn(); @@ -222,14 +223,18 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe private List activatedTriggers = new List(); private List damageTriggers = new List(); - public void DealDamage(DealDamageEffect effect) { - effect.Target.DealDamage(effect.Amount); + public int DealDamage(DealDamageEffect effect) { + int damageDealt = effect.Target.DealDamage(effect.Amount); foreach (DamageTrigger dt in this.damageTriggers) { if (dt.IsTriggeredBy(effect)) { EnqueueActivatedTrigger(dt); } } + + // Do this after the card resolution is over to avoid reentraint effects. RunActivatedTriggers(); + + return damageDealt; } public void AddBlock(BattleParticipant target, int amount) { diff --git a/Assets/Battle/BattleParticipant.cs b/Assets/Battle/BattleParticipant.cs index dc4b19b..c82cf00 100644 --- a/Assets/Battle/BattleParticipant.cs +++ b/Assets/Battle/BattleParticipant.cs @@ -31,14 +31,15 @@ public class BattleParticipant return this.maxHP; } - public void DealDamage(int damage) { + public int DealDamage(int damage) { int blockedDamage = Math.Min(damage, this.block); if (blockedDamage > 0) { this.block -= blockedDamage; damage -= blockedDamage; } + damage = Math.Min(this.hp, damage); this.hp -= damage; - if (this.hp < 0) this.hp = 0; + return damage; } public void AddBlock(int block) { diff --git a/Assets/Battle/Effects/DealDamageEffect.cs b/Assets/Battle/Effects/DealDamageEffect.cs index 8613a86..add8423 100644 --- a/Assets/Battle/Effects/DealDamageEffect.cs +++ b/Assets/Battle/Effects/DealDamageEffect.cs @@ -6,6 +6,7 @@ public class DealDamageEffect : IBattleEffect { private BattleParticipant target; private int amount; + private int amountDealt; public DealDamageEffect(BattleParticipant target, int amount) { this.target = target; @@ -13,9 +14,10 @@ public class DealDamageEffect : IBattleEffect } public void Apply(IBattleEffectResolver resolver) { - resolver.DealDamage(this); + this.amountDealt = resolver.DealDamage(this); } public BattleParticipant Target {get => this.target;} public int Amount {get => this.amount;} + public int AmountDealt {get => this.amountDealt;} } diff --git a/Assets/Battle/IBattleEffectResolver.cs b/Assets/Battle/IBattleEffectResolver.cs index ddfbf4d..cb4a3ec 100644 --- a/Assets/Battle/IBattleEffectResolver.cs +++ b/Assets/Battle/IBattleEffectResolver.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; public interface IBattleEffectResolver { - void DealDamage(DealDamageEffect effect); + int DealDamage(DealDamageEffect effect); void AddBlock(BattleParticipant target, int amount); void IncreaseHeroMaxEnergy(int delta); void IncreaseMaxHP(IncreaseMaxHPEffect effect);