public override void ItemBackToRootSlot() { Container from = overSeer.from.container; Item2DModel model = overSeer.rootModel; Item item = model.referenceItem; List <InventorySlot> slots = from.slotsList; for (int i = 0; i < slots.Count; i++) { slots[i].AssignItem(item); } RectTransform rect = slots[0].GetComponent <RectTransform>(); model.transform.SetParent(from.grid.dragParent); model.transform.position = rect.TransformPoint(rect.rect.center); grid.RecalculateCellPosition(model.transform as RectTransform, from.size); overSeer.isDrag = false; from.AddCurrentItem(item); overSeer.isDrag = false; (overSeer.from.container as StorageContainer).ReloadHightLight(); }
public virtual void DeleteModel(Item item) { Item2DModel model = FindModelByItem(item); RemoveModelItem(model); Help.HelpFunctions.TransformSeer.DestroyObject(model.gameObject); }
public override void ItemBackToRootSlot() { Container from = overSeer.from.container; Item2DModel model = overSeer.rootModel; Item item = model.referenceItem; from.AddItemOnPosition(item, overSeer.rootSlot); from.AddCurrentItem(item); overSeer.isDrag = false; (overSeer.from.container as StorageContainer).ReloadHightLight(); }
protected Item2DModel FindModelByItem(Item item) { Item2DModel model = null; for (int i = 0; i < currentModels.Count; i++) { if (currentModels[i].reference == item.GetId()) { model = currentModels[i]; break; } } return(model); }
protected int AddItemXY(Item item, Vector2 size, bool enableModel, bool interactModel) { for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { InventorySlot slot = slotsArray[x, y]; List <InventorySlot> neighbors = TakeSlotsForLanding(slot, size); if (neighbors.Count > 0) { for (int i = 0; i < neighbors.Count; i++) //добавление { neighbors[i].HighlightColor = view.baseColor; neighbors[i].AssignItem(item); if (i == 0) { Item2DModel newModel = grid.CreateModelByItem(item); AddModelItem(newModel); if (enableModel) { newModel.ShowModel(); } else { newModel.HideModel(); } newModel.Interactable(interactModel); overSeer.buffer = newModel.transform as RectTransform; AddItemOnPosition(item, neighbors[i], false); grid.RecalculateCellProportion(overSeer.buffer, size); } } neighbors.Clear(); AddCurrentItem(item); return(1); } } } return(0); }
protected override void OnDrop(PointerEventData eventData) { if (!overSeer.isDrag) { return; } Inventory whereNow = overSeer.whereNow; Inventory from = overSeer.from; Item2DModel model = overSeer.rootModel; Item item = model.referenceItem; if (!whereNow.IsEmpty) //если занято, нельзя дропнуть { from.container.ItemBackToRootSlot(); return; } List <StorageTypes> storageTypes = whereNow.storageTypes; if (storageTypes.Count == 0) { ItemPlaceOnSlotSolid(from.container, whereNow.container, item, model); return; } else { for (int i = 0; i < storageTypes.Count; i++) { if (item.CompareType(storageTypes[i].ToString())) //смогли найти место для дропа { ItemPlaceOnSlotSolid(from.container, whereNow.container, item, model); inventory.onItemDrop?.Invoke(item, inventory); return; } } from.container.ItemBackToRootSlot(); return; } }
/// <summary> /// Добавляет айтем на все слоты в контейнер. /// </summary> /// <param name="from"></param> /// <param name="to"></param> /// <param name="item"></param> /// <param name="model"></param> /// <param name="recalculatePos"></param> private void ItemPlaceOnSlotSolid(Container from, Container to, Item item, Item2DModel model, bool recalculatePos = true) { List <InventorySlot> slots = to.slotsList; for (int i = 0; i < slots.Count; i++) { slots[i].AssignItem(item); } to.AddCurrentItem(item); from.RemoveModelItem(model); /*if (recalculatePos) { * grid.ResetCell(model.transform as RectTransform, slots[0].position); * grid.RecalculateCellProportion(model.transform as RectTransform, size); * * grid.RecalculateCellPosition(model.transform as RectTransform, size); * }*/ grid.ResetCell(model.transform as RectTransform, slots[0].position); grid.RecalculateCellProportion(model.transform as RectTransform, to.size); RectTransform rect = slots[0].GetComponent <RectTransform>(); model.transform.SetParent(to.grid.dragParent); model.transform.position = rect.TransformPoint(rect.rect.center); grid.RecalculateCellPosition(model.transform as RectTransform, to.size); to.AddModelItem(model); overSeer.isDrag = false; ReloadHightLight(); }
/// <summary> /// Создаёт объект для просмотра предмета, его картинку. /// </summary> /// <param name="item"></param> /// <returns></returns> public Item2DModel CreateModelByItem(Item item) { GameObject obj = Instantiate(modelPrefab); obj.name = item.name; Item2DModel model = obj.GetComponent <Item2DModel>(); model.Icon.sprite = item.itemIcon; model.Icon.preserveAspect = true; model.Hightlight.gameObject.SetActive(false); model.referenceItem = item; RectTransform rect = obj.transform as RectTransform; rect.SetParent(dragParent); rect.sizeDelta = cellSize; rect.localScale = Vector3.one; rect.rotation = Quaternion.Euler(item.IconOrientation.x, item.IconOrientation.y, item.IconOrientation.z); return(model); }
/// <summary> /// Дропает айтем на определёную позицию в определённом контейнере. /// </summary> /// <param name="from">откуда взяли</param> /// <param name="to">куда положили</param> /// <param name="item"></param> /// <param name="model"></param> protected virtual void ItemPlaceOnSlot(Container from, Container to, Item item, Item2DModel model) { grid.ResetCell(overSeer.buffer, overSeer.lastSlot.position); grid.RecalculateCellProportion(overSeer.buffer, item.GetSize()); to.AddItemOnPosition(item, overSeer.lastSlot); to.AddCurrentItem(item); overSeer.from.container.RemoveModelItem(model); model.transform.SetParent(to.grid.dragParent); to.AddModelItem(model); overSeer.isDrag = false; }
public void RemoveModelItem(Item2DModel model) { currentModels.Remove(model); }
public void AddModelItem(Item2DModel model) { currentModels.Add(model); }
protected override void ItemPlaceOnSlot(Container from, Container to, Item item, Item2DModel model) { base.ItemPlaceOnSlot(from, to, item, model); ReloadHightLight(); }