2022-05-29 21:54:28 +02:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
using TMPro;
|
|
|
|
using UnityEngine.UI;
|
|
|
|
using UnityEngine.EventSystems;
|
|
|
|
using System; // for Action type
|
|
|
|
|
2022-06-05 01:57:57 +02:00
|
|
|
public class ItemSlot : MonoBehaviour, ISlot, IBeginDragHandler, IEndDragHandler, IDragHandler, IDropHandler
|
2022-05-29 21:54:28 +02:00
|
|
|
{
|
|
|
|
[Header("UI Stuff to change")]
|
|
|
|
[SerializeField] private TextMeshProUGUI slotItemNumberText;
|
|
|
|
[SerializeField] private Image itemImage;
|
|
|
|
|
2022-06-05 01:57:57 +02:00
|
|
|
public BasePanelController _PanelController;
|
2022-05-29 21:54:28 +02:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2022-06-05 01:57:57 +02:00
|
|
|
public event Action<ItemSlot> OnBeginDragEvent;
|
|
|
|
public event Action<ItemSlot> OnEndDragEvent;
|
|
|
|
public event Action<ItemSlot> OnDragEvent;
|
|
|
|
public event Action<ItemSlot> OnDropEvent;
|
2022-05-29 21:54:28 +02:00
|
|
|
|
2022-06-05 01:57:57 +02:00
|
|
|
public void SetupSlot(int _number, Item _item, BasePanelController _PanelController)
|
2022-05-29 21:54:28 +02:00
|
|
|
{
|
2022-06-05 01:57:57 +02:00
|
|
|
this._PanelController = _PanelController;
|
2022-05-29 21:54:28 +02:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|