UGUI--背包系统之三--------Slot

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();
                }
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值