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