From f553196ca0352b9f709190c58143cdf11a297fa8 Mon Sep 17 00:00:00 2001 From: Jose Henrique Date: Wed, 5 Feb 2025 20:37:12 -0300 Subject: [PATCH] Refactor inventory unequip logic to use item ID instead of equip target; update README for inventory and skill tree progress --- Controllers/InventoryController.cs | 6 +++--- README.md | 16 ++++++++-------- Repositories/PetSkillRepository.cs | 7 +++++++ Services/PetInventoryService.cs | 14 ++++++++------ Services/PetSkillService.cs | 6 ++++++ 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Controllers/InventoryController.cs b/Controllers/InventoryController.cs index d55430b..8599e15 100644 --- a/Controllers/InventoryController.cs +++ b/Controllers/InventoryController.cs @@ -62,12 +62,12 @@ namespace PetCompanion.Controllers } } - [HttpPut("{petId}/{equipTarget}/unequip")] - public IActionResult UnequipItem(string petId, ItemEquipTarget equipTarget) + [HttpPut("{petId}/{itemId}/unequip")] + public IActionResult UnequipItem(string petId, int itemId) { try { - var updatedPet = inventoryService.UnequipItem(petId, userId.ToString(), equipTarget); + var updatedPet = inventoryService.UnequipItem(petId, userId.ToString(), itemId); return Ok(updatedPet); } catch (Exception ex) diff --git a/README.md b/README.md index 947355e..54f8c82 100644 --- a/README.md +++ b/README.md @@ -15,15 +15,15 @@ ## Inventory system - [ ] Inventory UI -- [ ] Inventory database -- [ ] Inventory item database (items, consumables, equipment) -- [ ] Inventory item interactions (use, equip, unequip, drop) -- [ ] Inventory item stacking +- [x] Inventory database +- [x] Inventory item database (items, consumables, equipment) +- [x] Inventory item interactions (use, equip, unequip, drop) +- [/] Inventory item stacking - [ ] Inventory item sorting (UI) ## Skill tree system - [ ] Skill tree UI -- [ ] Skill tree database -- [ ] Skill tree interactions (learn, unlearn, upgrade) -- [ ] Skill tree requirements (level, skill points, other skills) -- [ ] Skill tree effects (TBD) +- [x] Skill tree database +- [/] Skill tree interactions (learn, unlearn, upgrade) +- [/] Skill tree requirements (level, skill points, other skills) +- [x] Skill tree effects (TBD) diff --git a/Repositories/PetSkillRepository.cs b/Repositories/PetSkillRepository.cs index 76af9bd..bbb8cde 100644 --- a/Repositories/PetSkillRepository.cs +++ b/Repositories/PetSkillRepository.cs @@ -13,6 +13,13 @@ namespace PetCompanion.Repositories _context = context; } + public Skill GetSkill(int id) + { + return _context.Skills + .Include(s => s.Effects) + .FirstOrDefault(s => s.Id == id); + } + public IEnumerable GetPetSkills(string petId) { return _context.PetSkills diff --git a/Services/PetInventoryService.cs b/Services/PetInventoryService.cs index 28cf49b..0407f22 100644 --- a/Services/PetInventoryService.cs +++ b/Services/PetInventoryService.cs @@ -79,7 +79,8 @@ namespace PetCompanion.Services // If there's already an item equipped in that slot, unequip it first if (pet.EquippedItems.ContainsKey(gameItem.EquipTarget)) { - UnequipItem(petId, userId, gameItem.EquipTarget); + var equippedItemId = pet.EquippedItems[gameItem.EquipTarget]; + UnequipItem(petId, userId, equippedItemId); } // Apply equipment effects @@ -96,17 +97,18 @@ namespace PetCompanion.Services return petRepository.UpdatePet(pet); } - public Pet UnequipItem(string petId, string userId, ItemEquipTarget equipTarget) + public Pet UnequipItem(string petId, string userId, int itemId) { var pet = petRepository.GetPetById(petId, userId); if (pet == null) throw new Exception("Pet not found"); - if (!pet.EquippedItems.ContainsKey(equipTarget)) + var equipTarget = pet.EquippedItems.FirstOrDefault(kvp => kvp.Value == itemId).Key; + + if (equipTarget == ItemEquipTarget.None) throw new Exception("No item equipped in that slot"); - var equippedItemId = pet.EquippedItems[equipTarget]; - var equippedItem = gameItemsRepository.GetById(equippedItemId); + var equippedItem = gameItemsRepository.GetById(itemId); if (equippedItem != null) { @@ -114,7 +116,7 @@ namespace PetCompanion.Services gameItemService.RemoveItemEffect(pet, equippedItem); // Add item back to inventory - pet.Inventory.Items.Add(equippedItemId); + pet.Inventory.Items.Add(itemId); } pet.EquippedItems.Remove(equipTarget); diff --git a/Services/PetSkillService.cs b/Services/PetSkillService.cs index a01bb15..48c2d78 100644 --- a/Services/PetSkillService.cs +++ b/Services/PetSkillService.cs @@ -32,6 +32,7 @@ namespace PetCompanion.Services if (pet.SkillPoints <= 0) throw new Exception("No skill points available"); + var skill = _petSkillRepository.GetSkill(skillId); var skills = _petSkillRepository.GetPetSkills(petId); var existingSkill = skills.FirstOrDefault(s => s.SkillId == skillId); @@ -45,6 +46,11 @@ namespace PetCompanion.Services } else { + if (!skill.SkillsIdRequired.TrueForAll(ni => pet.Skills.Any(s => s.SkillId == ni))) + { + throw new Exception("Missing required skill"); + } + existingSkill = new PetSkill { PetId = petId,