Add Inventory system with Inventory, InventorySlot, and StatModifierItem classes; update character attributes to include level and experience

This commit is contained in:
2025-07-11 23:57:57 +02:00
parent c50b91eacb
commit 8f3a913b7e
19 changed files with 344 additions and 388 deletions

View File

@@ -0,0 +1,86 @@
using System;
using System.Linq;
using Inventory;
using KBCore.Refs;
using UnityEngine;
using Weapons;
namespace Systems
{
public class InventoryManager : MonoBehaviour
{
[SerializeField, Self] private Inventory.Inventory inventory;
[SerializeField, Self] private CharacterModifierManager characterModifierManager;
[SerializeField, Self] private CharacterWeaponsManager characterWeaponsManager;
private void Start()
{
if (inventory == null)
{
Debug.LogError("Inventory is not assigned in InventoryManager.");
return;
}
if (characterModifierManager == null)
{
Debug.LogError("CharacterModifierManager is not assigned in InventoryManager.");
return;
}
if (characterWeaponsManager == null)
{
Debug.LogError("CharacterWeaponsManager is not assigned in InventoryManager.");
return;
}
EquipAllItems();
EquipAllWeapons();
}
public void EquipItem(StatModifierItem item)
{
inventory.AddItem(item);
foreach (var cure in item.cures) characterModifierManager.EquipItem(cure);
foreach (var curse in item.curses) characterModifierManager.EquipItem(curse);
}
public void UnequipItem(StatModifierItem item)
{
if (inventory.ItemSlots.All(slot => slot.item != item)) return;
inventory.RemoveItem(item);
foreach (var cure in item.cures) characterModifierManager.UnequipItem(cure);
foreach (var curse in item.curses) characterModifierManager.UnequipItem(curse);
}
public void EquipWeapon(WeaponItem weaponItem)
{
inventory.AddWeapon(weaponItem);
characterWeaponsManager.EquipWeapon(weaponItem.prefab);
}
public void UnequipWeapon(WeaponItem weaponItem)
{
if (inventory.WeaponSlots.All(slot => slot.item != weaponItem)) return;
inventory.RemoveWeapon(weaponItem);
weaponItem.prefab.TryGetComponent(out Weapon weapon);
characterWeaponsManager.UnequipWeapon(weapon);
}
private void EquipAllWeapons()
{
foreach (var slot in inventory.WeaponSlots)
{
EquipWeapon(slot.item as WeaponItem);
}
}
private void EquipAllItems()
{
foreach (var slot in inventory.ItemSlots)
{
EquipItem(slot.item as StatModifierItem);
}
}
}
}