133 lines
3.1 KiB
C#
133 lines
3.1 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class InventorySystem : MonoBehaviour
|
|
{
|
|
public static InventorySystem Instance;
|
|
|
|
[Header("UI Settings")]
|
|
public Image[] slotImages;
|
|
public Sprite defaultEmptyIcon;
|
|
public CanvasGroup uiCanvasGroup;
|
|
|
|
[Header("Settings")]
|
|
public float fadeTime = 3f;
|
|
|
|
private ItemData[] _items = new ItemData[5];
|
|
private float _timer;
|
|
private bool _isVisible;
|
|
public bool isInputActive = false;
|
|
|
|
private void Awake()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
uiCanvasGroup.alpha = 0;
|
|
UpdateUI();
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!isInputActive) return;
|
|
|
|
HandleInput();
|
|
HandleFade();
|
|
}
|
|
|
|
private void HandleInput()
|
|
{
|
|
if (Input.GetKeyDown(KeyCode.Alpha1)) ShowInventory();
|
|
if (Input.GetKeyDown(KeyCode.Alpha2)) ShowInventory();
|
|
if (Input.GetKeyDown(KeyCode.Alpha3)) ShowInventory();
|
|
if (Input.GetKeyDown(KeyCode.Alpha4)) ShowInventory();
|
|
if (Input.GetKeyDown(KeyCode.Alpha5)) ShowInventory();
|
|
}
|
|
|
|
private void HandleFade()
|
|
{
|
|
if (_timer > 0)
|
|
{
|
|
_timer -= Time.deltaTime;
|
|
uiCanvasGroup.alpha = Mathf.Lerp(uiCanvasGroup.alpha, 1, Time.deltaTime * 10);
|
|
}
|
|
else
|
|
{
|
|
uiCanvasGroup.alpha = Mathf.Lerp(uiCanvasGroup.alpha, 0, Time.deltaTime * 2);
|
|
}
|
|
}
|
|
|
|
public void ShowInventory()
|
|
{
|
|
_timer = fadeTime;
|
|
}
|
|
|
|
public bool AddItem(ItemData newItem)
|
|
{
|
|
if (HasItem(newItem))
|
|
{
|
|
Debug.Log("An item of this type is already in the inventory: " + newItem.itemName);
|
|
return false;
|
|
}
|
|
|
|
for (int i = 0; i < _items.Length; i++)
|
|
{
|
|
if (_items[i] == null)
|
|
{
|
|
_items[i] = newItem;
|
|
UpdateUI();
|
|
ShowInventory();
|
|
Debug.Log("Picked up: " + newItem.itemName);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
Debug.Log("Inventory is full!");
|
|
return false;
|
|
}
|
|
|
|
public void RemoveItem(ItemData itemToRemove)
|
|
{
|
|
for (int i = 0; i < _items.Length; i++)
|
|
{
|
|
if (_items[i] == itemToRemove)
|
|
{
|
|
_items[i] = null;
|
|
UpdateUI();
|
|
ShowInventory();
|
|
Debug.Log("Removed: " + itemToRemove.itemName);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateUI()
|
|
{
|
|
for (int i = 0; i < slotImages.Length; i++)
|
|
{
|
|
if (_items[i] != null)
|
|
{
|
|
slotImages[i].sprite = _items[i].icon;
|
|
slotImages[i].color = Color.white;
|
|
}
|
|
else
|
|
{
|
|
slotImages[i].color = Color.clear;
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool HasItem(ItemData itemToCheck)
|
|
{
|
|
foreach (var item in _items)
|
|
{
|
|
if (item != null && item == itemToCheck)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
} |