Exemple #1
0
        private void DetermineTurnOrder()
        {
            _turnOrder.Clear();
            IEnumerable <PBEPokemon> pkmnSwitchingOut = ActiveBattlers.Where(p => p.TurnAction.Decision == PBETurnDecision.SwitchOut);
            IEnumerable <PBEPokemon> pkmnFighting     = ActiveBattlers.Where(p => p.TurnAction.Decision == PBETurnDecision.Fight);

            // Switching happens first:
            _turnOrder.AddRange(GetActingOrder(pkmnSwitchingOut, true));
            // Moves:
            sbyte GetPrio(PBEPokemon p)
            {
                PBEMoveData mData = PBEMoveData.Data[p.TurnAction.FightMove];

                return((sbyte)PBEUtils.Clamp(mData.Priority + (p.Ability == PBEAbility.Prankster && mData.Category == PBEMoveCategory.Status ? 1 : 0), sbyte.MinValue, sbyte.MaxValue));
            }

            foreach (sbyte priority in pkmnFighting.Select(p => GetPrio(p)).Distinct().OrderByDescending(p => p))
            {
                PBEPokemon[] pkmnWithThisPriority = pkmnFighting.Where(p => GetPrio(p) == priority).ToArray();
                if (pkmnWithThisPriority.Length > 0)
                {
                    Debug.WriteLine("Priority {0} bracket...", priority);
                    _turnOrder.AddRange(GetActingOrder(pkmnWithThisPriority, false));
                }
            }
        }
Exemple #2
0
        void DetermineTurnOrder()
        {
            turnOrder.Clear();
            IEnumerable <PBEPokemon> pkmnSwitchingOut = ActiveBattlers.Where(p => p.SelectedAction.Decision == PBEDecision.SwitchOut);
            IEnumerable <PBEPokemon> pkmnFighting     = ActiveBattlers.Where(p => p.SelectedAction.Decision == PBEDecision.Fight);

            // Switching happens first:
            turnOrder.AddRange(GetActingOrder(pkmnSwitchingOut, true));
            // Moves:
            foreach (sbyte priority in pkmnFighting.Select(p => PBEMoveData.Data[p.SelectedAction.FightMove].Priority).Distinct().OrderByDescending(p => p))
            {
                IEnumerable <PBEPokemon> pkmnWithThisPriority = pkmnFighting.Where(p => PBEMoveData.Data[p.SelectedAction.FightMove].Priority == priority);
                if (pkmnWithThisPriority.Count() > 0)
                {
                    Debug.WriteLine("Priority {0} bracket...", priority);
                    turnOrder.AddRange(GetActingOrder(pkmnWithThisPriority, false));
                }
            }
        }