예제 #1
0
        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));
        }