private string GetRandomNonCraftableItemName(RandomizableStore availableItems, string itemType)
        {
            int    availableItemCount = availableItems.AvailableNonCraftableItemCountByType(itemType);
            int    randomIndex        = _randomizerService.GetRandomItemIndex(availableItemCount);
            string randomItemName     = availableItems.TakeAllNonCraftableItem(itemType, randomIndex);

            return(randomItemName);
        }
 private void RandomizeDropItems(List <DropItemEntry> dropList, RandomizableStore availableItems)
 {
     foreach (DropItemEntry dropEntry in dropList)
     {
         if (IsEntryRandomizableForOutput(dropEntry))
         {
             string randomItemName = GetRandomItem(availableItems, dropEntry.GetItemType());
             SetNewItemForDrop(dropEntry, randomItemName);
         }
     }
 }
 private void RandomizeQuestItems(List <QuestItemEntry> questList, RandomizableStore availableItems)
 {
     foreach (QuestItemEntry questEntry in questList)
     {
         if (IsEntryRandomizableForOutput(questEntry))
         {
             questEntry.Value.RewardItem01 = GetRandomItem(availableItems, questEntry.GetItemType());
             questEntry.Value.RewardNum01  = 1;
         }
     }
 }
        public void RandomizeItems(GameFiles gameFilesToModify)
        {
            var randomizableItemStore = new RandomizableStore();

            AddAllRandomizableItems(gameFilesToModify.DropList, randomizableItemStore);
            AddAllRandomizableItems(gameFilesToModify.QuestList, randomizableItemStore);
            AddAllGourmandQuestFoods(gameFilesToModify.QuestList, randomizableItemStore);
            AddAllCraftableItemsToRandomize(gameFilesToModify.CraftList, randomizableItemStore);

            RandomizeDropItems(gameFilesToModify.DropList, randomizableItemStore);
            RandomizeQuestItems(gameFilesToModify.QuestList, randomizableItemStore);
            RandomizeCraftItems(gameFilesToModify.CraftList, randomizableItemStore);
        }
        private Dictionary <string, ICollection <string> > FindAllItemsToReplace(RandomizableStore availableItems)
        {
            var itemsToReplaceDict = new Dictionary <string, ICollection <string> >();

            foreach (string itemType in availableItems.AvailableItemTypes().Where(IsItemTypeRandomizableForCraftOutput))
            {
                List <string> alreadyAssignedCraftItems = availableItems.GetAllUnavailableCraftableItemNames(itemType);
                int           numberOfItemsLeftToAssign = availableItems.AvailableNonCraftableItemCountByType(itemType);
                itemsToReplaceDict[itemType] = _randomizerService.GetRandomEntriesFromList(alreadyAssignedCraftItems, numberOfItemsLeftToAssign);
            }

            return(itemsToReplaceDict);
        }
        private string GetRandomItem(RandomizableStore availableItems, string itemType)
        {
            int availableItemCount = availableItems.AvailableItemCountByType(itemType);
            int randomIndex        = _randomizerService.GetRandomItemIndex(availableItemCount);

            if (Constants.ItemTypeConsumable.Equals(itemType))
            {
                const int decrementAmount = 0;
                return(availableItems.TakeNumberOfItem(itemType, randomIndex, decrementAmount));
            }

            return(availableItems.TakeSingleItem(itemType, randomIndex));
        }
        private void RandomizeCraftItems(List <CraftItemEntry> craftList, RandomizableStore availableItems)
        {
            Dictionary <string, ICollection <string> > itemsToReplaceByType = FindAllItemsToReplace(availableItems);
            var newCraftEntries = new List <CraftItemEntry>();

            foreach (CraftItemEntry entry in craftList.Where(IsCraftEntryRandomizableForOutput))
            {
                IEnumerable <string> itemsToReplace = itemsToReplaceByType[entry.GetItemType()];
                if (itemsToReplace.Contains(entry.GetItemName()))
                {
                    string randomItemName = GetRandomNonCraftableItemName(availableItems, entry.GetItemType());
                    newCraftEntries.Add(CreateReplacementCraftEntry(entry, randomItemName));
                }
            }

            craftList.AddRange(newCraftEntries);
        }
 private void AddAllCraftableItemsToRandomize(IEnumerable <CraftItemEntry> craftList, RandomizableStore storeToAddTo)
 {
     craftList.Where(IsEntryRandomizableForCraftInput)
     .ToList()
     .ForEach(entry => storeToAddTo.AddCraftableItem(entry.GetItemName(), entry.GetItemType()));
 }
 private static void AddAllGourmandQuestFoods(List <QuestItemEntry> questList, RandomizableStore storeToAddTo)
 {
     questList.Where(entry => entry.IsGourmandQuest())
     .ToList()
     .ForEach(entry => storeToAddTo.AddItem(entry.Value.Item01, Constants.ItemTypeFood));
 }
 private void AddAllRandomizableItems(IEnumerable <IItemEntry> itemList, RandomizableStore storeToAddTo)
 {
     itemList.Where(IsEntryRandomizableForInput)
     .ToList()
     .ForEach(entry => storeToAddTo.AddItem(entry.GetItemName(), entry.GetItemType()));
 }