Pedro Gomes 2e12515870 Multiple fix and updates
- Fix parentscript missing from npc's
- Reworked save/load data
- Character data, player coins, character inventory and equipped items now properly saved and loaded
2024-05-18 01:38:28 +01:00

116 lines
3.0 KiB
C#

using Photon.Pun;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Kryz.CharacterStats.Examples
{
public class Inventory : MonoBehaviour
{
[SerializeField] List<Item> items;
[SerializeField] Transform itemsParent;
[SerializeField] ItemSlot[] itemSlots;
[SerializeField] GameEventListener onJoinedRoom;
public UnityEvent_Item OnItemRightClickedEvent = new UnityEvent_Item();
InventoryData inventoryData = new InventoryData();
private void Awake()
{
for (int i = 0; i < itemSlots.Length; i++)
{
itemSlots[i].OnRightClickEvent.AddListener((X) => OnItemRightClickedEvent.Invoke(X));
}
onJoinedRoom.Response.AddListener(LoadInventory);
}
private void Start()
{
RefreshUI(false);
}
private void OnValidate()
{
if (itemsParent != null)
{
itemSlots = itemsParent.GetComponentsInChildren<ItemSlot>();
RefreshUI(false);
}
}
private void RefreshUI(bool shouldSave)
{
int i = 0;
for (; i < items.Count && i < itemSlots.Length; i++)
{
itemSlots[i].Item = items[i];
inventoryData.inventoryItems[i] = ItemIndexer.Instance.Items.IndexOf(items[i]);
}
for (; i < itemSlots.Length; i++)
{
itemSlots[i].Item = null;
inventoryData.inventoryItems[i] = -1;
}
if (!Application.isPlaying) return;
if (!PhotonNetwork.IsConnected) return;
if (!PhotonNetwork.InRoom) return;
if (!shouldSave) return;
PlayerDataHandler.Instance.SaveCharacterInventoryData(PhotonNetwork.NickName, inventoryData);
}
public bool AddItem(Item item)
{
if (IsFull())
return false;
items.Add(item);
RefreshUI(true);
return true;
}
public bool RemoveItem(Item item)
{
if (items.Remove(item))
{
RefreshUI(true);
return true;
}
return false;
}
public bool IsFull()
{
return items.Count >= itemSlots.Length;
}
public void LoadInventory()
{
inventoryData = PlayerDataHandler.Instance.LoadCharacterInventoryData(PhotonNetwork.NickName);
if (inventoryData != null)
{
Debug.Log("Success Loading Inventory");
for (int i = 0; i < inventoryData.inventoryItems.Length; i++)
{
if (inventoryData.inventoryItems[i] < 0) continue;
items.Add(ItemIndexer.Instance.Items[inventoryData.inventoryItems[i]]);
}
RefreshUI(false);
}
else
inventoryData = new InventoryData();
}
}
}