diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index d43f508..461be0f 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -12,7 +12,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe public GameObject uiCanvas; public BattlePlayerControls battlePlayerControls; - private HeroDeck heroDeck; + private HeroCardDatabase heroCardDatabase; + private MonsterCardDatabase monsterCardDatabase; + private BattleDeck heroDeck; private PlayArea playArea; public BattleHero[] heroes; @@ -28,6 +30,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe private int energy; void Awake() { + this.heroCardDatabase = new HeroCardDatabase(); + this.monsterCardDatabase = new MonsterCardDatabase(); + heroes = new BattleHero[3]; heroSprites = new GameObject[3]; heroUIs = new HeroInfoUI[3]; @@ -70,9 +75,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe BattleParticipant[] cardOwners = new BattleParticipant[this.cardIds.Length]; for (int i = 0; i < this.cardIds.Length; i++) { - cardOwners[i] = FindHeroByClass(CardDatabase.GetHeroIdOfCard(this.cardIds[i])); + cardOwners[i] = FindHeroByClass(HeroCardDatabase.GetHeroIdOfCard(this.cardIds[i])); } - this.heroDeck = new HeroDeck(this.cardIds, cardOwners); + this.heroDeck = new BattleDeck(this.heroCardDatabase, this.cardIds, cardOwners); this.playArea = new PlayArea(); @@ -127,7 +132,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe monster.ResetBlock(); } - MonsterCard card = MonsterCardDatabase.CreateCard(MCardId.VampireFangs, this.monsters[0]); + MonsterCard card = this.monsterCardDatabase.CreateCard((int) MCardId.VampireFangs, this.monsters[0]); StartCoroutine(UseMonsterCard(card)); StartHeroTurn(); @@ -178,7 +183,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe return this.maxEnergy; } - public HeroDeck GetHeroDeck() { + public BattleDeck GetHeroDeck() { return this.heroDeck; } @@ -217,10 +222,10 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe public void AcquireHeroCards(AcquireCardsEffect effect) { BattleHero hero = (BattleHero) effect.Participant; foreach (CardId cardId in effect.CardIds) { - BaseCard acquiredCard = CardDatabase.CreateCard(cardId, hero); + HeroCard acquiredCard = this.heroCardDatabase.CreateCard((int) cardId, hero); switch (effect.Zone) { case BattleZone.DrawPile: - this.GetHeroDeck().PutCardOnTopOfDrawPile(acquiredCard); + this.heroDeck.PutCardOnTopOfDrawPile(acquiredCard); break; default: throw new System.NotImplementedException(); @@ -228,7 +233,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } if (effect.Zone == BattleZone.DrawPile) { - this.GetHeroDeck().ShuffleDrawPile(); + this.heroDeck.ShuffleDrawPile(); } } diff --git a/Assets/Battle/HeroDeck.cs b/Assets/Battle/BattleDeck.cs similarity index 75% rename from Assets/Battle/HeroDeck.cs rename to Assets/Battle/BattleDeck.cs index 8b70d65..1fc005f 100644 --- a/Assets/Battle/HeroDeck.cs +++ b/Assets/Battle/BattleDeck.cs @@ -3,7 +3,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class HeroDeck +public class BattleDeck where BaseCardT : BaseCard { public const int DEFAULT_HAND_DRAWN = 5; @@ -13,31 +13,31 @@ public class HeroDeck public event PileChangedAction OnDiscardPileChanged; // Piles are sorted from top to bottom. - private List drawPile; - private List handPile; - private List discardPile; + private List drawPile; + private List handPile; + private List discardPile; - public HeroDeck(CardId[] cardIds, BattleParticipant[] cardOwners) { - this.drawPile = new List(); - this.handPile = new List(); - this.discardPile = new List(); + public BattleDeck(CardDatabase cardDatabase, CardId[] cardIds, BattleParticipant[] cardOwners) { + this.drawPile = new List(); + this.handPile = new List(); + this.discardPile = new List(); for (int i = 0; i < cardIds.Length; i++) { - BaseCard newCard = CardDatabase.CreateCard(cardIds[i], cardOwners[i]); + BaseCardT newCard = cardDatabase.CreateCard((int) cardIds[i], cardOwners[i]); this.drawPile.Add(newCard); } this.drawPile.Shuffle(); } - public List GetDrawPile() { + public List GetDrawPile() { return drawPile; } - public List GetHandPile() { + public List GetHandPile() { return handPile; } - public List GetDiscardPile() { + public List GetDiscardPile() { return discardPile; } @@ -65,12 +65,12 @@ public class HeroDeck } } - BaseCard drawnCard = this.drawPile[0]; + BaseCardT drawnCard = this.drawPile[0]; this.drawPile.RemoveAt(0); this.handPile.Add(drawnCard); } - public void RemoveCardFromHand(BaseCard card) { + public void RemoveCardFromHand(BaseCardT card) { if (!this.handPile.Contains(card)) { throw new InvalidOperationException("Cannot discard card " + card.GetDisplayName() + " because not in hand."); @@ -80,7 +80,7 @@ public class HeroDeck TriggerHandPileChanged(); } - public void MoveCardToDiscard(BaseCard card) { + public void MoveCardToDiscard(BaseCardT card) { this.discardPile.Insert(0, card); TriggerDiscardPileChanged(); } @@ -92,7 +92,7 @@ public class HeroDeck TriggerDiscardPileChanged(); } - public void PutCardOnTopOfDrawPile(BaseCard card) { + public void PutCardOnTopOfDrawPile(BaseCardT card) { this.drawPile.Insert(0, card); TriggerDrawPileChanged(); } diff --git a/Assets/Battle/HeroDeck.cs.meta b/Assets/Battle/BattleDeck.cs.meta similarity index 100% rename from Assets/Battle/HeroDeck.cs.meta rename to Assets/Battle/BattleDeck.cs.meta diff --git a/Assets/Battle/BattlePlayerControls.cs b/Assets/Battle/BattlePlayerControls.cs index 2ac02f1..444d5c0 100644 --- a/Assets/Battle/BattlePlayerControls.cs +++ b/Assets/Battle/BattlePlayerControls.cs @@ -15,12 +15,12 @@ public class BattlePlayerControls : MonoBehaviour public delegate void TurnPassedAction(); public event TurnPassedAction OnTurnPassed; - private HeroDeck heroDeck; + private BattleDeck heroDeck; private List cardsInHandUIs; private PlayArea playArea; private Dictionary cardsInPlayUIs; - public void Init(HeroDeck heroDeck, PlayArea playArea) { + public void Init(BattleDeck heroDeck, PlayArea playArea) { this.heroDeck = heroDeck; this.playArea = playArea; diff --git a/Assets/Battle/CardDatabase.cs b/Assets/Battle/CardDatabase.cs index bb90ac1..f455908 100644 --- a/Assets/Battle/CardDatabase.cs +++ b/Assets/Battle/CardDatabase.cs @@ -2,43 +2,7 @@ using System.Collections.Generic; using UnityEngine; -public enum CardId { - CrashingPunch, - Cover, - LightningStrike, - Scarring, - Thunderstorm, -} - -public class CardDatabase +public abstract class CardDatabase where BaseCardT : BaseCard { - private static Dictionary CARD_TO_HERO = new Dictionary() { - {CardId.CrashingPunch, HeroId.Brute}, - {CardId.Cover, HeroId.Brute}, - {CardId.LightningStrike, HeroId.Shaman}, - {CardId.Scarring, HeroId.Brute}, - {CardId.Thunderstorm, HeroId.Shaman}, - }; - - public static HeroCard CreateCard(CardId id, BattleParticipant owner) { - switch (id) - { - case CardId.CrashingPunch: - return new CardCrashingPunch(owner); - case CardId.Cover: - return new CardCover(owner); - case CardId.LightningStrike: - return new CardLightningStrike(owner); - case CardId.Scarring: - return new CardScarring(owner); - case CardId.Thunderstorm: - return new CardThunderstorm(owner); - default: - throw new System.ArgumentException("CardId unknown", "id"); - } - } - - public static HeroId GetHeroIdOfCard(CardId id) { - return CARD_TO_HERO[id]; - } + public abstract BaseCardT CreateCard(int id, BattleParticipant owner); } diff --git a/Assets/Battle/HeroCardDatabase.cs b/Assets/Battle/HeroCardDatabase.cs new file mode 100644 index 0000000..42e8321 --- /dev/null +++ b/Assets/Battle/HeroCardDatabase.cs @@ -0,0 +1,45 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public enum CardId { + CrashingPunch, + Cover, + LightningStrike, + Scarring, + Thunderstorm, +} + +public class HeroCardDatabase : CardDatabase +{ + private static Dictionary CARD_TO_HERO = new Dictionary() { + {CardId.CrashingPunch, HeroId.Brute}, + {CardId.Cover, HeroId.Brute}, + {CardId.LightningStrike, HeroId.Shaman}, + {CardId.Scarring, HeroId.Brute}, + {CardId.Thunderstorm, HeroId.Shaman}, + }; + + public override HeroCard CreateCard(int id, BattleParticipant owner) { + CardId heroCardId = (CardId) id; + switch (heroCardId) + { + case CardId.CrashingPunch: + return new CardCrashingPunch(owner); + case CardId.Cover: + return new CardCover(owner); + case CardId.LightningStrike: + return new CardLightningStrike(owner); + case CardId.Scarring: + return new CardScarring(owner); + case CardId.Thunderstorm: + return new CardThunderstorm(owner); + default: + throw new System.ArgumentException("CardId unknown", "id"); + } + } + + public static HeroId GetHeroIdOfCard(CardId id) { + return CARD_TO_HERO[id]; + } +} diff --git a/Assets/Battle/HeroCardDatabase.cs.meta b/Assets/Battle/HeroCardDatabase.cs.meta new file mode 100644 index 0000000..bf75b30 --- /dev/null +++ b/Assets/Battle/HeroCardDatabase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98bc971b3bc7cf74da4fd2cf58963ae1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/MonsterCardDatabase.cs b/Assets/Battle/MonsterCardDatabase.cs index c424485..004b68d 100644 --- a/Assets/Battle/MonsterCardDatabase.cs +++ b/Assets/Battle/MonsterCardDatabase.cs @@ -6,10 +6,11 @@ public enum MCardId { VampireFangs, } -public static class MonsterCardDatabase +public class MonsterCardDatabase : CardDatabase { - public static MonsterCard CreateCard(MCardId id, BattleParticipant owner) { - switch (id) + public override MonsterCard CreateCard(int id, BattleParticipant owner) { + MCardId monsterCardId = (MCardId) id; + switch (monsterCardId) { case MCardId.VampireFangs: return new VampireFangsMCard(owner);