diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index 6acf60a..c39e02c 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -194,7 +194,24 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } // IBattleEffectResolver - public void IncreaseMaxEnergy(int delta) { + public void IncreaseHeroMaxEnergy(int delta) { this.maxEnergy += delta; } + + public void AcquireHeroCards(CardId[] cardIds, BattleZone zone, BattleHero owner) { + foreach (CardId cardId in cardIds) { + BaseCard acquiredCard = CardDatabase.CreateCard(cardId, owner); + switch (zone) { + case BattleZone.DrawPile: + this.GetHeroDeck().PutCardOnTopOfDrawPile(acquiredCard); + break; + default: + throw new System.NotImplementedException(); + } + } + + if (zone == BattleZone.DrawPile) { + this.GetHeroDeck().ShuffleDrawPile(); + } + } } diff --git a/Assets/Battle/BattleZone.cs b/Assets/Battle/BattleZone.cs new file mode 100644 index 0000000..6d46fd5 --- /dev/null +++ b/Assets/Battle/BattleZone.cs @@ -0,0 +1,7 @@ +public enum BattleZone { + DrawPile, + Hand, + DiscardPile, + HeroPlayArea, + MonsterPlayArea, +} diff --git a/Assets/Battle/BattleZone.cs.meta b/Assets/Battle/BattleZone.cs.meta new file mode 100644 index 0000000..f20719a --- /dev/null +++ b/Assets/Battle/BattleZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6713790a4eefea84183d074f59de689c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/CardDatabase.cs b/Assets/Battle/CardDatabase.cs index d723975..7f75d08 100644 --- a/Assets/Battle/CardDatabase.cs +++ b/Assets/Battle/CardDatabase.cs @@ -5,6 +5,7 @@ using UnityEngine; public enum CardId { CrashingPunch, Cover, + LightningStrike, Thunderstorm, } @@ -13,6 +14,7 @@ public class CardDatabase private static Dictionary CARD_TO_HERO = new Dictionary() { {CardId.CrashingPunch, HeroId.Brute}, {CardId.Cover, HeroId.Brute}, + {CardId.LightningStrike, HeroId.Shaman}, {CardId.Thunderstorm, HeroId.Shaman}, }; @@ -23,6 +25,8 @@ public class CardDatabase return new CardCrashingPunch(owner); case CardId.Cover: return new CardCover(owner); + case CardId.LightningStrike: + return new CardLightningStrike(owner); case CardId.Thunderstorm: return new CardThunderstorm(owner); default: diff --git a/Assets/Battle/Cards/CardLightningStrike.cs b/Assets/Battle/Cards/CardLightningStrike.cs new file mode 100644 index 0000000..272fecc --- /dev/null +++ b/Assets/Battle/Cards/CardLightningStrike.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CardLightningStrike : BaseCard +{ + public CardLightningStrike(BattleParticipant owner) + : base(owner, CardId.LightningStrike, "Lightning Strike", 2, CardType.Action, + "Deals 3 damage to target.") { + } + + public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + SingleTargeting singleTargeting = new SingleTargeting(new AnyTargetPolicy()); + yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); + BattleParticipant target = singleTargeting.GetTarget(); + Debug.Log("Striking " + target + " with lightning."); + target.DealDamage(3); + } +} diff --git a/Assets/Battle/Cards/CardLightningStrike.cs.meta b/Assets/Battle/Cards/CardLightningStrike.cs.meta new file mode 100644 index 0000000..94135a7 --- /dev/null +++ b/Assets/Battle/Cards/CardLightningStrike.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11d435c247746fa4b91e5808379f51f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/Cards/CardThunderstorm.cs b/Assets/Battle/Cards/CardThunderstorm.cs index bf2c303..dcb339d 100644 --- a/Assets/Battle/Cards/CardThunderstorm.cs +++ b/Assets/Battle/Cards/CardThunderstorm.cs @@ -6,12 +6,13 @@ public class CardThunderstorm : BaseCard { public CardThunderstorm(BattleParticipant owner) : base(owner, CardId.Thunderstorm, "Thunderstorm", 3, CardType.Enchantment, - "Adds 1 energy.") { + "Add 1 max energy. Acquire 2 Lightning Strike into draw pile.") { } public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { Debug.Log("A storm is brewing."); effectApplier.Apply(new IncreaseMaxEnergyEffect(1)); + effectApplier.Apply(new AcquireCardsEffect(new CardId[] {CardId.LightningStrike, CardId.LightningStrike}, BattleZone.DrawPile, this.owner)); yield break; } } diff --git a/Assets/Battle/Effects/AcquireCardsEffect.cs b/Assets/Battle/Effects/AcquireCardsEffect.cs new file mode 100644 index 0000000..9b5e5d1 --- /dev/null +++ b/Assets/Battle/Effects/AcquireCardsEffect.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class AcquireCardsEffect : IBattleEffect +{ + private CardId[] cardIds; + private BattleZone zone; + private BattleParticipant participant; + + public AcquireCardsEffect(CardId[] cardIds, BattleZone zone, BattleParticipant participant) { + this.cardIds = cardIds; + this.zone = zone; + this.participant = participant; + } + + public void Apply(IBattleEffectResolver resolver) { + if (this.participant.IsHero()) { + resolver.AcquireHeroCards(this.cardIds, this.zone, (BattleHero) this.participant); + } else { + throw new System.NotImplementedException(); + } + } +} diff --git a/Assets/Battle/Effects/AcquireCardsEffect.cs.meta b/Assets/Battle/Effects/AcquireCardsEffect.cs.meta new file mode 100644 index 0000000..faab0fe --- /dev/null +++ b/Assets/Battle/Effects/AcquireCardsEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5af4ea0aedc362d428d86ff87d50d648 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs index 9d8dfc3..3a954d5 100644 --- a/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs +++ b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs @@ -10,7 +10,7 @@ public class IncreaseMaxEnergyEffect : IBattleEffect this.delta = delta; } - public void Apply(IBattleEffectResolver bc) { - bc.IncreaseMaxEnergy(this.delta); + public void Apply(IBattleEffectResolver resolver) { + resolver.IncreaseHeroMaxEnergy(this.delta); } } diff --git a/Assets/Battle/HeroDeck.cs b/Assets/Battle/HeroDeck.cs index 23fa47f..8b70d65 100644 --- a/Assets/Battle/HeroDeck.cs +++ b/Assets/Battle/HeroDeck.cs @@ -92,6 +92,16 @@ public class HeroDeck TriggerDiscardPileChanged(); } + public void PutCardOnTopOfDrawPile(BaseCard card) { + this.drawPile.Insert(0, card); + TriggerDrawPileChanged(); + } + + public void ShuffleDrawPile() { + this.drawPile.Shuffle(); + TriggerDrawPileChanged(); + } + private void RemakeDrawPile() { this.drawPile.AddRange(this.discardPile); this.discardPile.Clear(); diff --git a/Assets/Battle/IBattleEffectResolver.cs b/Assets/Battle/IBattleEffectResolver.cs index afbab8c..e8ec46e 100644 --- a/Assets/Battle/IBattleEffectResolver.cs +++ b/Assets/Battle/IBattleEffectResolver.cs @@ -3,5 +3,6 @@ using System.Collections.Generic; using UnityEngine; public interface IBattleEffectResolver { - void IncreaseMaxEnergy(int delta); + void IncreaseHeroMaxEnergy(int delta); + void AcquireHeroCards(CardId[] cardIds, BattleZone zone, BattleHero owner); }