using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.UI; using UnityEngine.EventSystems; using System; // for Action type public class ItemSlot : MonoBehaviour, ISlot, IBeginDragHandler, IEndDragHandler, IDragHandler, IDropHandler { [Header("UI Stuff to change")] [SerializeField] private TextMeshProUGUI slotItemNumberText; [SerializeField] private Image itemImage; public BasePanelController _PanelController; private Color normalColor = Color.white; private Color disabledColor = new Color(1, 1, 1, 0); // transparency = 0 [Header("Slot variable")] [SerializeField] protected int _number; public int Number { get { return _number; } set { _number = value; } } [SerializeField] protected Item _item; public Item Item { get { return _item; } set { _item = value; if(_item == null) { itemImage.color = disabledColor; } else { itemImage.sprite = _item.Image; itemImage.color = normalColor; } } } public int countStackableItems = 0; public event Action OnBeginDragEvent; public event Action OnEndDragEvent; public event Action OnDragEvent; public event Action OnDropEvent; public void SetupSlot(int _number, Item _item, BasePanelController _PanelController) { this._PanelController = _PanelController; Number = _number; if(_item) { SetItem(_item); } } public void SetItem(Item _item) // dont change slot numer after assign new item, numbers are bind during object init { Item = _item; ChangeEnableImageView(true); countStackableItems +=1; UpdateItemNumberHolder(); } private void ChangeEnableImageView(bool _flag) { itemImage.color = _flag ? normalColor : disabledColor; //!slotImage.enabled; } private void ChangeNumberHeldView(bool _flag) { slotItemNumberText.enabled = _flag; } private void UpdateItemNumberHolder() { slotItemNumberText.text = "" + countStackableItems; } // Start is called before the first frame update void Start() { if(!Item) { ChangeEnableImageView(false); ChangeNumberHeldView(false); } } public virtual bool CanReceiveItem(Item item) { return true; } // Events methods public void OnBeginDrag(PointerEventData eventData) { if(OnBeginDragEvent != null) OnBeginDragEvent(this); } public void OnEndDrag(PointerEventData eventData) { if(OnEndDragEvent != null) OnEndDragEvent(this); } public void OnDrag(PointerEventData eventData) { if(OnDragEvent != null) OnDragEvent(this); } public void OnDrop(PointerEventData eventData) { if(OnDropEvent != null) OnDropEvent(this); } }