private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { Game.Items.AlchemyRecipe selectedRecipe = (Game.Items.AlchemyRecipe)cbRecipeList.SelectedItem; tbRequired.Text += $"To craft {selectedRecipe.RecipeName}:" + Environment.NewLine; foreach (KeyValuePair <Game.Items.GameItems, int> recipe in selectedRecipe.RequiredToCraft) { tbRequired.Text += $"Item: {recipe.Key.Name} Amount: {recipe.Value}" + Environment.NewLine; } }
// That's one big bad code. Works for now, but want to rewrite it later private void btnCraft_Click(object sender, RoutedEventArgs e) { Game.Items.AlchemyRecipe selectedRecipe = (Game.Items.AlchemyRecipe)cbRecipeList.SelectedItem; List <bool> isAllItemsAvailable = new List <bool>(); // list for checking purpose foreach (KeyValuePair <Game.Items.GameItems, int> recipe in selectedRecipe.RequiredToCraft) { foreach (var item in gameSession.Hero.Inventory) { if (item.ID.Equals(recipe.Key.ID)) { if (item.Quantity >= recipe.Value) { isAllItemsAvailable.Add(true); // true if ingredient is available } } } } // moving through list once again to remove items that were used in crafting if (isAllItemsAvailable.Count.Equals(selectedRecipe.RequiredToCraft.Count)) { foreach (KeyValuePair <Game.Items.GameItems, int> recipe in selectedRecipe.RequiredToCraft) { for (int i = 0; i < gameSession.Hero.Inventory.Count; i++) { if (gameSession.Hero.Inventory[i].ID.Equals(recipe.Key.ID)) { if (gameSession.Hero.Inventory[i].Quantity >= recipe.Value) { gameSession.Hero.RemoveItemToInventory(gameSession.Hero.Inventory[i], recipe.Value); i = 0; } } } } gameSession.Hero.AddItemToInventory(Game.Items.ItemsFactory.ItemByID(selectedRecipe.CraftingItem.ID)); } else { MessageBox.Show($"You don't have ingredients to craft {selectedRecipe.RecipeName}"); return; } }