evershade/Assets/Data/ScriptableObjects/PlayerData.cs

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);
}
}