DealDamageEffect know how much was really dealt
This commit is contained in:
parent
8423a2a87a
commit
169210efbe
4 changed files with 15 additions and 7 deletions
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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;}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue