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)); } } }
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)); } } }