Ejemplo n.º 1
0
 private void EIExtraEventProcess(List <Player> players, SkillData skillData, FightData fightData)
 {
     EIBuffParse(players, skillData, fightData);
     EIDamageParse(skillData, fightData);
     EICastParse(players, skillData);
     EIStatusParse();
     // master attachements
     WarriorHelper.AttachMasterToWarriorBanners(players, _buffData, _castDataById);
     EngineerHelper.AttachMasterToEngineerTurrets(players, _damageDataById, _castDataById);
     RangerHelper.AttachMasterToRangerGadgets(players, _damageDataById, _castDataById);
     ProfHelper.AttachMasterToRacialGadgets(players, _damageDataById, _castDataById);
 }
 private void EIExtraEventProcess(List <Player> players, SkillData skillData, AgentData agentData, FightData fightData, ParserController operation)
 {
     operation.UpdateProgressWithCancellationCheck("Creating Custom Buff Events");
     EIBuffParse(players, skillData, fightData);
     operation.UpdateProgressWithCancellationCheck("Creating Custom Damage Events");
     EIDamageParse(skillData, fightData);
     operation.UpdateProgressWithCancellationCheck("Creating Custom Cast Events");
     EICastParse(players, skillData, agentData);
     operation.UpdateProgressWithCancellationCheck("Creating Custom Status Events");
     EIStatusParse();
     // master attachements
     operation.UpdateProgressWithCancellationCheck("Attaching Banners to Warriors");
     WarriorHelper.AttachMasterToWarriorBanners(players, _buffData, _castDataById);
     operation.UpdateProgressWithCancellationCheck("Attaching Turrets to Engineers");
     EngineerHelper.AttachMasterToEngineerTurrets(players, _damageDataById, _castDataById);
     operation.UpdateProgressWithCancellationCheck("Attaching Ranger Gadgets to Rangers");
     RangerHelper.AttachMasterToRangerGadgets(players, _damageDataById, _castDataById);
     operation.UpdateProgressWithCancellationCheck("Attaching Racial Gadgets to Players");
     ProfHelper.AttachMasterToRacialGadgets(players, _damageDataById, _castDataById);
 }
        private void EICastParse(List <Player> players, SkillData skillData, AgentData agentData)
        {
            var toAdd = new List <AbstractCastEvent>();

            toAdd.AddRange(ProfHelper.ComputeInstantCastEvents(players, this, skillData, agentData));
            //
            var castIDsToSort       = new HashSet <long>();
            var castAgentsToSort    = new HashSet <AgentItem>();
            var wepSwapAgentsToSort = new HashSet <AgentItem>();
            var instantAgentsToSort = new HashSet <AgentItem>();

            foreach (AbstractCastEvent cast in toAdd)
            {
                if (cast is AnimatedCastEvent ace)
                {
                    if (_animatedCastData.TryGetValue(ace.Caster, out List <AnimatedCastEvent> list1))
                    {
                        list1.Add(ace);
                    }
                    else
                    {
                        _animatedCastData[ace.Caster] = new List <AnimatedCastEvent>()
                        {
                            ace
                        };
                    }
                    castAgentsToSort.Add(ace.Caster);
                }
                if (cast is WeaponSwapEvent wse)
                {
                    if (_weaponSwapData.TryGetValue(wse.Caster, out List <WeaponSwapEvent> list1))
                    {
                        list1.Add(wse);
                    }
                    else
                    {
                        _weaponSwapData[wse.Caster] = new List <WeaponSwapEvent>()
                        {
                            wse
                        };
                    }
                    wepSwapAgentsToSort.Add(wse.Caster);
                }
                if (cast is InstantCastEvent ice)
                {
                    if (_instantCastData.TryGetValue(ice.Caster, out List <InstantCastEvent> list1))
                    {
                        list1.Add(ice);
                    }
                    else
                    {
                        _instantCastData[ice.Caster] = new List <InstantCastEvent>()
                        {
                            ice
                        };
                    }
                    instantAgentsToSort.Add(ice.Caster);
                }
                if (_castDataById.TryGetValue(cast.SkillId, out List <AbstractCastEvent> list2))
                {
                    list2.Add(cast);
                }
                else
                {
                    _castDataById[cast.SkillId] = new List <AbstractCastEvent>()
                    {
                        cast
                    };
                }
                castIDsToSort.Add(cast.SkillId);
            }
            foreach (long buffID in castIDsToSort)
            {
                _castDataById[buffID].Sort((x, y) => x.Time.CompareTo(y.Time));
            }
            foreach (AgentItem a in castAgentsToSort)
            {
                _animatedCastData[a].Sort((x, y) => x.Time.CompareTo(y.Time));
            }
            foreach (AgentItem a in wepSwapAgentsToSort)
            {
                _weaponSwapData[a].Sort((x, y) => x.Time.CompareTo(y.Time));
            }
            foreach (AgentItem a in instantAgentsToSort)
            {
                _instantCastData[a].Sort((x, y) => x.Time.CompareTo(y.Time));
            }
        }
 public static bool IsKnownMinionID(AgentItem minion, ParserHelper.Spec spec)
 {
     return(ProfHelper.IsKnownMinionID(minion, spec));
 }
        private void EICastParse(IReadOnlyList <Player> players, SkillData skillData, FightData fightData, AgentData agentData)
        {
            List <AbstractCastEvent> toAdd = fightData.Logic.SpecialCastEventProcess(this, skillData);

            toAdd.AddRange(ProfHelper.ComputeInstantCastEvents(players, this, skillData, agentData, fightData.Logic));
            foreach (Player p in players)
            {
                switch (p.Spec)
                {
                case ParserHelper.Spec.Willbender:
                    toAdd.AddRange(WillbenderHelper.ComputeFlowingResolveCastEvents(p, this, skillData, agentData));
                    break;

                default:
                    break;
                }
            }
            //
            var castIDsToSort       = new HashSet <long>();
            var castAgentsToSort    = new HashSet <AgentItem>();
            var wepSwapAgentsToSort = new HashSet <AgentItem>();
            var instantAgentsToSort = new HashSet <AgentItem>();

            foreach (AbstractCastEvent cast in toAdd)
            {
                if (cast is AnimatedCastEvent ace)
                {
                    if (_animatedCastData.TryGetValue(ace.Caster, out List <AnimatedCastEvent> animatedCastList))
                    {
                        animatedCastList.Add(ace);
                    }
                    else
                    {
                        _animatedCastData[ace.Caster] = new List <AnimatedCastEvent>()
                        {
                            ace
                        };
                    }
                    castAgentsToSort.Add(ace.Caster);
                    if (_animatedCastDataById.TryGetValue(ace.SkillId, out List <AnimatedCastEvent> animatedCastByIDList))
                    {
                        animatedCastByIDList.Add(ace);
                    }
                    else
                    {
                        _animatedCastDataById[cast.SkillId] = new List <AnimatedCastEvent>()
                        {
                            ace
                        };
                    }
                    castIDsToSort.Add(cast.SkillId);
                }
                if (cast is WeaponSwapEvent wse)
                {
                    if (_weaponSwapData.TryGetValue(wse.Caster, out List <WeaponSwapEvent> weaponSwapList))
                    {
                        weaponSwapList.Add(wse);
                    }
                    else
                    {
                        _weaponSwapData[wse.Caster] = new List <WeaponSwapEvent>()
                        {
                            wse
                        };
                    }
                    wepSwapAgentsToSort.Add(wse.Caster);
                }
                if (cast is InstantCastEvent ice)
                {
                    if (_instantCastData.TryGetValue(ice.Caster, out List <InstantCastEvent> instantCastList))
                    {
                        instantCastList.Add(ice);
                    }
                    else
                    {
                        _instantCastData[ice.Caster] = new List <InstantCastEvent>()
                        {
                            ice
                        };
                    }
                    instantAgentsToSort.Add(ice.Caster);
                }
            }
            foreach (long castID in castIDsToSort)
            {
                _animatedCastDataById[castID] = _animatedCastDataById[castID].OrderBy(x => x.Time).ToList();
            }
            foreach (AgentItem a in castAgentsToSort)
            {
                _animatedCastData[a] = _animatedCastData[a].OrderBy(x => x.Time).ToList();
            }
            foreach (AgentItem a in wepSwapAgentsToSort)
            {
                _weaponSwapData[a] = _weaponSwapData[a].OrderBy(x => x.Time).ToList();
            }
            foreach (AgentItem a in instantAgentsToSort)
            {
                _instantCastData[a] = _instantCastData[a].OrderBy(x => x.Time).ToList();
            }
        }