Exemplo n.º 1
0
    /// <summary>
    /// Adds an item given an extractor/inserter. Calculates and places in the right slot.
    /// </summary>
    /// <param name="item"></param>
    /// <param name="inserter"></param>
    /// <returns></returns>
    public GenericItem AddItem(GenericItem item, Extractor inserter)
    {
        //Side the inserter is using
        InsertSide insert_side = inserter.OUTPUT_SIDE;
        InsertDir  insert_dir  = GetInsertDir(inserter.GetComponent <GridController>());
        BeltSide   side        = GetBeltSide(insert_dir, insert_side);
        BeltPos    pos         = GetBeltPos(insert_dir, insert_side);

        //If it isn't valid, return immediately.
        if (!isValidInsert(insert_dir, insert_side))
        {
            return(null);
        }
        else
        {
            //Get the relevant list.
            List <ItemController> LIST = GetSideList(side);

            //Get the relevant index.
            int index = GetIndex(side, pos);

            //Update the right index.
            LIST[(int)pos] = item.SpawnObject(ITEM_POSITIONS[index].position, ITEM_POSITIONS[index].rotation, ITEM_POSITIONS[index]);
            return(LIST[(int)pos].INFO);
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// Returns true if we acn add an item from this inserter.
    /// </summary>
    /// <param name="inserter"></param>
    /// <returns></returns>
    public bool AttemptAddItem(Extractor inserter)
    {
        //Side the inserter is using
        InsertSide insert_side = inserter.OUTPUT_SIDE;
        InsertDir  insert_dir  = GetInsertDir(inserter.GetComponent <GridController>());

        return(isValidInsert(insert_dir, insert_side));
    }
Exemplo n.º 3
0
    /// <summary>
    /// Attempts to insert an item given an extractor/inserter.
    /// Returns the item if successful, else null.
    /// </summary>
    /// <param name="item"></param>
    /// <param name="inserter"></param>
    /// <returns></returns>
    public bool AttemptExtractItem(GenericItem item, Extractor inserter)
    {
        //Side the inserter is using
        InsertSide insert_side = inserter.OUTPUT_SIDE;
        InsertDir  insert_dir  = GetInsertDir(inserter.GetComponent <GridController>());
        BeltSide   side        = GetBeltSide(insert_dir, insert_side);
        BeltPos    pos         = GetBeltPos(insert_dir, insert_side);

        return(isItemAccessible(side, pos, item));
    }
Exemplo n.º 4
0
    /// <summary>
    /// Returns the side of the belt given a direction and side.
    /// </summary>
    /// <param name="insertDir"></param>
    /// <param name="insertSide"></param>
    /// <returns></returns>
    public BeltSide GetBeltSide(InsertDir insertDir, InsertSide insertSide)
    {
        switch (insertDir)
        {
        case InsertDir.Back:
            if (insertSide == InsertSide.Left)
            {
                return(BeltSide.Left);
            }
            else
            {
                return(BeltSide.Right);
            }

        case InsertDir.Front:
            if (insertSide == InsertSide.Left)
            {
                return(BeltSide.Right);
            }
            else
            {
                return(BeltSide.Left);
            }

        case InsertDir.Left:
            return(BeltSide.Left);

        case InsertDir.Right:
            return(BeltSide.Right);

        case InsertDir.Top:
            if (insertSide == InsertSide.Left)
            {
                return(BeltSide.Left);
            }
            else
            {
                return(BeltSide.Right);
            }

        case InsertDir.Bottom:
            if (insertSide == InsertSide.Left)
            {
                return(BeltSide.Left);
            }
            else
            {
                return(BeltSide.Right);
            }

        default:
            throw new System.Exception("Error, invalid belt side.");
        }
    }
Exemplo n.º 5
0
    /// <summary>
    /// Returns true or false depending on if the slot that is meant to be used on insert based on direction is empty.
    /// Inserters output either to their left or right half of the square. As such:
    /// Left insert direction inserters outputting to the left output to the front of the belt.
    /// Left insert direction inserters outputting to the right output to the back of the belt.
    /// </summary>
    /// <param name="insertDir"></param>
    /// <returns></returns>
    public bool isValidInsert(InsertDir insertDir, InsertSide insertSide)
    {
        BeltSide       side = GetBeltSide(insertDir, insertSide);
        BeltPos        pos  = GetBeltPos(insertDir, insertSide);
        ItemController EC   = GetItem(side, pos);

        if (EC == null)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
Exemplo n.º 6
0
    /// <summary>
    /// Returns the position of the item given a direction and side.
    /// </summary>
    /// <param name="insertDir"></param>
    /// <param name="insertSide"></param>
    /// <returns></returns>
    public BeltPos GetBeltPos(InsertDir insertDir, InsertSide insertSide)
    {
        switch (insertDir)
        {
        case InsertDir.Back:
            return(BeltPos.Back);

        case InsertDir.Front:
            return(BeltPos.Front);

        case InsertDir.Top:
            return(BeltPos.Middle);

        case InsertDir.Bottom:
            return(BeltPos.Middle);

        case InsertDir.Left:
            if (insertSide == InsertSide.Left)
            {
                return(BeltPos.Front);
            }
            else
            {
                return(BeltPos.Back);
            }

        case InsertDir.Right:
            if (insertSide == InsertSide.Left)
            {
                return(BeltPos.Back);
            }
            else
            {
                return(BeltPos.Front);
            }

        default:
            throw new System.Exception("Error, invalid belt position.");
        }
    }
Exemplo n.º 7
0
    /// <summary>
    /// Extracts item with given inserter.
    /// Only decrements this inventory, does not add to the inserter's inventory.
    /// Returns the item if successful, else null;
    /// </summary>
    /// <param name="item"></param>
    /// <param name="inserter"></param>
    /// <returns></returns>
    public GenericItem ExtractItem(GenericItem item, Extractor inserter)
    {
        //Side the inserter is using
        InsertSide insert_side = inserter.OUTPUT_SIDE;
        InsertDir  insert_dir  = GetInsertDir(inserter.GetComponent <GridController>());
        BeltSide   side        = GetBeltSide(insert_dir, insert_side);
        BeltPos    pos         = GetBeltPos(insert_dir, insert_side);

        //Get the relevant list.
        List <ItemController> LIST = GetSideList(side);

        //Get the relevant index.
        int index = GetIndex(side, pos);

        //Save the item to be returned
        GenericItem item_ret = LIST[(int)pos].INFO;

        //Update side list.
        LIST[(int)pos].DespawnObject();
        LIST[(int)pos] = null;
        return(item_ret);
    }