//If performance is an issue let's memoize this, reason I haven't done that off the bat is //there is no readily safe identifier I can use to link the same troop types. //and honestly I think its over-optimising anyways to even consider it, memory is enough of a problem. private static double getTroopXpDivisor(TroopRoster roster, FlattenedTroopRosterElement item) { int indexOfTroop = roster.FindIndexOfTroop(item.Troop); if (indexOfTroop == -1) { return(1); } TroopRosterElement element = roster.GetElementCopyAtIndex(indexOfTroop); if (element.NumberReadyToUpgrade == 0 || element.Number == 0) { return(1); } return((double)element.Number / (double)element.NumberReadyToUpgrade); }