Example #1
0
 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();
 }
Example #2
0
 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);
             }
         }
     }
 }
Example #3
0
 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;
     }
 }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
 public static void RecomputeSpellCastValidity(PlayerStatus owner, SpellStatus spellStatus, ref SpellStatusData data)
 {
     data.hasEnoughAp = (ComputeSpellCostCastValidity(owner, spellStatus) == CastValidity.SUCCESS);
 }