DealDamageEffect know how much was really dealt

This commit is contained in:
henriquenakashima 2020-09-19 22:58:23 -04:00
parent 8423a2a87a
commit 169210efbe
4 changed files with 15 additions and 7 deletions

View file

@ -128,7 +128,8 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
monster.ResetBlock(); monster.ResetBlock();
} }
this.Apply(new DealDamageEffect(heroes[this.enemyTarget], 2)); DealDamageEffect damageEffect = new DealDamageEffect(heroes[this.enemyTarget], 2);
this.Apply(damageEffect);
DecideEnemyTarget(); DecideEnemyTarget();
StartHeroTurn(); StartHeroTurn();
@ -222,14 +223,18 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
private List<Trigger> activatedTriggers = new List<Trigger>(); private List<Trigger> activatedTriggers = new List<Trigger>();
private List<DamageTrigger> damageTriggers = new List<DamageTrigger>(); private List<DamageTrigger> damageTriggers = new List<DamageTrigger>();
public void DealDamage(DealDamageEffect effect) { public int DealDamage(DealDamageEffect effect) {
effect.Target.DealDamage(effect.Amount); int damageDealt = effect.Target.DealDamage(effect.Amount);
foreach (DamageTrigger dt in this.damageTriggers) { foreach (DamageTrigger dt in this.damageTriggers) {
if (dt.IsTriggeredBy(effect)) { if (dt.IsTriggeredBy(effect)) {
EnqueueActivatedTrigger(dt); EnqueueActivatedTrigger(dt);
} }
} }
// Do this after the card resolution is over to avoid reentraint effects.
RunActivatedTriggers(); RunActivatedTriggers();
return damageDealt;
} }
public void AddBlock(BattleParticipant target, int amount) { public void AddBlock(BattleParticipant target, int amount) {

View file

@ -31,14 +31,15 @@ public class BattleParticipant
return this.maxHP; return this.maxHP;
} }
public void DealDamage(int damage) { public int DealDamage(int damage) {
int blockedDamage = Math.Min(damage, this.block); int blockedDamage = Math.Min(damage, this.block);
if (blockedDamage > 0) { if (blockedDamage > 0) {
this.block -= blockedDamage; this.block -= blockedDamage;
damage -= blockedDamage; damage -= blockedDamage;
} }
damage = Math.Min(this.hp, damage);
this.hp -= damage; this.hp -= damage;
if (this.hp < 0) this.hp = 0; return damage;
} }
public void AddBlock(int block) { public void AddBlock(int block) {

View file

@ -6,6 +6,7 @@ public class DealDamageEffect : IBattleEffect
{ {
private BattleParticipant target; private BattleParticipant target;
private int amount; private int amount;
private int amountDealt;
public DealDamageEffect(BattleParticipant target, int amount) { public DealDamageEffect(BattleParticipant target, int amount) {
this.target = target; this.target = target;
@ -13,9 +14,10 @@ public class DealDamageEffect : IBattleEffect
} }
public void Apply(IBattleEffectResolver resolver) { public void Apply(IBattleEffectResolver resolver) {
resolver.DealDamage(this); this.amountDealt = resolver.DealDamage(this);
} }
public BattleParticipant Target {get => this.target;} public BattleParticipant Target {get => this.target;}
public int Amount {get => this.amount;} public int Amount {get => this.amount;}
public int AmountDealt {get => this.amountDealt;}
} }

View file

@ -3,7 +3,7 @@ using System.Collections.Generic;
using UnityEngine; using UnityEngine;
public interface IBattleEffectResolver { public interface IBattleEffectResolver {
void DealDamage(DealDamageEffect effect); int DealDamage(DealDamageEffect effect);
void AddBlock(BattleParticipant target, int amount); void AddBlock(BattleParticipant target, int amount);
void IncreaseHeroMaxEnergy(int delta); void IncreaseHeroMaxEnergy(int delta);
void IncreaseMaxHP(IncreaseMaxHPEffect effect); void IncreaseMaxHP(IncreaseMaxHPEffect effect);