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 GameObject uiCanvas;
|
||||||
public BattlePlayerControls battlePlayerControls;
|
public BattlePlayerControls battlePlayerControls;
|
||||||
|
|
||||||
private HeroDeck heroDeck;
|
private HeroCardDatabase heroCardDatabase;
|
||||||
|
private MonsterCardDatabase monsterCardDatabase;
|
||||||
|
private BattleDeck<HeroCard> heroDeck;
|
||||||
private PlayArea playArea;
|
private PlayArea playArea;
|
||||||
|
|
||||||
public BattleHero[] heroes;
|
public BattleHero[] heroes;
|
||||||
|
|
@ -28,6 +30,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
private int energy;
|
private int energy;
|
||||||
|
|
||||||
void Awake() {
|
void Awake() {
|
||||||
|
this.heroCardDatabase = new HeroCardDatabase();
|
||||||
|
this.monsterCardDatabase = new MonsterCardDatabase();
|
||||||
|
|
||||||
heroes = new BattleHero[3];
|
heroes = new BattleHero[3];
|
||||||
heroSprites = new GameObject[3];
|
heroSprites = new GameObject[3];
|
||||||
heroUIs = new HeroInfoUI[3];
|
heroUIs = new HeroInfoUI[3];
|
||||||
|
|
@ -70,9 +75,9 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
|
|
||||||
BattleParticipant[] cardOwners = new BattleParticipant[this.cardIds.Length];
|
BattleParticipant[] cardOwners = new BattleParticipant[this.cardIds.Length];
|
||||||
for (int i = 0; i < this.cardIds.Length; i++) {
|
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();
|
this.playArea = new PlayArea();
|
||||||
|
|
||||||
|
|
@ -127,7 +132,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
monster.ResetBlock();
|
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));
|
StartCoroutine(UseMonsterCard(card));
|
||||||
|
|
||||||
StartHeroTurn();
|
StartHeroTurn();
|
||||||
|
|
@ -178,7 +183,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
return this.maxEnergy;
|
return this.maxEnergy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HeroDeck GetHeroDeck() {
|
public BattleDeck<HeroCard> GetHeroDeck() {
|
||||||
return this.heroDeck;
|
return this.heroDeck;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -217,10 +222,10 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
public void AcquireHeroCards(AcquireCardsEffect effect) {
|
public void AcquireHeroCards(AcquireCardsEffect effect) {
|
||||||
BattleHero hero = (BattleHero) effect.Participant;
|
BattleHero hero = (BattleHero) effect.Participant;
|
||||||
foreach (CardId cardId in effect.CardIds) {
|
foreach (CardId cardId in effect.CardIds) {
|
||||||
BaseCard acquiredCard = CardDatabase.CreateCard(cardId, hero);
|
HeroCard acquiredCard = this.heroCardDatabase.CreateCard((int) cardId, hero);
|
||||||
switch (effect.Zone) {
|
switch (effect.Zone) {
|
||||||
case BattleZone.DrawPile:
|
case BattleZone.DrawPile:
|
||||||
this.GetHeroDeck().PutCardOnTopOfDrawPile(acquiredCard);
|
this.heroDeck.PutCardOnTopOfDrawPile(acquiredCard);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new System.NotImplementedException();
|
throw new System.NotImplementedException();
|
||||||
|
|
@ -228,7 +233,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe
|
||||||
}
|
}
|
||||||
|
|
||||||
if (effect.Zone == BattleZone.DrawPile) {
|
if (effect.Zone == BattleZone.DrawPile) {
|
||||||
this.GetHeroDeck().ShuffleDrawPile();
|
this.heroDeck.ShuffleDrawPile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class HeroDeck
|
public class BattleDeck<BaseCardT> where BaseCardT : BaseCard
|
||||||
{
|
{
|
||||||
public const int DEFAULT_HAND_DRAWN = 5;
|
public const int DEFAULT_HAND_DRAWN = 5;
|
||||||
|
|
||||||
|
|
@ -13,31 +13,31 @@ public class HeroDeck
|
||||||
public event PileChangedAction OnDiscardPileChanged;
|
public event PileChangedAction OnDiscardPileChanged;
|
||||||
|
|
||||||
// Piles are sorted from top to bottom.
|
// Piles are sorted from top to bottom.
|
||||||
private List<BaseCard> drawPile;
|
private List<BaseCardT> drawPile;
|
||||||
private List<BaseCard> handPile;
|
private List<BaseCardT> handPile;
|
||||||
private List<BaseCard> discardPile;
|
private List<BaseCardT> discardPile;
|
||||||
|
|
||||||
public HeroDeck(CardId[] cardIds, BattleParticipant[] cardOwners) {
|
public BattleDeck(CardDatabase<BaseCardT> cardDatabase, CardId[] cardIds, BattleParticipant[] cardOwners) {
|
||||||
this.drawPile = new List<BaseCard>();
|
this.drawPile = new List<BaseCardT>();
|
||||||
this.handPile = new List<BaseCard>();
|
this.handPile = new List<BaseCardT>();
|
||||||
this.discardPile = new List<BaseCard>();
|
this.discardPile = new List<BaseCardT>();
|
||||||
|
|
||||||
for (int i = 0; i < cardIds.Length; i++) {
|
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.Add(newCard);
|
||||||
}
|
}
|
||||||
this.drawPile.Shuffle();
|
this.drawPile.Shuffle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BaseCard> GetDrawPile() {
|
public List<BaseCardT> GetDrawPile() {
|
||||||
return drawPile;
|
return drawPile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BaseCard> GetHandPile() {
|
public List<BaseCardT> GetHandPile() {
|
||||||
return handPile;
|
return handPile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BaseCard> GetDiscardPile() {
|
public List<BaseCardT> GetDiscardPile() {
|
||||||
return discardPile;
|
return discardPile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,12 +65,12 @@ public class HeroDeck
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseCard drawnCard = this.drawPile[0];
|
BaseCardT drawnCard = this.drawPile[0];
|
||||||
this.drawPile.RemoveAt(0);
|
this.drawPile.RemoveAt(0);
|
||||||
this.handPile.Add(drawnCard);
|
this.handPile.Add(drawnCard);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveCardFromHand(BaseCard card) {
|
public void RemoveCardFromHand(BaseCardT card) {
|
||||||
if (!this.handPile.Contains(card)) {
|
if (!this.handPile.Contains(card)) {
|
||||||
throw new InvalidOperationException("Cannot discard card " + card.GetDisplayName()
|
throw new InvalidOperationException("Cannot discard card " + card.GetDisplayName()
|
||||||
+ " because not in hand.");
|
+ " because not in hand.");
|
||||||
|
|
@ -80,7 +80,7 @@ public class HeroDeck
|
||||||
TriggerHandPileChanged();
|
TriggerHandPileChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MoveCardToDiscard(BaseCard card) {
|
public void MoveCardToDiscard(BaseCardT card) {
|
||||||
this.discardPile.Insert(0, card);
|
this.discardPile.Insert(0, card);
|
||||||
TriggerDiscardPileChanged();
|
TriggerDiscardPileChanged();
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +92,7 @@ public class HeroDeck
|
||||||
TriggerDiscardPileChanged();
|
TriggerDiscardPileChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PutCardOnTopOfDrawPile(BaseCard card) {
|
public void PutCardOnTopOfDrawPile(BaseCardT card) {
|
||||||
this.drawPile.Insert(0, card);
|
this.drawPile.Insert(0, card);
|
||||||
TriggerDrawPileChanged();
|
TriggerDrawPileChanged();
|
||||||
}
|
}
|
||||||
|
|
@ -15,12 +15,12 @@ public class BattlePlayerControls : MonoBehaviour
|
||||||
public delegate void TurnPassedAction();
|
public delegate void TurnPassedAction();
|
||||||
public event TurnPassedAction OnTurnPassed;
|
public event TurnPassedAction OnTurnPassed;
|
||||||
|
|
||||||
private HeroDeck heroDeck;
|
private BattleDeck<HeroCard> heroDeck;
|
||||||
private List<GameObject> cardsInHandUIs;
|
private List<GameObject> cardsInHandUIs;
|
||||||
private PlayArea playArea;
|
private PlayArea playArea;
|
||||||
private Dictionary<BaseCard, GameObject> cardsInPlayUIs;
|
private Dictionary<BaseCard, GameObject> cardsInPlayUIs;
|
||||||
|
|
||||||
public void Init(HeroDeck heroDeck, PlayArea playArea) {
|
public void Init(BattleDeck<HeroCard> heroDeck, PlayArea playArea) {
|
||||||
this.heroDeck = heroDeck;
|
this.heroDeck = heroDeck;
|
||||||
this.playArea = playArea;
|
this.playArea = playArea;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,43 +2,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public enum CardId {
|
public abstract class CardDatabase<BaseCardT> where BaseCardT : BaseCard
|
||||||
CrashingPunch,
|
|
||||||
Cover,
|
|
||||||
LightningStrike,
|
|
||||||
Scarring,
|
|
||||||
Thunderstorm,
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CardDatabase
|
|
||||||
{
|
{
|
||||||
private static Dictionary<CardId, HeroId> CARD_TO_HERO = new Dictionary<CardId, HeroId>() {
|
public abstract BaseCardT CreateCard(int id, BattleParticipant owner);
|
||||||
{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];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
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,
|
VampireFangs,
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MonsterCardDatabase
|
public class MonsterCardDatabase : CardDatabase<MonsterCard>
|
||||||
{
|
{
|
||||||
public static MonsterCard CreateCard(MCardId id, BattleParticipant owner) {
|
public override MonsterCard CreateCard(int id, BattleParticipant owner) {
|
||||||
switch (id)
|
MCardId monsterCardId = (MCardId) id;
|
||||||
|
switch (monsterCardId)
|
||||||
{
|
{
|
||||||
case MCardId.VampireFangs:
|
case MCardId.VampireFangs:
|
||||||
return new VampireFangsMCard(owner);
|
return new VampireFangsMCard(owner);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue