166 lines
5.2 KiB
C#
166 lines
5.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
// Example: PlayerData.cs
|
|
[CreateAssetMenu(fileName = "PlayerData", menuName = "Game Data/Player")]
|
|
public class PlayerData : ScriptableObject
|
|
{
|
|
// public Display<int, Slot>; 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<int, Slot> equipmentSlots = new();
|
|
|
|
// player inventory slots data
|
|
public Dictionary<int, Slot> inventorySlots = new();
|
|
|
|
public Dictionary<int, Slot> 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>();
|
|
slot.slotId = i;
|
|
slot.item = null;
|
|
AddInventorySlot(slot);
|
|
}
|
|
|
|
for (var i = 0; i < toolbarSize; i++)
|
|
{
|
|
var slot = CreateInstance<Slot>();
|
|
slot.slotId = i;
|
|
slot.item = null;
|
|
AddToolbarSlot(slot);
|
|
}
|
|
|
|
// create player slots for equipment
|
|
var equipmentSlot = CreateInstance<Slot>();
|
|
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<Slot>();
|
|
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<Slot>();
|
|
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<Slot>();
|
|
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<Slot>();
|
|
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<Slot>();
|
|
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<int, Slot>();
|
|
inventorySlots = new Dictionary<int, Slot>();
|
|
toolbarSlots = new Dictionary<int, Slot>();
|
|
}
|
|
|
|
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.itemName);
|
|
}
|
|
} |