using System.Collections; using System.Collections.Generic; using UnityEngine; public class TurnIntentions where BaseCardT: BaseCard { public delegate void IntentionsChangedAction(); public event IntentionsChangedAction OnIntentionsChanged; private BattleDeck mDeck; private EnergyPool mEnergyPool; private bool mActive; private List mCardsToUse = new List(); public TurnIntentions(BattleDeck 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 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(); } } }