using System; using System.Collections.Generic; using Continentis.MainGame.Card; using SLSUtilities.General; using SoftCircuits.Collections; using UnityEngine; using UnityEngine.Events; namespace Continentis.MainGame.Character { public partial class IntentionSubmodule : SubmoduleBase { public List allIntentions; public IntentionBase currentIntention; public UnityAction getIntendedCards; public List intendedCards; /// 意图卡被移除后触发,参数为被移除的 IntendedCard 和它原来所在的索引。 public OrderedDictionary> onIntendedCardRemoved; /// 意图卡被替换后触发,参数为旧 IntendedCard、新 IntendedCard 和所在的索引。 public OrderedDictionary> onIntendedCardReplaced; /// 意图卡被插入后触发,参数为新 IntendedCard 和插入的索引。 public OrderedDictionary> onIntendedCardInserted; public IntentionSubmodule(CharacterBase owner) : base(owner) { allIntentions = new List(); currentIntention = new IntentionBase(this); getIntendedCards = owner.GetIntendedCards; intendedCards = new List(); onIntendedCardRemoved = new OrderedDictionary>(); onIntendedCardReplaced = new OrderedDictionary>(); onIntendedCardInserted = new OrderedDictionary>(); } } public class IntendedCard { public CardInstance cardInstance; public List targets; public IntendedCard(CardInstance cardInstance, List targets) { this.cardInstance = cardInstance; this.targets = targets; } } public class IntentionBase : IPrioritized { public IntentionSubmodule intentionSubmodule; public CharacterBase character => intentionSubmodule.owner; public DeckSubmodule characterDeck => character.deckSubmodule; public RecordSubmodule characterRecord => character.recordSubmodule; public int Priority { get; protected set; } public int guaranteedStamina; public int guaranteedMana; public int maxCardCount; public IntentionBase(IntentionSubmodule intentionSubmodule) { this.intentionSubmodule = intentionSubmodule; this.Priority = 0; this.guaranteedStamina = 0; this.guaranteedMana = 0; this.maxCardCount = 999; } public virtual bool Condition() { return true; } public virtual void RefreshCardWeights() { } public virtual void RefreshTargets() { } /// NPC 本回合出牌前调用,可用于播放蓄力台词、切换动画状态等。 public virtual void PreAction() { } /// NPC 本回合全部卡牌出完后调用,可用于播放结束台词、重置状态等。 public virtual void PostAction() { } } }