From 00448fe919769c6fd1bcd1c4bd98d495e1f3cdcf Mon Sep 17 00:00:00 2001 From: henriquenakashima Date: Sat, 19 Sep 2020 16:58:14 -0400 Subject: [PATCH] Implement BattleEffects, add Thunderstorm --- Assets/Battle/BaseCard.cs | 23 ++++++++----- Assets/Battle/BattleController.cs | 28 +++++++++++++-- Assets/Battle/BattleScene.unity | 3 +- Assets/Battle/CardDatabase.cs | 6 +++- Assets/Battle/Cards/CardCover.cs | 2 +- Assets/Battle/Cards/CardCrashingPunch.cs | 2 +- Assets/Battle/Cards/CardThunderstorm.cs | 17 ++++++++++ Assets/Battle/Cards/CardThunderstorm.cs.meta | 11 ++++++ Assets/Battle/Effects.meta | 8 +++++ .../Battle/Effects/IncreaseMaxEnergyEffect.cs | 16 +++++++++ .../Effects/IncreaseMaxEnergyEffect.cs.meta | 11 ++++++ Assets/Battle/HeroDeck.cs | 7 ++-- Assets/Battle/IBattleEffect.cs | 7 ++++ Assets/Battle/IBattleEffect.cs.meta | 11 ++++++ Assets/Battle/IBattleEffectApplier.cs | 7 ++++ Assets/Battle/IBattleEffectApplier.cs.meta | 11 ++++++ Assets/Battle/IBattleEffectResolver.cs | 7 ++++ Assets/Battle/IBattleEffectResolver.cs.meta | 11 ++++++ Assets/Battle/PlayArea.cs | 34 +++++++++++++++++++ Assets/Battle/PlayArea.cs.meta | 11 ++++++ 20 files changed, 215 insertions(+), 18 deletions(-) create mode 100644 Assets/Battle/Cards/CardThunderstorm.cs create mode 100644 Assets/Battle/Cards/CardThunderstorm.cs.meta create mode 100644 Assets/Battle/Effects.meta create mode 100644 Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs create mode 100644 Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs.meta create mode 100644 Assets/Battle/IBattleEffect.cs create mode 100644 Assets/Battle/IBattleEffect.cs.meta create mode 100644 Assets/Battle/IBattleEffectApplier.cs create mode 100644 Assets/Battle/IBattleEffectApplier.cs.meta create mode 100644 Assets/Battle/IBattleEffectResolver.cs create mode 100644 Assets/Battle/IBattleEffectResolver.cs.meta create mode 100644 Assets/Battle/PlayArea.cs create mode 100644 Assets/Battle/PlayArea.cs.meta diff --git a/Assets/Battle/BaseCard.cs b/Assets/Battle/BaseCard.cs index 8f4cc8b..ccfd61b 100644 --- a/Assets/Battle/BaseCard.cs +++ b/Assets/Battle/BaseCard.cs @@ -3,7 +3,8 @@ using System.Collections.Generic; using UnityEngine; public enum CardType { - Action + Action, + Enchantment, } public abstract class BaseCard @@ -24,18 +25,24 @@ public abstract class BaseCard this.effectText = effectText; } - public abstract IEnumerator Use(BattlePlayerControls playerControls); + public abstract IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls); - public CardId GetId() {return id;} - public string GetDisplayName() {return displayName;} - public int GetCost() {return cost;} + public CardId GetId() {return this.id;} + public string GetDisplayName() {return this.displayName;} + public int GetCost() {return this.cost;} public string GetDisplayType() { - switch (type) { + switch (this.type) { case CardType.Action: - return ""; + return "Action"; + case CardType.Enchantment: + return "Enchantment"; default: throw new System.ArgumentException("CardType unknown", "cardType"); } } - public string GetEffectText() {return effectText;} + public string GetEffectText() {return this.effectText;} + + public bool IsPermanent() { + return this.type == CardType.Enchantment; + } } diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index f70ebe3..6acf60a 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -public class BattleController : MonoBehaviour +public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffectResolver { public HeroId[] heroIds; public MonsterId[] monsterIds; @@ -13,6 +13,7 @@ public class BattleController : MonoBehaviour public BattlePlayerControls battlePlayerControls; private HeroDeck heroDeck; + private PlayArea playArea; public BattleHero[] heroes; private GameObject[] heroSprites; @@ -77,6 +78,8 @@ public class BattleController : MonoBehaviour this.battlePlayerControls.OnCardUsed += this.NotifyCardUsed; this.battlePlayerControls.OnTurnPassed += this.NotifyTurnPassed; this.heroDeck.OnHandPileChanged += this.battlePlayerControls.NotifyHandPileChanged; + + this.playArea = new PlayArea(); } private BattleParticipant FindHeroByClass(HeroId heroId) { @@ -144,9 +147,14 @@ public class BattleController : MonoBehaviour } public IEnumerator UseCard(BaseCard card) { - yield return card.Use(battlePlayerControls); + yield return card.Use(this, battlePlayerControls); PayCardCost(card); - this.heroDeck.DiscardPlayedCard(card); + this.heroDeck.RemoveCardFromHand(card); + if (card.IsPermanent()) { + this.playArea.AddPlayedHeroPermanent(card); + } else { + this.heroDeck.MoveCardToDiscard(card); + } } public void NotifyTurnPassed() { @@ -175,4 +183,18 @@ public class BattleController : MonoBehaviour public HeroDeck GetHeroDeck() { return this.heroDeck; } + + public PlayArea GetPlayArea() { + return this.playArea; + } + + // IBattleEffectApplier + public void Apply(IBattleEffect effect) { + effect.Apply(this); + } + + // IBattleEffectResolver + public void IncreaseMaxEnergy(int delta) { + this.maxEnergy += delta; + } } diff --git a/Assets/Battle/BattleScene.unity b/Assets/Battle/BattleScene.unity index 62fc8db..4648982 100644 --- a/Assets/Battle/BattleScene.unity +++ b/Assets/Battle/BattleScene.unity @@ -305,8 +305,7 @@ MonoBehaviour: m_EditorClassIdentifier: heroIds: 010000000000000002000000 monsterIds: 000000000100000000000000 - maxEnergy: 1 - cardIds: 00000000000000000000000000000000000000000100000001000000010000000100000001000000 + cardIds: 00000000000000000000000000000000000000000100000001000000010000000100000002000000 heroUIPrefab: {fileID: 6641511084601005557, guid: ef1b469b45cedee418e4c4adf577cd00, type: 3} uiCanvas: {fileID: 35522588} diff --git a/Assets/Battle/CardDatabase.cs b/Assets/Battle/CardDatabase.cs index 362cbc9..d723975 100644 --- a/Assets/Battle/CardDatabase.cs +++ b/Assets/Battle/CardDatabase.cs @@ -4,7 +4,8 @@ using UnityEngine; public enum CardId { CrashingPunch, - Cover + Cover, + Thunderstorm, } public class CardDatabase @@ -12,6 +13,7 @@ public class CardDatabase private static Dictionary CARD_TO_HERO = new Dictionary() { {CardId.CrashingPunch, HeroId.Brute}, {CardId.Cover, HeroId.Brute}, + {CardId.Thunderstorm, HeroId.Shaman}, }; public static BaseCard CreateCard(CardId id, BattleParticipant owner) { @@ -21,6 +23,8 @@ public class CardDatabase return new CardCrashingPunch(owner); case CardId.Cover: return new CardCover(owner); + case CardId.Thunderstorm: + return new CardThunderstorm(owner); default: throw new System.ArgumentException("CardId unknown", "id"); } diff --git a/Assets/Battle/Cards/CardCover.cs b/Assets/Battle/Cards/CardCover.cs index 41340dd..1303f07 100644 --- a/Assets/Battle/Cards/CardCover.cs +++ b/Assets/Battle/Cards/CardCover.cs @@ -10,7 +10,7 @@ public class CardCover : BaseCard } - public override IEnumerator Use(BattlePlayerControls playerControls) { + public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { SingleTargeting singleTargeting = new SingleTargeting(new OtherHeroTargetPolicy(this.owner)); yield return playerControls.StartCoroutine(playerControls.ChooseTarget(singleTargeting)); BattleParticipant target = singleTargeting.GetTarget(); diff --git a/Assets/Battle/Cards/CardCrashingPunch.cs b/Assets/Battle/Cards/CardCrashingPunch.cs index 881a64f..6fad424 100644 --- a/Assets/Battle/Cards/CardCrashingPunch.cs +++ b/Assets/Battle/Cards/CardCrashingPunch.cs @@ -9,7 +9,7 @@ public class CardCrashingPunch : BaseCard "Deals 3 damage to target.") { } - public override IEnumerator Use(BattlePlayerControls playerControls) { + 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(); diff --git a/Assets/Battle/Cards/CardThunderstorm.cs b/Assets/Battle/Cards/CardThunderstorm.cs new file mode 100644 index 0000000..bf2c303 --- /dev/null +++ b/Assets/Battle/Cards/CardThunderstorm.cs @@ -0,0 +1,17 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CardThunderstorm : BaseCard +{ + public CardThunderstorm(BattleParticipant owner) + : base(owner, CardId.Thunderstorm, "Thunderstorm", 3, CardType.Enchantment, + "Adds 1 energy.") { + } + + public override IEnumerator Use(IBattleEffectApplier effectApplier, BattlePlayerControls playerControls) { + Debug.Log("A storm is brewing."); + effectApplier.Apply(new IncreaseMaxEnergyEffect(1)); + yield break; + } +} diff --git a/Assets/Battle/Cards/CardThunderstorm.cs.meta b/Assets/Battle/Cards/CardThunderstorm.cs.meta new file mode 100644 index 0000000..9637847 --- /dev/null +++ b/Assets/Battle/Cards/CardThunderstorm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7effe1a2ba7096c49ac374b25ed92865 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/Effects.meta b/Assets/Battle/Effects.meta new file mode 100644 index 0000000..279de2f --- /dev/null +++ b/Assets/Battle/Effects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96d74ab445eb27f42a7f7e774d3eb77f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs new file mode 100644 index 0000000..9d8dfc3 --- /dev/null +++ b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class IncreaseMaxEnergyEffect : IBattleEffect +{ + private int delta; + + public IncreaseMaxEnergyEffect(int delta) { + this.delta = delta; + } + + public void Apply(IBattleEffectResolver bc) { + bc.IncreaseMaxEnergy(this.delta); + } +} diff --git a/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs.meta b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs.meta new file mode 100644 index 0000000..b7cf3e0 --- /dev/null +++ b/Assets/Battle/Effects/IncreaseMaxEnergyEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d7496e1bf53a764c9ae43a3806f6a1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/HeroDeck.cs b/Assets/Battle/HeroDeck.cs index 3301487..23fa47f 100644 --- a/Assets/Battle/HeroDeck.cs +++ b/Assets/Battle/HeroDeck.cs @@ -70,15 +70,18 @@ public class HeroDeck this.handPile.Add(drawnCard); } - public void DiscardPlayedCard(BaseCard card) { + public void RemoveCardFromHand(BaseCard card) { if (!this.handPile.Contains(card)) { throw new InvalidOperationException("Cannot discard card " + card.GetDisplayName() + " because not in hand."); } - this.discardPile.Insert(0, card); this.handPile.Remove(card); TriggerHandPileChanged(); + } + + public void MoveCardToDiscard(BaseCard card) { + this.discardPile.Insert(0, card); TriggerDiscardPileChanged(); } diff --git a/Assets/Battle/IBattleEffect.cs b/Assets/Battle/IBattleEffect.cs new file mode 100644 index 0000000..731f35a --- /dev/null +++ b/Assets/Battle/IBattleEffect.cs @@ -0,0 +1,7 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IBattleEffect { + void Apply(IBattleEffectResolver controller); +} diff --git a/Assets/Battle/IBattleEffect.cs.meta b/Assets/Battle/IBattleEffect.cs.meta new file mode 100644 index 0000000..09c2e4c --- /dev/null +++ b/Assets/Battle/IBattleEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3125f31a929d67c44a5333d4714d9c22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/IBattleEffectApplier.cs b/Assets/Battle/IBattleEffectApplier.cs new file mode 100644 index 0000000..2fe115b --- /dev/null +++ b/Assets/Battle/IBattleEffectApplier.cs @@ -0,0 +1,7 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IBattleEffectApplier { + void Apply(IBattleEffect effect); +} diff --git a/Assets/Battle/IBattleEffectApplier.cs.meta b/Assets/Battle/IBattleEffectApplier.cs.meta new file mode 100644 index 0000000..bf604c9 --- /dev/null +++ b/Assets/Battle/IBattleEffectApplier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cc85c528f9080e45b3fc70c6fc07b2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/IBattleEffectResolver.cs b/Assets/Battle/IBattleEffectResolver.cs new file mode 100644 index 0000000..afbab8c --- /dev/null +++ b/Assets/Battle/IBattleEffectResolver.cs @@ -0,0 +1,7 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IBattleEffectResolver { + void IncreaseMaxEnergy(int delta); +} diff --git a/Assets/Battle/IBattleEffectResolver.cs.meta b/Assets/Battle/IBattleEffectResolver.cs.meta new file mode 100644 index 0000000..bab6b4a --- /dev/null +++ b/Assets/Battle/IBattleEffectResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b77e25b7ed61214dac4f79e0c92eacf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/PlayArea.cs b/Assets/Battle/PlayArea.cs new file mode 100644 index 0000000..aa3eb0a --- /dev/null +++ b/Assets/Battle/PlayArea.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PlayArea +{ + public delegate void PlayAreaChangedAction(); + public event PlayAreaChangedAction OnPlayAreaChanged; + + private List heroPermanents; + + public PlayArea() { + this.heroPermanents = new List(); + } + + public List GetHeroPermanents() { + return heroPermanents; + } + + public void AddPlayedHeroPermanent(BaseCard permanent) { + this.heroPermanents.Add(permanent); + TriggerPlayAreaChanged(); + } + + public void RemoveHeroPermanent(BaseCard permanent) { + this.heroPermanents.Remove(permanent); + TriggerPlayAreaChanged(); + } + + private void TriggerPlayAreaChanged() { + if (OnPlayAreaChanged != null) OnPlayAreaChanged(); + } +} diff --git a/Assets/Battle/PlayArea.cs.meta b/Assets/Battle/PlayArea.cs.meta new file mode 100644 index 0000000..d628574 --- /dev/null +++ b/Assets/Battle/PlayArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 909d3afbe3a4b624b89876ad93fdcbe8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: