private void AddItemReculsive(IStackableItem currentStackableItem, int amount) { int maxAmount = currentStackableItem.GetMaxAmount(); if (maxAmount <= amount) { Item newItem = itemFactory.MakeItem(currentStackableItem.GetItemDatum(), amount); itemList[firstEmptyItemIndex] = newItem; IStackableItem newStackableItem = newItem as IStackableItem; currentStackableItem.DoublyLinkNextSameItem(newStackableItem); FindNextFirstEmptyItemIndex(); return; } else { Item newItem = itemFactory.MakeItem(currentStackableItem.GetItemDatum(), amount); itemList[firstEmptyItemIndex] = newItem; IStackableItem newStackableItem = newItem as IStackableItem; currentStackableItem.DoublyLinkNextSameItem(newStackableItem); FindNextFirstEmptyItemIndex(); AddItemReculsive(newStackableItem, amount - maxAmount); return; } }
public IStackableItem GetLastSameItem() { IStackableItem currentStackableItem = this; if (null != currentStackableItem.GetNextSameItem()) { currentStackableItem = currentStackableItem.GetNextSameItem(); } return(currentStackableItem); }
private void AddItem(IStackableItemDatum stackableItemDatum, int amount) { IStackableItem stackableItem = stackableItemDictionary[stackableItemDatum]; IStackableItem lastSameStackableItem = stackableItem.GetLastSameItem(); lastSameStackableItem.AddAmount(amount, out amount); if (amount > 0) { AddItemReculsive(lastSameStackableItem, amount); } }
private void UpdateText() { if (item.IsStackable()) { IStackableItem stackableItem = item as IStackableItem; text.SetText(stackableItem.GetAmount().ToString()); } else { text.SetText(""); } }
private void CustumerSellStackableItem(Item item) { UI_InputWindow.Show_Static("몇개를 판매하시겠습니까?", "1234567890", (int amount) => { IStackableItem stackableItem = item as IStackableItem; if (stackableItem.GetAmount() >= amount) { shop.PlayerSellStackableItem(item, amount); return; } else { //pop up buying failure message Debug.Log("Stackable Sell Failure"); return; } }); }
public void SellStackableItem(Item item, int amount) { IStackableItem stackableItem = item as IStackableItem; int originalAmount = stackableItem.GetAmount(); if (originalAmount == amount) { goldAmount += stackableItem.GetTotalPrice(); //update index firstEmptyItemIndex = Math.Min(selectedItemIndex, firstEmptyItemIndex); //update link if (null != stackableItem.GetPrevSameItem()) { IStackableItem prevStameItem = stackableItem.GetPrevSameItem(); prevStameItem.SetNextSameItem(stackableItem.GetNextSameItem()); } if (null != stackableItem.GetNextSameItem()) { IStackableItem nextSameItem = stackableItem.GetNextSameItem(); nextSameItem.SetPrevSameItem(stackableItem.GetPrevSameItem()); } //destory itemList[selectedItemIndex] = null; OnItemChanged?.Invoke(this, new OnItemChangedArgs { index = selectedItemIndex }); selectedItemIndex = -1; } else { goldAmount += stackableItem.GetTotalPrice(); stackableItem.SetAmount(originalAmount - amount); } }
public void DoublyLinkNextSameItem(IStackableItem nextStackableItem) { this.nextStackableItem = nextStackableItem; nextStackableItem.SetPrevSameItem(this); }
public void SetPrevSameItem(IStackableItem prevStackableItem) { this.prevStackableItem = prevStackableItem; }
public void SetNextSameItem(IStackableItem nextStackableItem) { this.nextStackableItem = nextStackableItem; }