ClientServer/Client/Assets/Scripts/UI/BankVaultItemEvents.cs

156 lines
4.6 KiB
C#
Raw Normal View History

2025-09-06 17:17:39 +04:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using TMPro;
using DG.Tweening;
public class BankVaultItemEvents : Selectable, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler, IDragHandler, IBeginDragHandler
{
private int slotId;
private Vector3 originalPosition;
private Image thisImage;
private TextMeshProUGUI inspectText;
protected override void Start()
{
base.Start();
originalPosition = gameObject.transform.position;
slotId = int.Parse(gameObject.name.Substring(11));
thisImage = GetComponent<Image>();
if (Application.isPlaying)
{
inspectText = GameObject.Find("Inventory_inspect").GetComponent<TextMeshProUGUI>();
}
}
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()
{
string name = ItemDef.GetInstance().getItemName(InventoryManager.Instance.bankVaultItems[slotId]);
string itemLevel = ItemDef.GetInstance().getItemLevel(InventoryManager.Instance.bankVaultItems[slotId]);
if (name == "") { return; }
inspectText.SetText($"{itemLevel.ToUpper()} {name.ToUpper()}");
transform.DOScale(Vector3.one * 1.15f, 0.1f).SetEase(Ease.InSine).SetUpdate(true);
}
public override void OnPointerExit(PointerEventData eventData)
{
base.OnPointerExit(eventData);
OnExit();
}
public void OnExit()
{
inspectText.text = "";
if (EventSystem.current.currentSelectedGameObject != null)
EventSystem.current.SetSelectedGameObject(null);
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.bankVaultItems[slotId] == -1) { return; }
}
public void OnBeginDrag(PointerEventData eventData)
{
}
public override void OnPointerUp(PointerEventData eventData)
{
base.OnPointerUp(eventData);
OnClickUp(Input.mousePosition);
}
public void OnClickUp(Vector3 mousePosition)
{
if (InventoryManager.Instance.bankVaultItems[slotId] == -1) { return; }
thisImage.color = Color.white;
if (Vector3.Distance(transform.position, originalPosition) > 3)
{
List<RaycastResult> results = new List<RaycastResult>();
PointerEventData ped = new PointerEventData(EventSystem.current);
ped.position = mousePosition;
transform.root.GetComponent<GraphicRaycaster>().Raycast(ped, results);
if (results.Count <= 1)
{
//Do nothing for now.We don't want to drag items over inventory slots to withdraw them for now.
//if (InventoryManager.Instance.bankVaultItems[slotId] != -1)
// {
// PacketManager.sendWithdrawBankItem(slotId);
// }
}
else
{
foreach (RaycastResult result in results)
{
if (result.gameObject.name.Contains("bg_slot_"))
{
int to = int.Parse(result.gameObject.name.Substring(8));
if (to != slotId)
{
//Debug.Log("Sent Packet!");
PacketManager.sendMoveItem(slotId, to, 1);
}
}
}
}
}
else
{
if (InventoryManager.Instance.bankVaultItems[slotId] != -1)
{
PacketManager.sendWithdrawBankOrForgeItem(slotId, 0);
}
}
gameObject.transform.position = originalPosition;
}
public void OnDrag(PointerEventData eventData)
{
//if (InventoryManager.Instance.bankVaultItems[slotId] == -1) { return; }
//transform.position += (Vector3)eventData.delta;
}
}