/// <summary>
 /// Get a list of free slots in class roster. New heroines can be added to these slots in saveData.heroineList.
 /// <example>
 /// var freeSlot = saveData.GetFreeClassSlots(1).FirstOrDefault();
 /// freeSlot.SetCharFile(fairyCard.charFile);
 /// freeSlot.charFileInitialized = true;
 /// saveData.heroineList.Add(freeSlot);
 /// </example>
 /// </summary>
 /// <param name="saveData"></param>
 /// <param name="classNumber">Class to search for free slots. Starts at 0, 1 is player's class, last 'class' is not usable since it's only for NPCs.</param>
 public static IEnumerable <SaveData.Heroine> GetFreeClassSlots(this SaveData.WorldData saveData, int classNumber)
 {
     return(Enumerable.Range(0, GetClassMaxSeatCount(saveData, classNumber))
            .Where(index => IsValidClassSeat(saveData, classNumber, index) && GetHeroineAtSeat(saveData, classNumber, index) == null)
            .Select(index => new SaveData.Heroine(true)
     {
         schoolClass = classNumber, schoolClassIndex = index
     }));
 }
 /// <summary>
 /// Get heroine at a specified class and seat.
 /// </summary>
 public static SaveData.Heroine GetHeroineAtSeat(this SaveData.WorldData saveData, int classNumber, int classIndex)
 {
     return(saveData.heroineList.Find(h => h.schoolClass == classNumber && h.schoolClassIndex == classIndex));
 }