Esempio n. 1
0
    protected virtual bool AttemptGiveItem()
    {
        if (items.Count == 0 || getDropOffSize() == 0)
        {
            return(false);
        }

        ItemBase item  = ItemBaseUtil.newInstance(items[0]);
        int      count = getDropOffSize();

        if (ItemBaseUtil.isStack(items[0]))
        {
            // We have a stacked item, make sure to carry only what we need
            ItemBaseUtil.decrementStack(items[0], count);
            if (ItemBaseUtil.getAmount(items[0]) == 0)
            {
                // Stack no longer exists, remove it.
                // Don't need to set the amount on the item since it already had a =< batch size amount
                items.RemoveAt(0);
            }
            else
            {
                // Stack still exists, so we need to set the amount that we removed
                ItemBaseUtil.setAmount(item, count);
            }
        }
        else
        {
            // No stack, no problem!
            items.RemoveAt(0);
        }

        carriedItems.Add(item);
        return(true);
    }
Esempio n. 2
0
        // An item that we're going to give, or check that we can give
        public ItemBase AttemptTakeItem(ItemBase item, int amount = 1, bool actuallyGiveItem = true)
        {
            VicisMod.log(getPrefix(), "Attempting to give " + amount + " item " + item.GetDisplayString() + " with id = " + item.mnItemID + " and type = " + item.mType);
            if (getNumItems() == 0)
            {
                return(null);
            }
            bool itemIsStack = item.isStack();

            for (int i = 0; i < items.Count; ++i)
            {
                if (itemIsStack && items[i].isStackAndSame(item))
                {
                    VicisMod.log(getPrefix(), "Found a CubeStack " + items[i].GetDisplayString() + ", which is storing " + items[i].getAmount() + " blocks");
                    int      amntTaken = Math.Min(amount, items[i].getAmount());
                    ItemBase ret       = ItemBaseUtil.newInstance(items[i]);
                    ret.setAmount(amntTaken);
                    if (actuallyGiveItem)
                    {
                        VicisMod.log(getPrefix(), "Taking Away");
                        items[i].decrementStack(amntTaken);
                        if (items[i].getAmount() == 0)
                        {
                            VicisMod.log(getPrefix(), "There are " + items[i].getAmount() + " items for " + items[i].GetDisplayString() + ", removing it from items");
                            items.RemoveAt(i);
                        }
                        MarkDirtyDelayed();
                    }
                    return(ret);
                }
                else if (!item.isStack() && items[i].compareBase(item))
                {
                    ItemBase ret = items[i];
                    VicisMod.log(getPrefix(), "Found a " + ret.GetDisplayString() + ", with id = " + ret.mnItemID + " and type = " + ret.mType);
                    if (actuallyGiveItem)
                    {
                        VicisMod.log(getPrefix(), "Removing from items");
                        items.RemoveAt(i);
                        MarkDirtyDelayed();
                    }
                    return(ret);
                }
            }

            return(null);
        }
Esempio n. 3
0
    protected virtual void dropOffToConveyors()
    {
        bool ignore;
        List <ConveyorEntity> list = VicisMod.checkSurrounding <ConveyorEntity>(this, out ignore);

        VicisMod.log(getPrefix(), "Found " + list.Count + " ConveyorEntities");
        string msg = items.Count + ": ";

        foreach (ItemBase it in items)
        {
            msg += it.GetDisplayString() + ", ";
        }
        VicisMod.log(getPrefix(), "Currently storing " + msg);
        for (int i = 0; i < list.Count && items.Count > 0; ++i)
        {
            ConveyorEntity c = list[i] as ConveyorEntity;
            if (!isConveyorNotFacingMe(c))
            {
                VicisMod.log(getPrefix(), "Conveyor is either not facing somewhere else: " + isConveyorNotFacingMe(c));
                continue;
            }
            if (c.mbReadyToConvey && c.mrLockTimer == 0f)
            {
                VicisMod.log(getPrefix(), "Ready to convey, will be giving " + items[0].GetDisplayString() + ", a " + items[0].mType);
                if (items[0].mType == ItemType.ItemCubeStack)
                {
                    ItemCubeStack a = items[0] as ItemCubeStack;
                    c.AddCube(a.mCubeType, a.mCubeValue, 1);
                    c.mItemForwards = forwards;
                    --a.mnAmount;
                    if (a.mnAmount == 0)
                    {
                        VicisMod.log(getPrefix(), "Removing cube " + a.GetDisplayString() + " from items list");
                        items.RemoveAt(0);
                    }
                }
                else if (items[0].mType == ItemType.ItemStack)
                {
                    ItemStack a = ItemBaseUtil.newInstance(items[0]) as ItemStack;
                    a.mnAmount = 1;
                    ItemBaseUtil.decrementStack(items[0], 1);
                    c.AddItem(a);
                    c.mItemForwards = forwards;
                    if (ItemBaseUtil.getAmount(items[0]) == 0)
                    {
                        VicisMod.log(getPrefix(), "Removing item " + a.GetDisplayString() + " from items list");
                        items.RemoveAt(0);
                    }
                }
                else
                {
                    c.AddItem(items[0]);
                    c.mrCarryTimer       = 1f;
                    c.mrVisualCarryTimer = 1f;
                    c.mItemForwards      = forwards;
                    items.RemoveAt(0);
                }
            }
            else
            {
                VicisMod.log(getPrefix(), "Conveyor is not ready to convey");
            }
        }
    }