public InventoryItemType GetInsertedItem(List <Location> currentLocations, List <InventoryItemType> itemPool, SeedRandom random) { var randomItems = random.RandomizeList(itemPool); foreach (var item in randomItems) { var badLateGameItem = IsLateGameItem(item) && !currentLocations.Any(x => x.LateGameItem); var preferLateGameItem = !IsLateGameItem(item) && currentLocations.Any(x => x.LateGameItem) && itemPool.Any(IsLateGameItem); if (!(badLateGameItem || preferLateGameItem)) { return(item); } } throw new RandomizationException("GetInsertedItem: Couldn't find a good item."); }
public int GetInsertedLocation(List <Location> currentLocations, InventoryItemType insertedItem, SeedRandom random) { var randomLocations = random.RandomizeList(currentLocations); foreach (var location in randomLocations) { var badLateGameItemSpot = IsLateGameItem(insertedItem) && !location.LateGameItem; var badFirstItemSpot = IsBadFirstItem(insertedItem) && location.Name == "[cave-040] Link's House"; var badNeverItemSpot = location.NeverItems.Contains(insertedItem); if (!(badLateGameItemSpot || badFirstItemSpot || badNeverItemSpot)) { return(currentLocations.IndexOf(location)); } } throw new RandomizationException(string.Format("GetInsertedLocation: Couldn't find a good place for {0}.", insertedItem)); }