253 lines
8.2 KiB
C#
253 lines
8.2 KiB
C#
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using TMPro;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using UnityEngine.EventSystems;
|
|||
|
|
using UnityEngine.UI;
|
|||
|
|
using DG.Tweening;
|
|||
|
|
using EpicToonFX;
|
|||
|
|
|
|||
|
|
public class InventoryItemEvents : Selectable, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler,
|
|||
|
|
IPointerExitHandler, IDragHandler, IBeginDragHandler
|
|||
|
|
{
|
|||
|
|
private int slotId;
|
|||
|
|
private Vector3 originalPosition;
|
|||
|
|
private Image thisImage;
|
|||
|
|
|
|||
|
|
[SerializeField] private Image backgroundImage;
|
|||
|
|
private TextMeshProUGUI inspectText;
|
|||
|
|
|
|||
|
|
private GameObject bankVault;
|
|||
|
|
private WeaponStatsManager statsManager;
|
|||
|
|
|
|||
|
|
protected override void Awake()
|
|||
|
|
{
|
|||
|
|
//Selectable runs in edit mode, so we need to find objects only at runtime.
|
|||
|
|
base.Awake();
|
|||
|
|
if (Application.isPlaying)
|
|||
|
|
{
|
|||
|
|
inspectText = GameObject.Find("Inventory_inspect").GetComponent<TextMeshProUGUI>();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
this.enabled = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private bool ForgeOpen() => UIManager.Instance.ForgeController.gameObject.activeSelf;
|
|||
|
|
private bool ExchangeOpen() => UIManager.Instance.WeaponExchangeController.gameObject.activeSelf;
|
|||
|
|
|
|||
|
|
private bool InventoryOpen() => UIManager.Instance.Inventory.gameObject.activeSelf;
|
|||
|
|
private bool BankOpen() => UIManager.Instance.BankVaultCanvas.activeInHierarchy;
|
|||
|
|
|
|||
|
|
protected override void Start()
|
|||
|
|
{
|
|||
|
|
base.Start();
|
|||
|
|
originalPosition = gameObject.transform.position;
|
|||
|
|
slotId = int.Parse(gameObject.name.Substring(15));
|
|||
|
|
thisImage = GetComponent<Image>();
|
|||
|
|
statsManager = UIManager.Instance.WeaponStatsManager;
|
|||
|
|
bankVault = UIManager.Instance.BankVaultCanvas;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnSelect(BaseEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnSelect(eventData);
|
|||
|
|
if (Player.Instance.GetInputHandler().UsingGamePad)
|
|||
|
|
{
|
|||
|
|
EnterSlot();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnDeselect(BaseEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnDeselect(eventData);
|
|||
|
|
if (Player.Instance.GetInputHandler().UsingGamePad)
|
|||
|
|
{
|
|||
|
|
OnExit();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnPointerEnter(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnPointerEnter(eventData);
|
|||
|
|
EnterSlot();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void EnterSlot()
|
|||
|
|
{
|
|||
|
|
//Debug.Log(this.gameObject.name + " Was entered.");
|
|||
|
|
int itemID = InventoryManager.Instance.inventoryItems[slotId];
|
|||
|
|
string itemName = ItemDef.GetInstance().getItemName(itemID);
|
|||
|
|
string itemLevel = ItemDef.GetInstance().getItemLevel(itemID);
|
|||
|
|
string itemDescription = InventoryManager.Instance.itemDescriptions[slotId];
|
|||
|
|
if (itemName == "")
|
|||
|
|
{
|
|||
|
|
if (!(
|
|||
|
|
ForgeOpen()||
|
|||
|
|
InventoryOpen() ||
|
|||
|
|
ExchangeOpen()
|
|||
|
|
))
|
|||
|
|
return;
|
|||
|
|
statsManager.GetCanvasGroup().alpha = 0;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
inspectText.SetText($"{itemLevel.ToUpper()} {itemName.ToUpper()}: {itemDescription.ToUpper()}");
|
|||
|
|
transform.DOScale(Vector3.one * 1.15f, 0.1f).SetEase(Ease.InSine).SetUpdate(true);
|
|||
|
|
|
|||
|
|
if (!(
|
|||
|
|
ForgeOpen()||
|
|||
|
|
InventoryOpen()||
|
|||
|
|
ExchangeOpen()
|
|||
|
|
))
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
int weaponData = InventoryManager.Instance.inventoryItems[slotId];
|
|||
|
|
statsManager.SetWeaponStatData(GetOpenSettingType(), weaponData);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private OpenWeaponStatType GetOpenSettingType()
|
|||
|
|
{
|
|||
|
|
if (ForgeOpen())
|
|||
|
|
return OpenWeaponStatType.Forge;
|
|||
|
|
if (InventoryOpen())
|
|||
|
|
return OpenWeaponStatType.Inventory;
|
|||
|
|
if (ExchangeOpen())
|
|||
|
|
return OpenWeaponStatType.Exchange;
|
|||
|
|
return OpenWeaponStatType.Base;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnPointerExit(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnPointerExit(eventData);
|
|||
|
|
OnExit();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnExit()
|
|||
|
|
{
|
|||
|
|
//Debug.Log(this.gameObject.name + " Was exited.");
|
|||
|
|
|
|||
|
|
inspectText.text = "";
|
|||
|
|
if (EventSystem.current.currentSelectedGameObject != null)
|
|||
|
|
EventSystem.current.SetSelectedGameObject(null); //ERROR HERE
|
|||
|
|
|
|||
|
|
statsManager.GetCanvasGroup().DOFade(0, 0.15f);
|
|||
|
|
transform.DOScale(Vector3.one, 0.1f).SetEase(Ease.OutSine).SetUpdate(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnPointerDown(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnPointerDown(eventData);
|
|||
|
|
OnClick();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnClick()
|
|||
|
|
{
|
|||
|
|
if (InventoryManager.Instance.inventoryItems[slotId] == -1)
|
|||
|
|
return;
|
|||
|
|
//Debug.Log(this.gameObject.name + " Was Clicked.");
|
|||
|
|
//thisImage.color = new Color(0.8f, 0.8f, 0.8f);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnBeginDrag(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
//transform.parent = InventoryPanel.transform;
|
|||
|
|
//transform.SetAsLastSibling();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public override void OnPointerUp(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
base.OnPointerUp(eventData);
|
|||
|
|
OnClickUp(Input.mousePosition);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnClickUp(Vector3 mousePosition)
|
|||
|
|
{
|
|||
|
|
if (InventoryManager.Instance.inventoryItems[slotId] == -1)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
thisImage.color = Color.white;
|
|||
|
|
|
|||
|
|
if (Vector3.Distance(transform.position, originalPosition) > 3)
|
|||
|
|
{
|
|||
|
|
//Create a list of Raycast Results
|
|||
|
|
List<RaycastResult> results = new List<RaycastResult>();
|
|||
|
|
PointerEventData ped = new PointerEventData(EventSystem.current);
|
|||
|
|
ped.position = mousePosition;
|
|||
|
|
transform.GetComponentInParent<GraphicRaycaster>().Raycast(ped, results);
|
|||
|
|
|
|||
|
|
if (!(bankVault.activeInHierarchy || ForgeOpen() || ExchangeOpen()) && results.Count <= 1)
|
|||
|
|
{
|
|||
|
|
//Debug.Log("dropping " + InventoryManager.Instance.inventoryItems[slotId]);
|
|||
|
|
if (InventoryManager.Instance.inventoryItems[slotId] != -1)
|
|||
|
|
PacketManager.sendDropItem(InventoryManager.Instance.inventoryItems[slotId], slotId);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//For every result returned, output the name of the GameObject on the Canvas hit by the Ray
|
|||
|
|
foreach (RaycastResult result in results)
|
|||
|
|
{
|
|||
|
|
if (result.gameObject.name.Contains("slot"))
|
|||
|
|
{
|
|||
|
|
int to = int.Parse(result.gameObject.name.Substring(4));
|
|||
|
|
if (to != slotId)
|
|||
|
|
{
|
|||
|
|
PacketManager.sendMoveItem(slotId, to, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
//only allow dropping if not in menus
|
|||
|
|
if (!(BankOpen() || ForgeOpen() || ExchangeOpen()))
|
|||
|
|
{
|
|||
|
|
if (Input.GetKey(KeyCode.LeftShift))
|
|||
|
|
{
|
|||
|
|
PacketManager.sendDropItem(InventoryManager.Instance.inventoryItems[slotId], slotId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (ExchangeOpen())
|
|||
|
|
{
|
|||
|
|
int itemID = InventoryManager.Instance.inventoryItems[slotId];
|
|||
|
|
string itemName = ItemDef.GetInstance().getItemName(itemID);
|
|||
|
|
string itemLevel = ItemDef.GetInstance().getItemLevel(itemID);
|
|||
|
|
WeaponExchangeController exchangeController = UIManager.Instance.WeaponExchangeController;
|
|||
|
|
exchangeController.SetSellButtonText(itemLevel, itemName, itemID);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!ForgeOpen() && !ExchangeOpen())
|
|||
|
|
{
|
|||
|
|
PacketManager.sendClickItem(InventoryManager.Instance.inventoryItems[slotId], slotId);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
gameObject.transform.position = originalPosition;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void GamepadDropEvent()
|
|||
|
|
{
|
|||
|
|
if (!(bankVault.activeInHierarchy || ForgeOpen() || ExchangeOpen()) &&
|
|||
|
|
InventoryManager.Instance.inventoryItems[slotId] != -1)
|
|||
|
|
PacketManager.sendDropItem(InventoryManager.Instance.inventoryItems[slotId], slotId);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnDrag(PointerEventData eventData)
|
|||
|
|
{
|
|||
|
|
if (InventoryManager.Instance.inventoryItems[slotId] == -1 || ForgeOpen() || ExchangeOpen() ||
|
|||
|
|
bankVault.activeInHierarchy)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
transform.position += (Vector3)eventData.delta;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void OnClickDrag()
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
}
|