public List <int> PickEnemies(Team group, int max = 1) { IWeightedRandomizer <int> randomizer = new DynamicWeightedRandomizer <int>(); for (int i = 0; i < Characters.Count; i++) { if (Characters[i].Group != group && Characters[i].Alive) { randomizer.Add(i, Characters[i].HighValueTarget ? 8 : 1); } } List <int> result = new List <int>(); int total = randomizer.Count; if (total > 0) { if (max > total) { max = total; } if (max > 1) { max = ClampMax(max); } for (int j = 0; j < max; j++) { result.Add(randomizer.NextWithRemoval()); } } return(result); }
private int ClampMax(int max) { IWeightedRandomizer <int> randomizer = new DynamicWeightedRandomizer <int>(); for (int i = 0; i < max; i++) { randomizer.Add(i + 1, max - i); } return(randomizer.NextWithRemoval()); }
public int PickHealTarget(Team group) { IWeightedRandomizer <int> randomizer = new DynamicWeightedRandomizer <int>(); for (int i = 0; i < Characters.Count; i++) { if (Characters[i].Group == group && Characters[i].Alive && Characters[i].Priority != HealPriority.Dont) { if (Characters[i].Health <= Characters[i].HealingThreshold) { randomizer.Add(i, (int)Characters[i].Priority); } } } if (randomizer.Count > 0) { return(randomizer.NextWithRemoval()); } return(-1); }