Ejemplo n.º 1
0
    public int Consume(int amount)
    {
        if (Amount <= 0)
        {
            Amount = 0;
            return(0);
        }
        Item oldItem   = Item;
        int  oldAmount = Amount;
        int  consumed  = Mathf.Min(Amount, amount);

        Amount -= consumed;
        if (Amount <= 0)
        {
            Item = null;
            if (oldItem != null)
            {
                OnSlotItemChanged?.Invoke(Index, oldItem);
            }
            Amount = 0;
        }
        OnSlotAmountChanged?.Invoke(Index, oldAmount);
        OnSlotChanged?.Invoke(Index);
        return(consumed);
    }
Ejemplo n.º 2
0
    public void SetItem(Item item)
    {
        Item oldItem = Item;

        Item = item;
        OnSlotChanged?.Invoke(Index);
        OnSlotItemChanged?.Invoke(Index, oldItem);
    }
Ejemplo n.º 3
0
    public void SetItemAmount(Item item, int amount)
    {
        Item oldItem   = Item;
        int  oldAmount = Amount;

        Item   = item;
        Amount = amount;
        OnSlotChanged?.Invoke(Index);
        OnSlotItemChanged?.Invoke(Index, oldItem);
        OnSlotAmountChanged?.Invoke(Index, oldAmount);
    }
Ejemplo n.º 4
0
    public void SetAmount(int amount)
    {
        Item oldItem   = Item;
        int  oldAmount = Amount;

        Amount = Mathf.Max(amount, 0);
        if (Amount == 0)
        {
            Item = null;
            OnSlotItemChanged?.Invoke(Index, oldItem);
        }
        Amount = amount;
        OnSlotChanged?.Invoke(Index);
        OnSlotAmountChanged?.Invoke(Index, oldAmount);
    }
Ejemplo n.º 5
0
    public bool TrySetItem(Item item)
    {
        Item oldItem = Item;

        if (CanSetItem(item))
        {
            if (Item == null)
            {
                Item = item;
                OnSlotChanged?.Invoke(Index);
                OnSlotItemChanged?.Invoke(Index, oldItem);
            }
            return(true);
        }
        return(false);
    }
Ejemplo n.º 6
0
    public int AddAmount(int amount)
    {
        int oldAmount = Amount;
        int maxAdd    = 0;

        if (Item.stackable)
        {
            maxAdd  = 64 - Amount;
            Amount += Mathf.Min(maxAdd, amount);
        }
        else if (Amount <= 0)
        {
            Amount = 1;
            maxAdd = 1;
        }
        OnSlotChanged?.Invoke(Index);
        OnSlotAmountChanged?.Invoke(Index, oldAmount);
        return(Mathf.Min(maxAdd, amount));
    }
Ejemplo n.º 7
0
        public bool AddItem(ItemBlueprint blueprint, int quantity, bool invokeEvents = true)
        {
            var position = FindSlotPosition(blueprint);

            if (!position.HasValue)
            {
                return(false);
            }

            var row    = position.Value.Item1;
            var column = position.Value.Item2;

            var slot = GetSlot(row, column);

            slot.Blueprint = blueprint;
            slot.Quantity += quantity;

            if (invokeEvents)
            {
                OnSlotChanged?.Invoke(row, column, slot.Blueprint, slot.Quantity);
            }

            return(true);
        }
Ejemplo n.º 8
0
 protected void InvokeEvent_SlotChange(int slotIndex) => OnSlotChanged?.Invoke(slotIndex);
Ejemplo n.º 9
0
 private void Change() => OnSlotChanged.Invoke();