protected virtual int?GetIndex(IInventoryCellView targetCell, IInventoryCellData effectCellData, CellCorner cellCorner)
        {
            var index = GetIndex(targetCell);

            // offset index
            int width  = effectCellData.Width;
            int height = effectCellData.Height;

            if (width % 2 == 0)
            {
                if ((cellCorner & CellCorner.Left) != CellCorner.None)
                {
                    index--;
                }
            }

            if (height % 2 == 0)
            {
                if ((cellCorner & CellCorner.Top) != CellCorner.None)
                {
                    index -= playerInventoryviewData.width;
                }
            }

            index -= (width - 1) / 2;
            index -= (height - 1) / 2 * playerInventoryviewData.width;
            return(index);
        }
        protected virtual void UpdateCondition(IInventoryCellView targetCell, IInventoryCellView effectCell)
        {
            var index = GetIndex(targetCell, effectCell.CellData, cellCorner);

            if ((index.HasValue && viewData.CheckInsert(index.Value, effectCell.CellData)))
            {
                condition.color = positiveColor;
            }
            else
            {
                // /if(targetCell.CellData!=null)
                condition.color = negativeColor;
                // // check free space in case
                // if (targetCell.CellData != null &&
                //     targetCell.CellData is VariableInventorySystem.IStandardCaseCellData caseData &&
                //     caseData.CaseData.GetInsertableId(effectCell.CellData).HasValue)
                // {
                //     condition.color = positiveColor;
                // }
                // else
                // {
                //     condition.color = negativeColor;
                // }
            }
        }
 public override void OnDrag(IInventoryCellView targetCell, IInventoryCellView effectCell, PointerEventData pointerEventData)
 {
     if (targetCell == null)
     {
         return;
     }
 }
        public override bool OnDrop(IInventoryCellView targetCell, IInventoryCellView effectCell)
        {
            if (!itemViews.Any(item => item == targetCell))
            {
                return(false);
            }

            var cellView = targetCell as PlayerEquipmentCellView;

            // if (playerEquipmentViewData.CheckInsert((int)cellView.slot, effectCell.CellData))
            // {
            //     Debug.LogError(GetType().ToString() + "Equip");
            //     targetCell.Apply(new PlayerEquipmentCellData(cellView.slot, (cellView.CellData as PlayerEquipmentCellData).item as Equipment));
            //     playerEquipmentViewData.InsertInventoryItem((int)cellView.slot, cellView.CellData);
            // }

            //如果拿起的物品是装备 并且装备类型和格子类型匹配的话 就装备上
            if (effectCell.CellData is PlayerInventoryCellData inventoryCellData && inventoryCellData.item is Equipment equipment)
            {
                if (CheckCanEquip(cellView.slot, equipment.equipmentType))
                {
                    Equip(cellView, equipment);
                    return(true);
                }
            }

            return(false);
        }
 public override void OnPrePick(IInventoryCellView targetCell)
 {
     if (targetCell?.CellData == null)
     {
         return;
     }
 }
 public override void OnCellEnter(IInventoryCellView targetCell, IInventoryCellView effectCell)
 {
     conditionTransform.gameObject.SetActive(effectCell?.CellData != null);
     if (targetCell is PlayerInventoryCellView)
     {
         (targetCell as PlayerInventoryCellView).SetHighLight(true);
     }
 }
 public override void OnCellClick(IInventoryCellView targetCell)
 {
     // if (!itemViews.Any(item => item == targetCell))
     // {
     //     return;
     // }
     // Debug.LogError(this.GetType().ToString() + "OnCellClick");
 }
 public override void OnPrePick(IInventoryCellView targetCell)
 {
     if (targetCell?.CellData == null)
     {
         return;
     }
     // conditionTransform.sizeDelta = new Vector2(targetCell.DefaultCellSize.x * targetCell.CellData.Width, targetCell.DefaultCellSize.y * targetCell.CellData.Height);
 }
        public override void OnDrag(IInventoryCellView targetCell, IInventoryCellView effectCell, PointerEventData pointerEventData)
        {
            if (targetCell == null)
            {
                return;
            }

            // auto scroll
            var pointerViewportPosition = GetLocalPosition(m_ScrollRect.viewport, pointerEventData.position, pointerEventData.enterEventCamera);

            if (pointerViewportPosition.y < m_ScrollRect.viewport.rect.min.y + holdScrollPadding)
            {
                var scrollValue = m_ScrollRect.verticalNormalizedPosition * m_ScrollRect.viewport.rect.height;
                scrollValue -= holdScrollRate;
                m_ScrollRect.verticalNormalizedPosition = Mathf.Clamp01(scrollValue / m_ScrollRect.viewport.rect.height);
            }

            if (pointerViewportPosition.y > m_ScrollRect.viewport.rect.max.y - holdScrollPadding)
            {
                var scrollValue = m_ScrollRect.verticalNormalizedPosition * m_ScrollRect.viewport.rect.height;
                scrollValue += holdScrollRate;
                m_ScrollRect.verticalNormalizedPosition = Mathf.Clamp01(scrollValue / m_ScrollRect.viewport.rect.height);
            }

            // depends on anchor
            var pointerLocalPosition = GetLocalPosition(targetCell.RectTransform, pointerEventData.position, pointerEventData.enterEventCamera);
            var anchor           = new Vector2(targetCell.DefaultCellSize.x * 0.5f, -targetCell.DefaultCellSize.y * 0.5f);
            var anchoredPosition = pointerLocalPosition + anchor;

            conditionOffset = new Vector3(
                Mathf.Floor(anchoredPosition.x / targetCell.DefaultCellSize.x) * targetCell.DefaultCellSize.x,
                Mathf.Ceil(anchoredPosition.y / targetCell.DefaultCellSize.y) * targetCell.DefaultCellSize.y);

            // cell corner
            var prevCorner = cellCorner;

            cellCorner = GetCorner((new Vector2(anchoredPosition.x % targetCell.DefaultCellSize.x, anchoredPosition.y % targetCell.DefaultCellSize.y) - anchor) * 0.5f);


            // shift the position only even number size
            int width  = effectCell.CellData.Width;
            int height = effectCell.CellData.Height;

            //Debug.LogError(cellCorner);
            if (cellCorner == CellCorner.None)
            {
                return;
            }

            var evenNumberOffset = GetEvenNumberOffset(width, height, targetCell.DefaultCellSize.x * 0.5f, targetCell.DefaultCellSize.y * 0.5f);

            conditionTransform.position = targetCell.RectTransform.position + ((conditionOffset + evenNumberOffset) * targetCell.RectTransform.lossyScale.x);
            // update condition
            if (prevCorner != cellCorner)
            {
                UpdateCondition(targetCell, effectCell);
            }
        }
        public void Init()
        {
            //TODO 从资源加载
            var go = Instantiate(CellPrefab.gameObject, EffectCellParent);

            effectCell = go.GetComponent <AbstractInventoryCellView>();
            effectCell.RectTransform.gameObject.SetActive(false);
            effectCell.SetSelectable(false);
        }
        protected virtual void OnCellExit(IInventoryCellView cell)
        {
            foreach (var inventoryView in InventoryViews)
            {
                inventoryView.OnCellExit(targetCell);
            }

            targetCell = null;
        }
        protected virtual void OnCellEnter(IInventoryCellView cell)
        {
            targetCell = cell;

            foreach (var inventoryView in InventoryViews)
            {
                inventoryView.OnCellEnter(targetCell, effectCell);
            }
        }
        private void HandleSupplyItemOptionClick(IInventoryCellView cellView)
        {
            int?cellIndex = GetIndex(cellView);

            if (cellIndex.HasValue)
            {
                PlayerInventoryCellData cellData = cellView.CellData as PlayerInventoryCellData;
                ApplyCell(cellView, cellIndex.Value, null);
                Debug.LogError("HandleSupplyItemOptionClick");
            }
        }
 protected virtual void OnCellClick(IInventoryCellView cell)
 {
     if (cell.CellData == null)
     {
         return;
     }
     foreach (var inventoryViews in InventoryViews)
     {
         inventoryViews.OnCellClick(cell);
     }
 }
        /// <summary>
        /// 装备点击右键 直接穿上装备
        /// </summary>
        private void HandleEquipmentOptionClick(IInventoryCellView cellView)
        {
            int?cellIndex = GetIndex(cellView);

            if (cellIndex.HasValue)
            {
                var cellData = cellView.CellData;
                ApplyCell(cellView, cellIndex.Value, null);
                GFrame.EventSystem.S.Send(EventID.OnEquipInventroy, cellData);
            }
        }
        public override void OnCellExit(IInventoryCellView targetCell)
        {
            conditionTransform.gameObject.SetActive(false);
            condition.color = defaultColor;

            cellCorner = CellCorner.None;

            if (targetCell is PlayerInventoryCellView)
            {
                (targetCell as PlayerInventoryCellView).SetHighLight(false);
            }
        }
        protected virtual int?GetIndex(IInventoryCellView targetCell)
        {
            var index = (int?)null;

            for (var i = 0; i < itemViews.Length; i++)
            {
                if (itemViews[i] == targetCell)
                {
                    index = i;
                }
            }

            return(index);
        }
        public override void OnCellOptionClick(IInventoryCellView targetCell)
        {
            if (!itemViews.Any(item => item == targetCell))
            {
                return;
            }

            //  右键脱下装备
            if (targetCell.CellData is PlayerEquipmentCellData equipmentCellData)
            {
                if (equipmentCellData.item is Equipment)
                {
                    UnEquip(targetCell as PlayerEquipmentCellView);
                    // Equip(targetCell as PlayerEquipmentCellView, null);
                }
            }
        }
        public override void OnCellOptionClick(IInventoryCellView targetCell)
        {
            if (!itemViews.Any(item => item == targetCell))
            {
                return;
            }

            if (targetCell.CellData is PlayerInventoryCellData inventoryCellData)
            {
                if (inventoryCellData.item is Equipment)
                {
                    HandleEquipmentOptionClick(targetCell);
                }
                if (inventoryCellData.item is SupplyItem)
                {
                    HandleSupplyItemOptionClick(targetCell);
                }
            }
        }
        public override bool OnPick(IInventoryCellView targetCell)
        {
            if (targetCell?.CellData == null)
            {
                return(false);
            }

            var id = viewData.GetId(targetCell.CellData);

            if (id.HasValue)
            {
                originalId       = id;
                originalCellData = targetCell.CellData;

                ApplyCell(itemViews[id.Value], id.Value, null);
                return(true);
            }


            return(false);
        }
Exemple #21
0
 public abstract void OnCellOptionClick(IInventoryCellView targetCell);
 public override void OnCellExit(IInventoryCellView targetCell)
 {
 }
 public override void OnCellEnter(IInventoryCellView targetCell, IInventoryCellView effectCell)
 {
 }
 public override void OnCellClick(IInventoryCellView targetCell)
 {
     //Debug.LogError(this.GetType().ToString() + "OnCellClick");
 }
Exemple #25
0
 public abstract void OnCellExit(IInventoryCellView targetCell);
Exemple #26
0
 protected void ApplyCell(IInventoryCellView cellView, int cellIndex, IInventoryCellData cellData)
 {
     cellView.Apply(cellData);
     viewData.InsertInventoryItem(cellIndex, cellData);
 }
 public override void OnPicked(IInventoryCellView effectCell)
 {
 }
 public override void OnPicked(IInventoryCellView effectCell)
 {
     conditionTransform.sizeDelta = new Vector2(effectCell.DefaultCellSize.x * effectCell.CellData.Width, effectCell.DefaultCellSize.y * effectCell.CellData.Height);
 }
        public override bool OnDrop(IInventoryCellView targetCell, IInventoryCellView effectCell)
        {
            if (!itemViews.Any(item => item == targetCell))
            {
                return(false);
            }
            // Debug.LogError(GetType().ToString() + "OnDrop" + (effectCell.CellData.GetType()));
            // check target;
            var index = GetIndex(targetCell, effectCell.CellData, cellCorner);

            if (!index.HasValue || index.Value < 0)
            {
                return(false);
            }

            if (!viewData.CheckInsert(index.Value, effectCell.CellData))
            {
                if (targetCell.CellData == null)
                {
                    return(false);
                }

                if (targetCell.CellData is PlayerInventoryCellData) //如果目标也是道具栏位
                {
                    int?targetID = viewData.GetId(targetCell.CellData);
                    // Debug.LogError(index.Value + "---" + targetID.Value);
                    if (targetCell.CellData.size == effectCell.CellData.size)//大小一致 交换 并且完全盖住的时候
                    {
                        if (originalId.HasValue && originalCellData != null)
                        {
                            itemViews[targetID.Value].Apply(targetCell.CellData);
                            itemViews[originalId.Value].Apply(originalCellData);
                            viewData.InsertInventoryItem(originalId.Value, originalCellData);
                            playerInventoryviewData.ExchangeInventoryItem(targetID.Value, originalId.Value);
                            Debug.LogError("Exchange");
                            //ReApply();
                            originalId       = null;
                            originalCellData = null;
                            return(true);
                        }
                    }
                }

                //     // check free space in case
                //     if (targetCell.CellData != null && targetCell.CellData is VariableInventorySystem.IStandardCaseCellData caseData)
                //     {
                //         var id = caseData.CaseData.GetInsertableId(effectCell.CellData);
                //         if (id.HasValue)
                //         {
                //             caseData.CaseData.InsertInventoryItem(id.Value, effectCell.CellData);
                //             originalId = null;
                //             originalCellData = null;
                //             return true;
                //         }
                //     }

                return(false);
            }

            var newCellData = effectCell.CellData;

            if (effectCell.CellData is PlayerEquipmentCellData equipmentCellData)
            {
                newCellData = new PlayerInventoryCellData(equipmentCellData.item);
                Debug.LogError(newCellData.GetType());
            }

            // place
            ApplyCell(itemViews[index.Value], index.Value, newCellData);

            originalId       = null;
            originalCellData = null;
            return(true);
        }
Exemple #30
0
 public abstract void OnCellEnter(IInventoryCellView targetCell, IInventoryCellView effectCell);