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();
}
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<Trigger> activatedTriggers = new List<Trigger>();
private List<DamageTrigger> damageTriggers = new List<DamageTrigger>();
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) {

View file

@ -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) {

View file

@ -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;}
}

View file

@ -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);