private static void AssignFirstSet(InterruptAssignment interruptAssignment, List <OrbAssignment> orbAssignments) { var firstSet = interruptAssignment.Sets[1]; var validPlayersFirst3 = orbAssignments.Where(a => a.Set != 1).OrderBy(a => PreferMelee(a.Player)).ThenBy(p => p.Player.Name).ToList(); var aoeStunners = validPlayersFirst3.Where(p => p.Player.HasAoeStun); foreach (var stunner in aoeStunners) { if (firstSet.Adds[2].Interrupts[1] == null) { firstSet.Adds[2].Interrupts[1] = stunner.Player; firstSet.Adds[3].Interrupts[1] = stunner.Player; continue; } if (firstSet.Adds[2].Interrupts[2] == null) { firstSet.Adds[2].Interrupts[2] = stunner.Player; firstSet.Adds[3].Interrupts[2] = stunner.Player; break; } } AssignRest(validPlayersFirst3, firstSet.Adds[1], firstSet); AssignRest(validPlayersFirst3, firstSet.Adds[2], firstSet); AssignRest(validPlayersFirst3, firstSet.Adds[3], firstSet); var validPlayersLast2 = orbAssignments.Where(a => a.Set != 2 && a.Set != 1).OrderBy(a => PreferRanged(a.Player)).ThenBy(p => p.Player.Name).ToList(); AssignRest(validPlayersLast2, firstSet.Adds[4], firstSet); AssignRest(validPlayersLast2, firstSet.Adds[5], firstSet); }
private static void AssignThirdSet(InterruptAssignment interruptAssignment, List <OrbAssignment> orbAssignments) { var thirdSet = interruptAssignment.Sets[3]; var validPlayers = orbAssignments.Where(a => a.Set != 3).OrderBy(a => PreferRanged(a.Player)).ThenBy(p => p.Player.Name).ToList(); AssignRest(validPlayers, thirdSet.Adds[1], thirdSet); AssignRest(validPlayers, thirdSet.Adds[2], thirdSet); AssignRest(validPlayers, thirdSet.Adds[3], thirdSet); }
public static InterruptAssignment AssignInterrupts(List <OrbAssignment> orbAssignments) { var interruptAssignment = new InterruptAssignment(); AssignFirstSet(interruptAssignment, orbAssignments); AssignSecondSet(interruptAssignment, orbAssignments); AssignThirdSet(interruptAssignment, orbAssignments); AssignFourthSet(interruptAssignment, orbAssignments); AssignTendrils(interruptAssignment, orbAssignments); return(interruptAssignment); }
public static IEnumerable <PersonalTendrilAssignment> ListTendrilAssignments(InterruptAssignment assignments) { foreach (var tendrilAssignment in assignments.Tendrils.Interrupts) { yield return(new PersonalTendrilAssignment { Player = tendrilAssignment.Value, Order = tendrilAssignment.Key, Partner = assignments.Tendrils.Interrupts.FirstOrDefault(t => t.Value != tendrilAssignment.Value).Value }); } }
public static List <PersonalInterruptAssignment> ListAssignments(InterruptAssignment assignments) { var personalAssignments = assignments.Sets.SelectMany(s => s.Value.Adds.SelectMany(a => a.Value.Interrupts.Select(i => new PersonalInterruptAssignment { Player = i.Value, Order = i.Key, AddNumber = a.Key, SetNumber = s.Key }))).ToList(); foreach (var personalAssignment in personalAssignments) { var inverseOrder = personalAssignment.Order == 1 ? 2 : 1; personalAssignment.Partner = personalAssignments.FirstOrDefault(pa => pa.SetNumber == personalAssignment.SetNumber && pa.AddNumber == personalAssignment.AddNumber && pa.Order == inverseOrder)?.Player; } return(personalAssignments); }
private static void AssignTendrils(InterruptAssignment interruptAssignment, List <OrbAssignment> orbAssignments) { var validPlayers = orbAssignments.Where(a => a.Set != 3).OrderBy(a => PreferMelee(a.Player)).ThenBy(p => p.Player.Name).ToList(); foreach (var player in validPlayers) { if (IsAssigned(player.Player, interruptAssignment.Sets[3]) || IsAssigned(player.Player, interruptAssignment.Sets[4])) { continue; } if (interruptAssignment.Tendrils.Interrupts[1] == null) { interruptAssignment.Tendrils.Interrupts[1] = player.Player; continue; } if (interruptAssignment.Tendrils.Interrupts[2] == null) { interruptAssignment.Tendrils.Interrupts[2] = player.Player; break; } } }