예제 #1
0
    /// <summary>
    /// 交换道具-容器
    /// </summary>
    /// <param name="viewItemContainer"></param>
    public bool ExchangeItemForContainer(UIViewItemContainer viewItemContainer)
    {
        UIViewItem tempViewItem = viewItemContainer.GetViewItem();

        if (tempViewItem == null)
        {
            //检测容器是否能放置当前物品
            bool canSetItem = viewItemContainer.CheckCanSetItem(itemsInfo.GetItemsType());
            //如果能放置
            if (canSetItem)
            {
                //如果容器里没有道具 则直接设置容器的道具为当前道具
                //首先清空原容器里的数据
                originalParent.ClearViewItem();
                //设置新的容器
                viewItemContainer.SetViewItem(this);
                AnimForPositionChange(timeForMove, null);
            }
            else
            {
                //如果没有设置成功(不能放置该类型),则返回原容器
                HandleForBackOriginalContainer();
            }
            return(true);
        }
        else
        {
            //如果容器里有道具 则返回原容器
            HandleForBackOriginalContainer();
            return(true);
        }
    }
예제 #2
0
    /// <summary>
    /// 在原位置复制一个道具 并且数量为该道具的最大
    /// </summary>
    protected void CopyItemInOriginal()
    {
        GameObject objOriginal = Instantiate(originalParent.gameObject, gameObject);

        objOriginal.name = "ViewItem";
        UIViewItem viewItem = objOriginal.GetComponent <UIViewItem>();

        objOriginal.transform.position = gameObject.transform.position;
        originalParent.SetViewItem(viewItem);
        //设置拿出的物体数量为该物体的最大数量
        itemNumber = itemsInfo.max_number;

        //刷新一下UI
        RefreshUI();
    }
예제 #3
0
    /// <summary>
    /// 道具和道具交换
    /// </summary>
    /// <param name="viewItem"></param>
    /// <returns></returns>
    protected bool ExchangeItemForItem(UIViewItem viewItem)
    {
        //如果目标是同一物品
        if (viewItem.itemsInfo.id == itemsInfo.id)
        {
            //如果目标是无限物品 则删除现有物品
            if (viewItem.itemNumber == int.MaxValue)
            {
                transform.SetParent(viewItem.transform.parent);
                transform.localScale = Vector3.one;
                AnimForPositionChange(timeForMove, () => { DestroyImmediate(gameObject); });
                return(true);
            }
            //如果目标不是无限物品,则先将目标叠加到最大,自己再返回原位置
            else
            {
                //目标数量叠加
                viewItem.itemNumber += itemNumber;
                if (viewItem.itemNumber > viewItem.itemsInfo.max_number)
                {
                    //如果目标数量超出最大了
                    itemNumber          = viewItem.itemNumber - viewItem.itemsInfo.max_number;
                    viewItem.itemNumber = viewItem.itemsInfo.max_number;
                }
                else
                {
                    //如果没有 则自己的数量为0
                    itemNumber = 0;
                }
                //刷新一下UI
                viewItem.RefreshUI();
                RefreshUI();

                if (itemNumber == 0)
                {
                    //如果自己没有数量了,则删除
                    DestroyImmediate(gameObject);
                    return(true);
                }
                else
                {
                    //如果自己还有数量,则返回原容器
                    HandleForBackOriginalContainer();
                    return(true);
                }
            }
        }
        //如果目标不是同一类物品
        else
        {
            //如果目标是无限物品 则回到原来位置
            if (viewItem.itemNumber == int.MaxValue)
            {
                HandleForBackOriginalContainer();
                return(true);
            }
            //如果是目标不是无限物品,则交换物品位置
            else
            {
                //检测容器是否能放置当前物品
                bool canSetItem = viewItem.originalParent.CheckCanSetItem(itemsInfo.GetItemsType());
                if (canSetItem)
                {
                    //交换位置
                    UIViewItemContainer dargContainer   = this.originalParent;
                    UIViewItemContainer targetContainer = viewItem.originalParent;
                    //交换父级
                    if (dargContainer.GetViewItem() != null && dargContainer.GetViewItem().itemNumber == int.MaxValue)
                    {
                        //如果原父级有东西 则把目标容器里的物品丢出来
                        viewItem.DropItem();
                    }
                    else
                    {
                        //如果原父级没有东西 则交换父级
                        dargContainer.SetViewItem(viewItem);
                        //设置位置
                        viewItem.rectTransform.anchoredPosition = Vector2.zero;
                        viewItem.transform.localScale           = Vector3.one;
                    }
                    targetContainer.SetViewItem(this);
                    //设置位置
                    transform.localScale = Vector3.one;
                    AnimForPositionChange(timeForMove, () => { });
                    return(true);
                }
                else
                {
                    //如果不能设置该物品(容器不能装该类型) 则返回
                    HandleForBackOriginalContainer();
                    return(true);
                }
            }
        }
    }