using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
///
/// Drag & Drop предметов между слотами.
/// Один общий DragIconCanvas на все слоты — создаётся при первом старте.
///
public class InventoryDragDrop : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler
{
public Slot slot;
public int slotIndex;
[SerializeField] private float dragIconScale = 1.2f;
[SerializeField] private bool allowDropOutside = true;
[SerializeField] private float dropThreshold = 100f;
// ── Общий на все слоты drag-icon ─────────────────────────────────────────
private static GameObject _sharedCanvas;
private static RectTransform _sharedIcon;
private static Image _sharedImage;
// ── Per-instance поля ─────────────────────────────────────────────────────
private CanvasGroup _canvasGroup;
private bool _isDragging;
private RectTransform _inventoryPanelRect;
// ── Unity lifecycle ───────────────────────────────────────────────────────
void Start()
{
_canvasGroup = GetComponent();
// Создаём общий DragCanvas один раз для всех слотов
if (_sharedCanvas == null)
CreateSharedDragCanvas();
// Ищем rect инвентарной панели для определения «вне панели»
if (InventoryManager.Instance?.inventoryPanel != null)
_inventoryPanelRect = InventoryManager.Instance.inventoryPanel
.GetComponent();
}
private static void CreateSharedDragCanvas()
{
_sharedCanvas = new GameObject("DragIconCanvas");
DontDestroyOnLoad(_sharedCanvas);
var c = _sharedCanvas.AddComponent