public static Item Select(List <Item> items, string selector) { Item result = null; if (items.Count <= 0) { return(null); } switch (selector) { case "Random": result = items[Utility.Random(items.Count)] as Item; break; case "Nearest": Item nearest = items[0] as Item; if (nearest != null) { double minDist = Misc.DistanceSqrt(Player.Position, nearest.Position); foreach (Item t in items) { if (t == null) { continue; } double dist = Misc.DistanceSqrt(Player.Position, t.Position); if (!(dist < minDist)) { continue; } nearest = t; minDist = dist; } result = nearest; } break; case "Farthest": Item farthest = items[0] as Item; if (farthest != null) { double maxDist = Misc.DistanceSqrt(Player.Position, farthest.Position); foreach (Item t in items) { if (t == null) { continue; } double dist = Misc.DistanceSqrt(Player.Position, t.Position); if (dist > maxDist) { farthest = t; maxDist = dist; } } result = farthest; } break; case "Less": Item least = items[0] as Item; if (least != null) { int minAmount = least.Amount; foreach (Item t in items) { if (t == null) { continue; } int amount = t.Amount; if (amount < minAmount) { least = t; minAmount = amount; } } result = least; } break; case "Most": Item most = items[0] as Item; if (most != null) { int maxAmount = most.Amount; foreach (Item t in items) { if (t == null) { continue; } int amount = t.Amount; if (amount <= maxAmount) { continue; } most = t; maxAmount = amount; } result = most; } break; case "Weakest": Item weakest = items[0] as Item; if (weakest != null) { int minDur = weakest.Durability; foreach (Item t in items) { if (t == null) { continue; } int dur = t.Durability; if (dur >= minDur) { continue; } weakest = t; minDur = dur; } result = weakest; } break; case "Strongest": Item strongest = items[0] as Item; if (strongest != null) { int maxDur = strongest.Durability; foreach (Item t in items) { if (t == null) { continue; } int dur = t.Durability; if (dur <= maxDur) { continue; } strongest = t; maxDur = dur; } result = strongest; } break; } return(result); }