Convert HeroDeck into BattleDeck<HeroCard>

This commit is contained in:
henriquenakashima 2020-09-20 12:17:04 -04:00
parent c2e8b526b6
commit de072a80f7
8 changed files with 93 additions and 67 deletions

View file

@ -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<HeroCard> 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<HeroCard>(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<HeroCard> 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();
}
}

View file

@ -3,7 +3,7 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HeroDeck
public class BattleDeck<BaseCardT> 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<BaseCard> drawPile;
private List<BaseCard> handPile;
private List<BaseCard> discardPile;
private List<BaseCardT> drawPile;
private List<BaseCardT> handPile;
private List<BaseCardT> discardPile;
public HeroDeck(CardId[] cardIds, BattleParticipant[] cardOwners) {
this.drawPile = new List<BaseCard>();
this.handPile = new List<BaseCard>();
this.discardPile = new List<BaseCard>();
public BattleDeck(CardDatabase<BaseCardT> cardDatabase, CardId[] cardIds, BattleParticipant[] cardOwners) {
this.drawPile = new List<BaseCardT>();
this.handPile = new List<BaseCardT>();
this.discardPile = new List<BaseCardT>();
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<BaseCard> GetDrawPile() {
public List<BaseCardT> GetDrawPile() {
return drawPile;
}
public List<BaseCard> GetHandPile() {
public List<BaseCardT> GetHandPile() {
return handPile;
}
public List<BaseCard> GetDiscardPile() {
public List<BaseCardT> 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();
}

View file

@ -15,12 +15,12 @@ public class BattlePlayerControls : MonoBehaviour
public delegate void TurnPassedAction();
public event TurnPassedAction OnTurnPassed;
private HeroDeck heroDeck;
private BattleDeck<HeroCard> heroDeck;
private List<GameObject> cardsInHandUIs;
private PlayArea playArea;
private Dictionary<BaseCard, GameObject> cardsInPlayUIs;
public void Init(HeroDeck heroDeck, PlayArea playArea) {
public void Init(BattleDeck<HeroCard> heroDeck, PlayArea playArea) {
this.heroDeck = heroDeck;
this.playArea = playArea;

View file

@ -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<BaseCardT> where BaseCardT : BaseCard
{
private static Dictionary<CardId, HeroId> CARD_TO_HERO = new Dictionary<CardId, HeroId>() {
{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);
}

View file

@ -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<HeroCard>
{
private static Dictionary<CardId, HeroId> CARD_TO_HERO = new Dictionary<CardId, HeroId>() {
{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];
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 98bc971b3bc7cf74da4fd2cf58963ae1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -6,10 +6,11 @@ public enum MCardId {
VampireFangs,
}
public static class MonsterCardDatabase
public class MonsterCardDatabase : CardDatabase<MonsterCard>
{
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);