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 DraggablePanelController _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 EquippableItem _item; public EquippableItem 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 ItemSlot() { } public ItemSlot(int number, EquippableItem item = null) { Number = number; Item = item; }*/ /* public ItemSlot(ItemSlot slot) { Number = slot.Number; Item = slot.Item; slotItemNumberText = slot.slotItemNumberText; itemImage = slot.itemImage; }*/ public void SetupSlot(int _number, EquippableItem _item, WarehousePanelController _PanelController) { this._PanelController = _PanelController; Number = _number; if(_item) { SetItem(_item); } } public void SetItem(EquippableItem _item) // dont change slot numer after assign new item, numbers are bind during object init { Item = _item; ChangeEnableImageView(true); countStackableItems +=1; UpdateItemNumberHolder(); } public void ResetSlot() { Item = null; ChangeEnableImageView(false); countStackableItems = 0; 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; } #region 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); } #endregion }