69 lines
1.9 KiB
C#
69 lines
1.9 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class TurnIntentions<BaseCardT> where BaseCardT: BaseCard
|
|
{
|
|
public delegate void IntentionsChangedAction();
|
|
public event IntentionsChangedAction OnIntentionsChanged;
|
|
|
|
private BattleDeck<BaseCardT> mDeck;
|
|
private EnergyPool mEnergyPool;
|
|
private bool mActive;
|
|
private List<BaseCardT> mCardsToUse = new List<BaseCardT>();
|
|
|
|
public TurnIntentions(BattleDeck<BaseCardT> deck, EnergyPool energyPool) {
|
|
mDeck = deck;
|
|
mEnergyPool = energyPool;
|
|
mActive = true;
|
|
|
|
mDeck.OnDrawPileChanged += OnDependencyChanged;
|
|
mEnergyPool.OnEnergyChanged += OnDependencyChanged;
|
|
}
|
|
|
|
public void ResumeIntentions() {
|
|
mActive = true;
|
|
UpdateState();
|
|
TriggerOnIntentionsChanged();
|
|
}
|
|
|
|
public void PauseIntentions() {
|
|
mActive = false;
|
|
mCardsToUse.Clear();
|
|
TriggerOnIntentionsChanged();
|
|
}
|
|
|
|
private void OnDependencyChanged() {
|
|
if (mActive) {
|
|
UpdateState();
|
|
TriggerOnIntentionsChanged();
|
|
}
|
|
}
|
|
|
|
public bool WillUseCard(BaseCardT card) {
|
|
return mCardsToUse.Contains(card);
|
|
}
|
|
|
|
private void UpdateState() {
|
|
int projectedEnergy = mEnergyPool.Energy;
|
|
// TODO: Account for emotions
|
|
|
|
mCardsToUse.Clear();
|
|
|
|
List<BaseCardT> hand = mDeck.GetHandPile();
|
|
for (int i = 0; i < hand.Count; i++) {
|
|
BaseCardT card = hand[i];
|
|
if (card.Owner.CanUseCard(card)
|
|
&& projectedEnergy >= card.GetCost()) {
|
|
projectedEnergy -= card.GetCost();
|
|
mCardsToUse.Add(card);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TriggerOnIntentionsChanged() {
|
|
if (OnIntentionsChanged != null) {
|
|
OnIntentionsChanged();
|
|
}
|
|
}
|
|
}
|