using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class Slot : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler,IPointerDownHandler{
public GameObject itemObejct;
public void AddItem(ItemBase item)
{
if (transform.childCount == 0)
{
GameObject go = Instantiate(itemObejct) as GameObject;
go.transform.SetParent(this.transform,false);
go.GetComponent<Item>().SetIcon(item);
}
else
{
transform.GetChild(0).GetComponent<Item>().AddAmount();
}
}
public int GetThisItemID()
{
return transform.GetChild(0).GetComponent<Item>().itemBase.ID;
}
public bool isFull()
{
Item item = transform.GetChild(0).GetComponent<Item>();
if (item.Amount >= item.itemBase.maxStack)
{
return true;
}
return false;
}
public void OnPointerEnter(PointerEventData eventData)
{
if (transform.childCount > 0)
{
string text = transform.GetChild(0).GetComponent<Item>().itemBase.GetToolTipText();
InventoryManager.Instance.ShowTooltip(text);
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (transform.childCount > 0)
{
InventoryManager.Instance.HideTooltip();
}
}
public virtual void OnPointerDown(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Right&&transform.childCount>0&&InventoryManager.Instance.IsPickedItem==false)
{
Item currentItem = transform.GetChild(0).GetComponent<Item>();
if (currentItem.itemBase is Equipment || currentItem.itemBase is Weapon)
{
ItemBase itemInfo = currentItem.itemBase;
//Destroy(currentItem.gameObject);
DestroyImmediate(currentItem.gameObject);
InventoryManager.Instance.HideTooltip();
CharacterPanel.Instance.PutUp(itemInfo);
}
}
if (eventData.button != PointerEventData.InputButton.Left) return;
if (InventoryManager.Instance.IsPickedItem == false) //(一)取格子里面物品
{
if (transform.childCount > 0) //来从格子里面取物品。2种情况:⑴取一半,⑵取全部
{
Item currentItem = transform.GetChild(0).GetComponent<Item>();
if (Input.GetKey(KeyCode.LeftControl)) //只取一半
{
int num = (currentItem.Amount + 1) / 2;
int leftNum = currentItem.Amount - num;
InventoryManager.Instance.PickUpItem(currentItem, num);
if (leftNum <= 0)
{
Destroy(currentItem.gameObject);
}
else
{
currentItem.SetAmount(leftNum);
}
}
else //取全部
{
InventoryManager.Instance.PickUpItem(currentItem,currentItem.Amount);
Destroy(currentItem.gameObject);
}
}
}
else //(二)放下鼠标上的物体
{
if (transform.childCount > 0)
{
Item currentItem = transform.GetChild(0).GetComponent<Item>();
if (currentItem.itemBase.ID == InventoryManager.Instance.PickItem.itemBase.ID) // ID一样同类物品,才可以放。否则交互物品
{
if (currentItem.Amount >= currentItem.itemBase.maxStack) return;
//两种放法,按ctrl和不按ctrl
//第一种
if (Input.GetKey(KeyCode.LeftControl))
{
currentItem.AddAmount();
InventoryManager.Instance.RemoveAmount();
}
else //第二种
{
int leftAmount = currentItem.itemBase.maxStack - currentItem.Amount;
if (leftAmount >= InventoryManager.Instance.PickItem.Amount) //可以完全放下
{
currentItem.AddAmount(InventoryManager.Instance.PickItem.Amount);
InventoryManager.Instance.RemoveAll();
}
else
{
currentItem.AddAmount(leftAmount);
InventoryManager.Instance.RemoveAmount(leftAmount);
}
}
}
else //ID不一样,交互物品
{
ItemBase itemBase = currentItem.itemBase;
int Amount = currentItem.Amount;
currentItem.SetIcon(InventoryManager.Instance.PickItem.itemBase, InventoryManager.Instance.PickItem.Amount);
InventoryManager.Instance.PickItem.SetIcon(itemBase, Amount);
}
}
else //空格子,直接放下
{
if (Input.GetKey(KeyCode.LeftControl))
{
AddItem(InventoryManager.Instance.PickItem.itemBase);
InventoryManager.Instance.RemoveAmount();
}
else
{
AddItem(InventoryManager.Instance.PickItem.itemBase);
Item currentItem = transform.GetChild(0).GetComponent<Item>();
currentItem.SetAmount(InventoryManager.Instance.PickItem.Amount);
InventoryManager.Instance.RemoveAll();
}
}
}
}
}
UGUI--背包系统之三--------Slot
最新推荐文章于 2023-07-26 15:02:13 发布