Implement statuses, GolemCharge, GolemBerserk, stun

This commit is contained in:
henriquenakashima 2020-09-20 22:02:34 -04:00
parent caf782c884
commit ef9ec43c8a
16 changed files with 260 additions and 38 deletions

View file

@ -175,6 +175,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
// End of hero turn
this.heroDeck.DiscardHand();
foreach (BattleHero hero in this.heroes) {
hero.TickStatuses();
}
}
private IEnumerator RunMonsterTurn() {
@ -199,6 +202,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
// End of monster turn
this.monsterDeck.DiscardHand();
foreach (BattleMonster monster in this.monsters) {
monster.TickStatuses();
}
}
public void NotifyHeroCardUsed(HeroCard card) {
@ -243,11 +249,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
public bool CanUseHeroCard(HeroCard card) {
return this.heroTurn && card.Owner.IsAlive() && this.heroEnergy.CanPayForCard(card);
return this.heroTurn && card.Owner.CanUseCard(card) && this.heroEnergy.CanPayForCard(card);
}
public bool CanUseMonsterCard(MonsterCard card) {
return !this.heroTurn && card.Owner.IsAlive() && this.monsterEnergy.CanPayForCard(card);
return !this.heroTurn && card.Owner.CanUseCard(card) && this.monsterEnergy.CanPayForCard(card);
}
public BattleDeck<HeroCard> GetHeroDeck() {
@ -305,14 +311,29 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
effect.Target.IncreaseMaxHP(effect.Amount);
}
public void AcquireHeroCards(AcquireCardsEffect effect) {
public void AcquireCards(AcquireCardsEffect effect) {
if (effect.Participant == null) return;
BattleHero hero = (BattleHero) effect.Participant;
foreach (CardId cardId in effect.CardIds) {
HeroCard acquiredCard = this.heroCardDatabase.CreateCard((int) cardId, hero);
if (effect.Participant.IsHero()) {
this.AcquireCardsTyped(effect, this.heroDeck, this.heroCardDatabase);
} else {
this.AcquireCardsTyped(effect, this.monsterDeck, this.monsterCardDatabase);
}
}
private void AcquireCardsTyped<BaseCardT>(
AcquireCardsEffect effect,
BattleDeck<BaseCardT> deck,
CardDatabase<BaseCardT> cardDatabase)
where BaseCardT : BaseCard {
foreach (int cardId in effect.CardIds) {
BaseCardT acquiredCard = cardDatabase.CreateCard(cardId, effect.Participant);
switch (effect.Zone) {
case BattleZone.DrawPile:
this.heroDeck.PutCardOnTopOfDrawPile(acquiredCard);
deck.PutCardOnTopOfDrawPile(acquiredCard);
break;
case BattleZone.DiscardPile:
deck.MoveCardToDiscard(acquiredCard);
break;
default:
throw new System.NotImplementedException();
@ -320,7 +341,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
}
if (effect.Zone == BattleZone.DrawPile) {
this.heroDeck.ShuffleDrawPile();
deck.ShuffleDrawPile();
}
}
@ -328,9 +349,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
private List<DamageTrigger> damageTriggers = new List<DamageTrigger>();
public int DealDamage(DealDamageEffect effect) {
Debug.Log("DealDamage to " + effect.Target.GetDisplayName() + " " + effect.Amount);
if (effect.Target == null) return 0;
int damageDealt = effect.Target.DealDamage(effect.Amount);
Debug.Log("damageDealt " + damageDealt);
foreach (DamageTrigger dt in this.damageTriggers) {
if (dt.IsTriggeredBy(effect)) {
EnqueueActivatedTrigger(dt);
@ -355,6 +378,11 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
effect.Target.AddBlock(effect.Amount);
}
public void AddStatus(StatusEffect effect) {
if (effect.Target == null) return;
effect.Target.AddStatus(effect.Status, effect.Amount);
}
public void ArmDamageTrigger(DamageTrigger damageTrigger) {
this.damageTriggers.Add(damageTrigger);
}