Convert HeroDeck into BattleDeck<HeroCard>
This commit is contained in:
parent
c2e8b526b6
commit
de072a80f7
8 changed files with 93 additions and 67 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
45
Assets/Battle/HeroCardDatabase.cs
Normal file
45
Assets/Battle/HeroCardDatabase.cs
Normal 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];
|
||||
}
|
||||
}
|
||||
11
Assets/Battle/HeroCardDatabase.cs.meta
Normal file
11
Assets/Battle/HeroCardDatabase.cs.meta
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 98bc971b3bc7cf74da4fd2cf58963ae1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue