Implement Triggers and Scarring

This commit is contained in:
henriquenakashima 2020-09-19 22:42:51 -04:00
parent cbc8c8b6cd
commit 265c24ea1c
18 changed files with 247 additions and 5 deletions

View file

@ -103,6 +103,8 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
private void StartHeroTurn() {
this.heroTurn = true;
this.damageTriggers.RemoveAll(t => t.Expiration == TriggerExpiration.StartOfNextHeroTurn);
this.energy = this.maxEnergy;
foreach (BattleHero hero in this.heroes) {
@ -126,7 +128,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
monster.ResetBlock();
}
heroes[this.enemyTarget].DealDamage(2);
this.Apply(new DealDamageEffect(heroes[this.enemyTarget], 2));
DecideEnemyTarget();
StartHeroTurn();
@ -196,6 +198,10 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
this.maxEnergy += delta;
}
public void IncreaseMaxHP(IncreaseMaxHPEffect effect) {
effect.Target.IncreaseMaxHP(effect.Amount);
}
public void AcquireHeroCards(CardId[] cardIds, BattleZone zone, BattleHero owner) {
foreach (CardId cardId in cardIds) {
BaseCard acquiredCard = CardDatabase.CreateCard(cardId, owner);
@ -213,11 +219,38 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
}
public void DealDamage(BattleParticipant target, int amount) {
target.DealDamage(amount);
private List<Trigger> activatedTriggers = new List<Trigger>();
private List<DamageTrigger> damageTriggers = new List<DamageTrigger>();
public void DealDamage(DealDamageEffect effect) {
effect.Target.DealDamage(effect.Amount);
foreach (DamageTrigger dt in this.damageTriggers) {
if (dt.IsTriggeredBy(effect)) {
EnqueueActivatedTrigger(dt);
}
}
RunActivatedTriggers();
}
public void AddBlock(BattleParticipant target, int amount) {
target.AddBlock(amount);
}
public void ArmDamageTrigger(DamageTrigger damageTrigger) {
this.damageTriggers.Add(damageTrigger);
}
private void EnqueueActivatedTrigger(Trigger trigger) {
this.activatedTriggers.Add(trigger);
}
private void RunActivatedTriggers() {
foreach (Trigger t in this.activatedTriggers) {
t.Run(this);
}
this.activatedTriggers.Clear();
// Cleanup expired triggers
this.damageTriggers.RemoveAll(t => t.Expired);
}
}