using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class InventoryItem : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler { // --- Is this item trashable --- // public bool isTrashable; // --- Item Info UI --- // private GameObject itemInfoUI; private Text itemInfoUI_itemName; private Text itemInfoUI_itemDescription; private Text itemInfoUI_itemFunctionality; public string thisName, thisDescription, thisFunctionality; // --- Consumption --- // private GameObject itemPendingConsumption; public bool isConsumable; public float healthEffect; public float caloriesEffect; public float hydrationEffect; public bool isEquitable; private GameObject itemPendingEquipping; public bool isInQuickSlot; internal bool isSelected; public bool isUsable; public GameObject itemPendingToBeUsed; private void Start() { itemInfoUI = InventorySystem.Instance.ItemInfoUI; itemInfoUI_itemName = itemInfoUI.transform.Find("itemName").GetComponent(); itemInfoUI_itemDescription = itemInfoUI.transform.Find("itemDescription").GetComponent(); itemInfoUI_itemFunctionality = itemInfoUI.transform.Find("itemFunctionality").GetComponent(); } private void Update() { if (isSelected) { gameObject.GetComponent().enabled = false; } else { gameObject.GetComponent().enabled = true; } } // Triggered when the mouse enters into the area of the item that has this script. public void OnPointerEnter(PointerEventData eventData) { itemInfoUI.SetActive(true); itemInfoUI_itemName.text = thisName; itemInfoUI_itemDescription.text = thisDescription; itemInfoUI_itemFunctionality.text = thisFunctionality; } // Triggered when the mouse exits the area of the item that has this script. public void OnPointerExit(PointerEventData eventData) { itemInfoUI.SetActive(false); } // Triggered when the mouse is clicked over the item that has this script. public void OnPointerDown(PointerEventData eventData) { //Right Mouse Button Click on if (eventData.button == PointerEventData.InputButton.Right) { if (isConsumable) { // Setting this specific gameobject to be the item we want to destroy later itemPendingConsumption = gameObject; consumingFunction(healthEffect, caloriesEffect, hydrationEffect); } if (isEquitable && isInQuickSlot == false && !EquipSystem.Instance.CheckIfFull()) { EquipSystem.Instance.AddToQuickSlots(gameObject); isInQuickSlot = true; } if (isUsable) { ConstructionManager.Instance.itemToBeDestroyed = gameObject; UseItem(); } } } // Triggered when the mouse button is released over the item that has this script. public void OnPointerUp(PointerEventData eventData) { if (eventData.button == PointerEventData.InputButton.Right) { if (isConsumable && itemPendingConsumption == gameObject) { DestroyImmediate(gameObject); InventorySystem.Instance.ReCalculateList(); CraftingSystem.Instance.RefreshNeededItems(); } // if (isUsable && itemPendingToBeUsed == gameObject){ // DestroyImmediate(gameObject); // InventorySystem.Instance.ReCalculateList(); // CraftingSystem.Instance.RefreshNeededItems(); // } } } private void consumingFunction(float healthEffect, float caloriesEffect, float hydrationEffect) { itemInfoUI.SetActive(false); healthEffectCalculation(healthEffect); caloriesEffectCalculation(caloriesEffect); hydrationEffectCalculation(hydrationEffect); } private static void healthEffectCalculation(float healthEffect) { // --- Health --- // float healthBeforeConsumption = PlayerState.Instance.currentHealth; float maxHealth = PlayerState.Instance.maxHealth; if (healthEffect != 0) { if ((healthBeforeConsumption + healthEffect) > maxHealth) { PlayerState.Instance.setHealth(maxHealth); } else { PlayerState.Instance.setHealth(healthBeforeConsumption + healthEffect); } } } private static void caloriesEffectCalculation(float caloriesEffect) { // --- Calories --- // float caloriesBeforeConsumption = PlayerState.Instance.currentCalories; float maxCalories = PlayerState.Instance.maxCalories; if (caloriesEffect != 0) { if ((caloriesBeforeConsumption + caloriesEffect) > maxCalories) { PlayerState.Instance.setCalories(maxCalories); } else { PlayerState.Instance.setCalories(caloriesBeforeConsumption + caloriesEffect); } } } private static void hydrationEffectCalculation(float hydrationEffect) { // --- Hydration --- // float hydrationBeforeConsumption = PlayerState.Instance.currentHydration; float maxHydration = PlayerState.Instance.maxHydration; if (hydrationEffect != 0) { if ((hydrationBeforeConsumption + hydrationEffect) > maxHydration) { PlayerState.Instance.setHydration(maxHydration); } else { PlayerState.Instance.setHydration(hydrationBeforeConsumption + hydrationEffect); } } } private void UseItem() { itemInfoUI.SetActive(false); InventorySystem.Instance.isOpen = false; InventorySystem.Instance.inventoryScreenUI.SetActive(false); CraftingSystem.Instance.isOpen = false; CraftingSystem.Instance.craftingScreenUI.SetActive(false); CraftingSystem.Instance.toolsScreenUI.SetActive(false); CraftingSystem.Instance.survivalScreenUI.SetActive(false); CraftingSystem.Instance.refineScreenUI.SetActive(false); CraftingSystem.Instance.constructionScreenUI.SetActive(false); Cursor.lockState = CursorLockMode.Locked; Cursor.visible=false; SelectionManager.Instance.EnableSelection(); SelectionManager.Instance.enabled = true; switch (gameObject.name) { case "Foundation(Clone)": ConstructionManager.Instance.ActivateConstructionPlacement("FoundationModel"); break; case "Foundation": //Testing ConstructionManager.Instance.ActivateConstructionPlacement("FoundationModel"); break; } } }