156 lines
5.1 KiB
C#
156 lines
5.1 KiB
C#
using PetCompanion.Models;
|
|
using PetCompanion.Repositories;
|
|
|
|
namespace PetCompanion.Services
|
|
{
|
|
public class PetInventoryService
|
|
{
|
|
private readonly PetInventoryRepository petInventoryRepository;
|
|
private readonly PetRepository petRepository;
|
|
private readonly GameItemsRepository gameItemsRepository;
|
|
private readonly GameItemService gameItemService;
|
|
|
|
public PetInventoryService(
|
|
PetInventoryRepository petInventoryRepository,
|
|
PetRepository petRepository,
|
|
GameItemsRepository gameItemsRepository,
|
|
GameItemService gameItemService)
|
|
{
|
|
this.petInventoryRepository = petInventoryRepository;
|
|
this.petRepository = petRepository;
|
|
this.gameItemsRepository = gameItemsRepository;
|
|
this.gameItemService = gameItemService;
|
|
}
|
|
|
|
public Inventory GetInventory(string petId, string userId)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
if (pet == null)
|
|
throw new Exception("Pet not found");
|
|
|
|
return petInventoryRepository.GetPetInventory(petId);
|
|
}
|
|
|
|
public Inventory CreateInventory(string petId)
|
|
{
|
|
var inventory = new Inventory
|
|
{
|
|
PetId = petId,
|
|
Capacity = 20,
|
|
Items = new List<int>()
|
|
};
|
|
|
|
petInventoryRepository.SavePetInventory(inventory);
|
|
return inventory;
|
|
}
|
|
|
|
public Pet UseItem(string petId, string userId, int itemId)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
if (pet == null)
|
|
throw new Exception("Pet not found");
|
|
|
|
if (!pet.Inventory.Items.Any(i => i == itemId))
|
|
throw new Exception("Item not found in inventory");
|
|
|
|
var gameItem = gameItemsRepository.GetById(itemId);
|
|
|
|
gameItemService.ApplyItemEffect(pet, gameItem);
|
|
|
|
pet.Inventory.Items.Remove(itemId);
|
|
|
|
return petRepository.UpdatePet(pet);
|
|
}
|
|
|
|
public Pet EquipItem(string petId, string userId, int itemId)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
if (pet == null)
|
|
throw new Exception("Pet not found");
|
|
|
|
if (!pet.Inventory.Items.Any(i => i == itemId))
|
|
throw new Exception("Item not found in inventory");
|
|
|
|
var gameItem = gameItemsRepository.GetById(itemId);
|
|
|
|
if (gameItem.Type != ItemType.Equipment)
|
|
throw new Exception("Item is not equipment");
|
|
|
|
// If there's already an item equipped in that slot, unequip it first
|
|
if (pet.EquippedItems.ContainsKey(gameItem.EquipTarget))
|
|
{
|
|
UnequipItem(petId, userId, gameItem.EquipTarget);
|
|
}
|
|
|
|
// Apply equipment effects
|
|
gameItemService.ApplyItemEffect(pet, gameItem);
|
|
|
|
// Mark item as equipped
|
|
pet.EquippedItems[gameItem.EquipTarget] = itemId;
|
|
|
|
// Remove from inventory
|
|
pet.Inventory.Items.Remove(itemId);
|
|
|
|
petInventoryRepository.UpdateEquippedItems(petId, pet.EquippedItems);
|
|
|
|
return petRepository.UpdatePet(pet);
|
|
}
|
|
|
|
public Pet UnequipItem(string petId, string userId, ItemEquipTarget equipTarget)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
if (pet == null)
|
|
throw new Exception("Pet not found");
|
|
|
|
if (!pet.EquippedItems.ContainsKey(equipTarget))
|
|
throw new Exception("No item equipped in that slot");
|
|
|
|
var equippedItemId = pet.EquippedItems[equipTarget];
|
|
var equippedItem = gameItemsRepository.GetById(equippedItemId);
|
|
|
|
if (equippedItem != null)
|
|
{
|
|
// Remove equipment effects
|
|
gameItemService.RemoveItemEffect(pet, equippedItem);
|
|
|
|
// Add item back to inventory
|
|
pet.Inventory.Items.Add(equippedItemId);
|
|
}
|
|
|
|
pet.EquippedItems.Remove(equipTarget);
|
|
|
|
return petRepository.UpdatePet(pet);
|
|
}
|
|
|
|
public Pet DropItem(string petId, string userId, int itemId)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
|
|
if (!pet.Inventory.Items.Any(i => i == itemId))
|
|
throw new Exception("Item not found in inventory");
|
|
|
|
var gameItem = gameItemsRepository.GetById(itemId);
|
|
|
|
pet.Inventory.Items.Remove(itemId);
|
|
|
|
return petRepository.UpdatePet(pet);
|
|
}
|
|
|
|
public Pet AddItemToPet(string petId, string userId, int itemId, int quantity)
|
|
{
|
|
var pet = petRepository.GetPetById(petId, userId);
|
|
var gameItem = gameItemsRepository.GetById(itemId);
|
|
|
|
if (gameItem == null)
|
|
throw new Exception("Item not found");
|
|
|
|
for (int i = 0; i < quantity; i++)
|
|
{
|
|
pet.Inventory.Items.Add(itemId);
|
|
}
|
|
|
|
return petRepository.UpdatePet(pet);
|
|
}
|
|
}
|
|
}
|