using System.Collections.Generic; using UnityEngine; // Example: PlayerData.cs [CreateAssetMenu(fileName = "PlayerData", menuName = "Game Data/Player")] public class PlayerData : ScriptableObject { // public Display; boxSlots; public string playerName; public int level; public int health; public int maxHealth; public int inventorySize; public int toolbarSize; public int experience; public int gold; public int attack; public int defense; public int speed; public int luck; public int magic; public int sanity; public int maxSanity; public string currentMap; public Vector3 currentPosition; public Dictionary equipmentSlots = new(); // player inventory slots data public Dictionary inventorySlots = new(); public Dictionary toolbarSlots = new(); // run on creation public PlayerData() { Initialize(); } public void OnEnable() { // create all the slots for (var i = 0; i < inventorySize; i++) { var slot = CreateInstance(); slot.slotId = i; slot.item = null; AddInventorySlot(slot); } for (var i = 0; i < toolbarSize; i++) { var slot = CreateInstance(); slot.slotId = i; slot.item = null; AddToolbarSlot(slot); } // create player slots for equipment var equipmentSlot = CreateInstance(); equipmentSlot.slotId = 0; equipmentSlot.item = null; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Helmet); equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); equipmentSlot = CreateInstance(); equipmentSlot.slotId = 1; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Armor); equipmentSlot.item = null; equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); // feet equipmentSlot = CreateInstance(); equipmentSlot.slotId = 2; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Boots); equipmentSlot.item = null; equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); equipmentSlot = CreateInstance(); equipmentSlot.slotId = 3; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Accessory); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Ring); equipmentSlot.item = null; equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); equipmentSlot = CreateInstance(); equipmentSlot.slotId = 4; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Boots); equipmentSlot.item = null; equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); equipmentSlot = CreateInstance(); equipmentSlot.slotId = 5; equipmentSlot.slotType = Slot.SlotType.Equipment; equipmentSlot.allowedItemTypes.Add(GameItem.ItemType.Equipment); equipmentSlot.allowedEquipmentSlots.Add(EquipmentItem.Slot.Ring); equipmentSlot.item = null; equipmentSlots.Add(equipmentSlot.slotId, equipmentSlot); } public void Initialize() { playerName = "Player"; level = 1; health = 100; maxHealth = 100; inventorySize = 20; toolbarSize = 10; experience = 0; gold = 0; attack = 10; defense = 10; speed = 10; luck = 10; magic = 10; sanity = 100; maxSanity = 100; equipmentSlots = new Dictionary(); inventorySlots = new Dictionary(); toolbarSlots = new Dictionary(); } public void AddEquipmentSlot(Slot slot) { equipmentSlots[slot.slotId] = slot; } public void AddInventorySlot(Slot slot) { // add slot to inventory inventorySlots[slot.slotId] = slot; } public void AddToolbarSlot(Slot slot) { toolbarSlots.Add(slot.slotId, slot); } public void AddItemToInventory(GameItem item) { foreach (var slot in inventorySlots.Values) if (slot.item == null) { slot.item = item; return; } Debug.LogWarning("No empty slots available to add item: " + item.name); } }