private void EnqueueSpellStatusData(int statusId, SpellStatusData spellStatusData) { if (!m_spellUsabilityQueue.TryGetValue(statusId, out Queue <SpellStatusData> value)) { value = m_queuePool.Get(); m_spellUsabilityQueue.Add(statusId, value); } value.Enqueue(spellStatusData); CheckQueue(); }
private void OnCastingValidityUpdated(EventCategory category) { if (m_spellsPerCategoryInvalidatingStatus.TryGetValue(category, out List <int> value)) { foreach (int item in value) { if (m_playerStatus.TryGetSpell(item, out SpellStatus spellStatus)) { SpellStatusData data = default(SpellStatusData); CastValidityHelper.RecomputeSpellCost(spellStatus, ref data); CastValidityHelper.RecomputeSpellCastValidity(spellStatus.ownerPlayer, spellStatus, ref data); EnqueueSpellStatusData(spellStatus.instanceId, data); } } } }
public static void RecomputeSpellCost(SpellStatus spellStatus, ref SpellStatusData data) { if (spellStatus.ownerPlayer != null) { int?baseCost = spellStatus.baseCost; if (!baseCost.HasValue) { data.apCost = null; data.baseCost = null; return; } SpellDefinition definition = spellStatus.definition; CastTargetContext context = spellStatus.CreateCastTargetContext(); int cost = spellStatus.definition.GetCost(context) ?? 0; data.apCost = SpellCostModification.ApplyCostModification(spellStatus.ownerPlayer.spellCostModifiers, cost, definition, context); data.baseCost = baseCost.Value; } }
public void RefreshUsability(PlayerStatus status, bool recomputeCosts) { List <int> list = new List <int>(); IEnumerator <SpellStatus> spellStatusEnumerator = status.GetSpellStatusEnumerator(); while (spellStatusEnumerator.MoveNext()) { SpellStatus current = spellStatusEnumerator.Current; if (current != null) { SpellStatusData data = default(SpellStatusData); CastValidityHelper.RecomputeSpellCastValidity(current.ownerPlayer, current, ref data); CastValidityHelper.RecomputeSpellCost(current, ref data); EnqueueSpellStatusData(current.instanceId, data); list.Add(current.instanceId); } } m_refreshUsabilityQueue.Enqueue(list); }
public void AddSpellStatus(SpellStatus spellStatus) { SpellStatusData data = default(SpellStatusData); CastValidityHelper.RecomputeSpellCastValidity(spellStatus.ownerPlayer, spellStatus, ref data); CastValidityHelper.RecomputeSpellCost(spellStatus, ref data); EnqueueSpellStatusData(spellStatus.instanceId, data); HashSet <EventCategory> hashSet = new HashSet <EventCategory>(); foreach (EventCategory item in spellStatus.definition.eventsInvalidatingCost) { hashSet.Add(item); } foreach (EventCategory item2 in spellStatus.definition.eventsInvalidatingCasting) { hashSet.Add(item2); } AddFightEventListeners(spellStatus, hashSet, status: true); }
public static void RecomputeSpellCastValidity(PlayerStatus owner, SpellStatus spellStatus, ref SpellStatusData data) { data.hasEnoughAp = (ComputeSpellCostCastValidity(owner, spellStatus) == CastValidity.SUCCESS); }