public void OnItemBunchAdded(ItemBunchDto itemBunch)
    {
        var itemPrefab = _prefabContainer.GetItemPrefab(itemBunch.TypeId);

        Stack <GameObject> stack;

        if (items.ContainsKey(itemBunch.TypeId))
        {
            stack = items[itemBunch.TypeId];
            var itemComponent = stack.Peek().GetComponent <ItemComponent>();

            var count = Math.Min(itemComponent.CountPerSlot - itemComponent.Count, itemBunch.Count);
            itemComponent.Count += count;
            itemBunch.Count     -= count;
        }
        else
        {
            stack = new Stack <GameObject>();
            items.Add(itemBunch.TypeId, stack);
        }

        while (itemBunch.Count > 0)
        {
            var freeSlot      = slots.First(x => x.childCount == 0);
            var itemObject    = Instantiate(itemPrefab, freeSlot.transform);
            var itemComponent = itemObject.GetComponent <ItemComponent>();

            var count = Math.Min(itemComponent.CountPerSlot - itemComponent.Count, itemBunch.Count);
            itemComponent.Count += count;
            itemBunch.Count     -= count;

            stack.Push(itemObject);
        }
    }
    public void OnItemBunchRemoved(ItemBunchDto itemBunch)
    {
        var stack = items[itemBunch.TypeId];

        while (itemBunch.Count > 0)
        {
            var itemObject    = stack.Peek();
            var itemComponent = itemObject.GetComponent <ItemComponent>();

            var count = Math.Min(itemComponent.Count, itemBunch.Count);
            itemComponent.Count -= count;
            itemBunch.Count     -= count;

            if (itemComponent.Count == 0)
            {
                stack.Pop();
                Destroy(itemObject);
            }
        }
    }
예제 #3
0
        public void RemoveItemBunch(int constructionId, ItemBunchDto bunchDto)
        {
            var construction = _level.GetConstruction(constructionId);

            construction.RemoveItemBunch(new ItemBunch(bunchDto, _typeRepository));
        }
예제 #4
0
 public void AddItemBunch(int constructionId, ItemBunchDto bunchDto)
 {
     _level.GetConstruction(constructionId)
     .AddItemBunch(new ItemBunch(bunchDto, _typeRepository));
 }