Files
beyond/Assets/Scripts/Powers/TrinketUIController.cs

91 lines
2.8 KiB
C#

using UnityEngine;
using UnityEngine.Events;
using Invector.vItemManager;
using Invector.vCharacterController;
using System.Collections.Generic;
using Sirenix.OdinInspector;
namespace Beyond
{
public class TrinketUIController : MonoBehaviour
{
[Header("Main References")]
public Canvas mainCanvas;
public bEquipArea trinketEquipArea;
public bItemWindow trinketItemWindow;
[Header("Settings")]
public KeyCode openKey = KeyCode.T;
// CHANGED: Use a list to catch all potential item types (Gemstones, Trinkets, etc)
public List<bItemType> trinketTypes = new List<bItemType>() { bItemType.Gemstones, bItemType.Trinkets };
[Header("Events")]
public UnityEvent onOpenWindow;
public UnityEvent onCloseWindow;
private bool isOpen = false;
void Start()
{
if (!mainCanvas) mainCanvas = GetComponent<Canvas>();
if (mainCanvas) mainCanvas.enabled = false;
if (trinketItemWindow) trinketItemWindow.gameObject.SetActive(false);
}
void Update()
{
if (Input.GetKeyDown(openKey)) Toggle();
}
[Button]
public void Toggle()
{
isOpen = !isOpen;
if (isOpen) Open(); else Close();
}
[Button]
public void Open()
{
var player = Player.Instance;
if (!player) return;
var itemManager = player.ItemManager;
var inventory = itemManager.inventory;
if (!inventory) return;
// Setup Components
trinketEquipArea.inventory = inventory;
trinketEquipArea.itemManager = itemManager;
trinketEquipArea.Init(); // This calls Start(), which calls SetInventory() on slots
// Setup Window
trinketItemWindow.inventory = inventory;
trinketItemWindow.gameObject.SetActive(true);
if (mainCanvas) mainCanvas.enabled = true;
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
Time.timeScale = 0;
trinketEquipArea.SetNewItemWindow(trinketItemWindow);
// Pass the list of types instead of just one
trinketEquipArea.SetEquipmentwindowWithFilter(trinketTypes);
onOpenWindow.Invoke();
}
[Button]
public void Close()
{
if (mainCanvas) mainCanvas.enabled = false;
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
Time.timeScale = 1;
onCloseWindow.Invoke();
}
}
}