Esempio n. 1
0
        /// <summary>
        /// 在物品详细信息页点击了装备按钮(装备)
        /// </summary>
        public void OnEquipButtonClick()
        {
            // 当前选中的物品为空时,直接返回
            if (currentSelectItem == null)
            {
                return;
            }

            Equipment equipment = currentSelectItem as Equipment;

            // 装备的类【武器,护甲,头盔等】
            int equipmentIndexInPanel = (int)equipment.equipmentType;

            // 获取物品在背包中的序号
            int oriItemIndexInBag = Player.mainPlayer.GetItemIndexInBag(currentSelectItem);

            // 创建一个空的属性变化对象
            PropertyChange propertyChangeFromUnload = new PropertyChange();

            // 如果额外装备槽已解锁,并且想要装上的装备是戒指,并且原有戒指槽已经有装备,则该戒指撞到额外装备槽上
            if (equipment.equipmentType == EquipmentType.Ring && BuyRecord.Instance.extraEquipmentSlotUnlocked && Player.mainPlayer.allEquipedEquipments[5].itemId >= 0 && Player.mainPlayer.allEquipedEquipments[6].itemId < 0)
            {
                equipmentIndexInPanel = 6;
            }

            // 如果已经有同类型的已装备的额物品,则卸下原装备
            if (Player.mainPlayer.allEquipedEquipments [equipmentIndexInPanel].itemId >= 0)
            {
                Equipment equipmentToUnload = Player.mainPlayer.allEquipedEquipments [equipmentIndexInPanel];
                // 卸下原装备的属性变化
                propertyChangeFromUnload = Player.mainPlayer.UnloadEquipment(equipmentToUnload, equipmentIndexInPanel);
                bagView.AddBagItem(equipmentToUnload);
            }

            // 装备物品产生的属性变化
            PropertyChange propertyChangeFromEquip = Player.mainPlayer.EquipEquipment(currentSelectItem as Equipment, equipmentIndexInPanel);

            // 合并两个属性变化获得最终的属性变化
            PropertyChange finalPropertyChange = PropertyChange.MergeTwoPropertyChange(propertyChangeFromUnload, propertyChangeFromEquip);

            // 更新装备面板
            bagView.SetUpEquipedEquipmentsPlane();

            // 更新玩家属性面板
            bagView.SetUpPlayerStatusPlane(finalPropertyChange);

            // 更新背包物品面板
            bagView.UpdateCurrentBagItemsPlane();

            // 更新操作按钮
            bagView.itemDetail.SetUpOperationButtons(false, true, false);

            // 如果玩家正在战斗过程中,则更新技能按钮状态【有可能更换装备后原来魔法不够,更换完成后魔法够用了】
            if (ExploreManager.Instance.battlePlayerCtr.isInFight)
            {
                ExploreManager.Instance.expUICtr.UpdateActiveSkillButtons();
            }
        }
        protected override void OnUserDrop(PointerEventData eventData)
        {
            // 获取拖拽中的物品
            Item itemInBag = GetDraggedItem(eventData);

            if (itemInBag == null || itemInBag.itemId < 0)
            {
                return;
            }

            bool canEquip = itemInBag.itemType == ItemType.Equipment;

//			if (itemInBag.itemType != ItemType.Equipment) {
//				canEquip = false;
//			} else {
//				Equipment eqp = itemInBag as Equipment;
//				canEquip = Player.mainPlayer.CheckCanEquiped (eqp.equipmentType);
//			}


            // 没有拖拽中的物品或者该装备栏没有解锁或者物品类型不是装备直接返回
            if (!canEquip)
            {
                SetDropResult(eventData, false);
                tintImage.enabled = false;
                return;
            }

            GameObject draggedObject = GetDraggedObject(eventData);

            // 准备装上的装备
            Equipment equipmentPrepareToLoad = itemInBag as Equipment;


            ItemDragControl dragControl = draggedObject.GetComponent <ItemDragControl>();

            if (dragControl == null)
            {
                return;
            }

            if (bagView != null && !(dragControl is SpecialOperationItemDragControl))
            {
                bagView.GetComponent <BagViewController>().currentSelectItem = equipmentPrepareToLoad;
            }

            int indexInPanel = (int)equipmentPrepareToLoad.equipmentType;

            // 如果额外装备槽已解锁,并且想要装上的装备是戒指,并且原有戒指槽已经有装备,则该戒指撞到额外装备槽上
            if (equipmentPrepareToLoad.equipmentType == EquipmentType.Ring && BuyRecord.Instance.extraEquipmentSlotUnlocked && Player.mainPlayer.allEquipedEquipments[5].itemId >= 0 && Player.mainPlayer.allEquipedEquipments[6].itemId < 0)
            {
                indexInPanel = 6;
            }

            // 准备换下的装备
            Equipment equipmentPrepareToUnload = Player.mainPlayer.allEquipedEquipments[indexInPanel];

            // 如果是从装备栏中拖拽出来的物品
            if (dragControl is EquipedItemDragControl)
            {
                SetDropResult(eventData, true);

                tintImage.enabled = false;
                return;
            }

            // 如果是从背包中拖拽出来的物品
            else if (dragControl is ItemInBagDragControl)
            {
                PropertyChange propertyChangeFromUnload = new PropertyChange();

                int oriItemIndexInBag = Player.mainPlayer.GetItemIndexInBag(equipmentPrepareToLoad);

                if (oriItemIndexInBag == -1)
                {
                    Debug.LogError("背包中没有找到该物品");
                }

                if (equipmentPrepareToUnload.itemId >= 0)
                {
                    // 该装备移入背包中
                    propertyChangeFromUnload = Player.mainPlayer.UnloadEquipment(equipmentPrepareToUnload, indexInPanel, oriItemIndexInBag);

                    bagView.AddBagItem(equipmentPrepareToUnload, oriItemIndexInBag, true);
                }

                // 背包中的装备移入已装备列表
                PropertyChange propertyChangeFromLoad = Player.mainPlayer.EquipEquipment(equipmentPrepareToLoad, indexInPanel);

                PropertyChange propertyChange = PropertyChange.MergeTwoPropertyChange(propertyChangeFromLoad, propertyChangeFromUnload);

                bagView.SetUpEquipedEquipmentsPlane();

                bagView.SetUpPlayerStatusPlane(propertyChange);

                // 对应格子中的装备数据更换
                allEquipedItemDragControls[indexInPanel].item = equipmentPrepareToLoad;

                Player.mainPlayer.ResetBattleAgentProperties(false);

                bagView.RemoveBagItemAt(oriItemIndexInBag + (equipmentPrepareToUnload.itemId >= 0 ? 1 : 0));

                SetDropResult(eventData, true);

                bagView.SetUpItemDetail(equipmentPrepareToLoad);

                tintImage.enabled = false;

                return;
            }

            //else if(dragControl is SpecialOperationItemDragControl){
            //	SpecialOperationCell specialOperationCell = dragControl.GetComponent<SpecialOperationCell>();
            //             specialOperationCell.ResetSpecialOperationCell();
            //             SetDropResult(eventData, true);
            //}

            tintImage.enabled = false;
        }