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); }
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"); }
public abstract void OnCellExit(IInventoryCellView targetCell);
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); }
public abstract void OnCellEnter(IInventoryCellView targetCell, IInventoryCellView effectCell);