using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using RPGCreationKit; using RPGCreationKit.Player; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using TMPro; namespace RPGCreationKit { /// /// Class that manages the UI for the Inventory /// public class InventoryUI : MonoBehaviour { #region Singleton public static InventoryUI instance; private void Awake() { if (instance == null) instance = this; else { Debug.LogError("Anomaly detected with the Singleton Pattern of 'InventoryUI', are you using multple InventoryUIs?"); Destroy(this); } } #endregion public Inventory inventory; public Equipment playerEquipment; public ItemsInListPoolManager itemsPoolManager; public InventoryTabs selectedTab; public CharacterTabs selectedCharacterTab; [Header("UI Elements")] public GameObject UI; public Transform scrollView; public TextMeshProUGUI CatLabel; public DropItemsPanel dropItemsPanel; public Text currentWeightText; public Text maxWeightText; public Text ArmorRatingText; public Text GoldsText; [HideInInspector] public bool isOpen = false; [SerializeField] private Transform inventoryItemsContent; public bool dropKeyBeingHeld; public void INPUT_DropKeyKeyboardOnly(InputAction.CallbackContext value) { if (value.started) dropKeyBeingHeld = true; else if (value.canceled) dropKeyBeingHeld = false; } // Use this for initialization void Start() { /// Grab the PlayerInventory if (Inventory.PlayerInventory) inventory = Inventory.PlayerInventory; else Debug.LogError("Could not retrieve the Player Inventory from the Singleton pattern, are you missing 'Inventory' component on the Player GameObject?"); playerEquipment = Equipment.PlayerEquipment; } // Update is called once per frame void Update() { if (RckPlayer.instance.input.currentActionMap.name == "Player" || RckPlayer.instance.input.currentActionMap.name == "InventoryUI") { if (RckPlayer.instance.input.currentActionMap.FindAction("OpenCloseInventory").triggered && !QuestManagerUI.instance.isUIopened && !RckPlayer.instance.isInConversation && !TradeSystemUI.instance.isOpen && !RckPlayer.instance.isInteracting && !RckPlayer.instance.isReadingBook && !RckPlayer.instance.isLooting && !TutorialAlertMessage.instance.messageOpened && !RckPlayer.instance.isPickingLock) { OpenClose(); } } } public void OpenClose() { if (RckPlayer.instance.isReadingBook || RckPlayer.instance.isPickingLock) { return; } RckPlayer.instance.EnableDisableControls(UI.activeInHierarchy); if (!UI.activeInHierarchy) { // Open isOpen = true; InventoryUI.instance.itemsPoolManager.PopulateAll(); UpdateStatsUI(); ShowTabItems(); PlayerInInventory.instance.ShowHideCharacter(true); RckPlayer.instance.input.SwitchCurrentActionMap("InventoryUI"); } else { // Close dropItemsPanel.CancelButton(); isOpen = false; InventoryUI.instance.itemsPoolManager.ResetPools(); PlayerInInventory.instance.ShowHideCharacter(false); RckPlayer.instance.input.SwitchCurrentActionMap("Player"); } UI.SetActive(!UI.activeInHierarchy); } public void ChangeTab(InventoryTabs tab) { selectedTab = tab; /// Show Tab ShowTabItems(); } public void ChangeCharacterTab(int tab) { selectedCharacterTab = (CharacterTabs)tab; } public void ShowTabItems() { switch(selectedTab) { case InventoryTabs.All: itemsPoolManager.ShowAll(); CatLabel.text = "Everything"; break; case InventoryTabs.Armors: itemsPoolManager.ArmorsTab(); CatLabel.text = "Armor"; break; case InventoryTabs.Keys: itemsPoolManager.KeysTab(); CatLabel.text = "Keys"; break; case InventoryTabs.MiscItems: itemsPoolManager.MiscTab(); CatLabel.text = "Misc"; break; case InventoryTabs.Weapons: itemsPoolManager.WeaponsTab(); CatLabel.text = "Weapons"; break; case InventoryTabs.Ammos: itemsPoolManager.AmmoTab(); CatLabel.text = "Ammo"; break; case InventoryTabs.Books: itemsPoolManager.BookTab(); CatLabel.text = "Books"; break; case InventoryTabs.Consumables: itemsPoolManager.ConsumableTab(); CatLabel.text = "Consumables"; break; } SelectFirstButton(); } public void SelectFirstButton() { if (!RckInput.isUsingGamepad) return; StartCoroutine(SelectFirstButtonC()); } public GameObject grabbed; public void MoveSafe(MoveDirection direction) { AxisEventData data = new AxisEventData(EventSystem.current) { moveDir = direction, selectedObject = EventSystem.current.currentSelectedGameObject }; ExecuteEvents.Execute(data.selectedObject, data, ExecuteEvents.moveHandler); grabbed = EventSystem.current.currentSelectedGameObject; // Revert if (data.moveDir == MoveDirection.Up) data.moveDir = MoveDirection.Down; else if (data.moveDir == MoveDirection.Down) data.moveDir = MoveDirection.Up; data.selectedObject = EventSystem.current.currentSelectedGameObject; ExecuteEvents.Execute(data.selectedObject, data, ExecuteEvents.moveHandler); StartCoroutine(SelectNextButtonC(grabbed)); } public void SelectNextButton(bool calledFromDropPanel = false) { if (!RckInput.isUsingGamepad) return; if (UINavigationHelper.CanNavigateDown()) MoveSafe(MoveDirection.Down); else if (UINavigationHelper.CanNavigateUp()) MoveSafe(MoveDirection.Up); else StartCoroutine(SelectFirstButtonC()); } private IEnumerator SelectFirstButtonC() { yield return new WaitForEndOfFrame(); EventSystem.current.SetSelectedGameObject(null); var a = inventoryItemsContent.GetComponentInChildren