96 lines
2.5 KiB
C#
96 lines
2.5 KiB
C#
![]() |
using System;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
|
|||
|
public class DraggedSlotController : MonoBehaviour
|
|||
|
{
|
|||
|
public static DraggedSlotController Instance { get; private set; }
|
|||
|
|
|||
|
[Header("Dragged Image")]
|
|||
|
[SerializeField] protected Image DraggedSlotImageTemplate;
|
|||
|
[SerializeField] protected Image DraggedSlotImage;
|
|||
|
|
|||
|
[Space]
|
|||
|
[Header("Dragged Slot")]
|
|||
|
[SerializeField] protected ISlot _draggedSlot;
|
|||
|
public ISlot DraggedSlot // in Drag & Drop functionality for Warehouse set of panels I will temporary delegate dragged item to outside static object instance in order to remember it during dragging object from one slot to anothe one
|
|||
|
{
|
|||
|
get { return _draggedSlot; }
|
|||
|
set
|
|||
|
{
|
|||
|
_draggedSlot = value;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Awake()
|
|||
|
{
|
|||
|
if (Instance == null)
|
|||
|
{
|
|||
|
Instance = this;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Destroy(gameObject);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool IsDragged()
|
|||
|
{
|
|||
|
return DraggedSlot != null;
|
|||
|
}
|
|||
|
|
|||
|
public void CreateDraggedSlot(ItemSlot itemSlot, Vector3 beginingPosition)
|
|||
|
{
|
|||
|
DraggedSlot = itemSlot;
|
|||
|
|
|||
|
MakeDraggableItem(beginingPosition);
|
|||
|
}
|
|||
|
private void MakeDraggableItem( Vector3 beginingPosition)
|
|||
|
{
|
|||
|
if (DraggedSlotImage)
|
|||
|
{
|
|||
|
DraggedSlotImage.enabled = true;
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
GameObject globalGUI = GameObject.FindGameObjectWithTag("GUI");
|
|||
|
|
|||
|
if (globalGUI)
|
|||
|
{
|
|||
|
DraggedSlotImage = MonoBehaviour.Instantiate(DraggedSlotImageTemplate, DraggedSlotImageTemplate.transform.position, Quaternion.identity, globalGUI.transform);
|
|||
|
DraggedSlotImage.transform.localPosition = beginingPosition;
|
|||
|
DraggedSlotImage.sprite = DraggedSlot.Item.Image;
|
|||
|
DraggedSlotImage.transform.position = Input.mousePosition;
|
|||
|
DraggedSlotImage.enabled = true;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Debug.Log("Can't find global GUI object!!!");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void UpdatePosition(Vector3 newSlotPosition)
|
|||
|
{
|
|||
|
if(DraggedSlotImage != null)
|
|||
|
DraggedSlotImage.transform.position = newSlotPosition;
|
|||
|
}
|
|||
|
|
|||
|
public bool RemoveDraggedSlot()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
DestroyImmediate(DraggedSlotImage.gameObject, true);
|
|||
|
DraggedSlotImage = null;
|
|||
|
|
|||
|
DraggedSlot = null;
|
|||
|
}catch(Exception e)
|
|||
|
{
|
|||
|
Debug.LogError(e.Message);
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|