public void ReactToLogic(GameObject LogicNode, int requestedState)
    {
        if (!SNAPPED)
        {
            Debug.Log("Switch cannot react to LOGIC, not SNAPPED.");
            return;
        }
        LogicNode topLogic             = topNode.GetComponent <LogicNode>();
        LogicNode middleLogic          = middleNode.GetComponent <LogicNode>();
        LogicNode bottomLogic          = bottomNode.GetComponent <LogicNode>();
        LogicNode collidingTopLogic    = topLogic.GetCollidingNode().GetComponent <LogicNode>();
        LogicNode collidingBottomLogic = bottomLogic.GetCollidingNode().GetComponent <LogicNode>();
        LogicNode collidingMiddleLogic = middleLogic.GetCollidingNode().GetComponent <LogicNode>();

        if (SwitchUp)
        {
            middleLogic.SetLogicState(collidingTopLogic.GetLogicState());
            collidingMiddleLogic.RequestStateChange(collidingTopLogic.GetLogicState());
        }
        else if (!SwitchUp)
        {
            middleLogic.SetLogicState(collidingBottomLogic.GetLogicState());
            collidingMiddleLogic.RequestStateChange(collidingTopLogic.GetLogicState());
        }
    }
Exemplo n.º 2
0
 // Update is called once per frame
 void Update()
 {
     if (recentCollisionExit)
     {
         recentCollisionExit = false;
         this.logicManager.ResetAllLogic();
     }
     //check if node is colliding, and a recent state change is detected
     if ((collidingNode != null) && (recentStateChange || recentCollisionEnter))
     {
         Debug.Log("Update() in Logic Node: " + this.gameObject.name);
         LogicNode collidedBehavior = collidingNode.GetComponent <LogicNode>();
         collidedBehavior.RequestStateChange(this.GetLogicState());
         recentStateChange    = false;
         recentCollisionEnter = false;
     }
 }
Exemplo n.º 3
0
    /// <summary>
    /// Reacts to the Logic of the two ends of the wires and sets the overall
    /// Logic state of the wire based on a priority system that prioritizes
    /// LOGIC.LOW first, LOGIC.HIGH next, and finally LOGIC.INVALID. This
    /// method is only usuable after activeBeingPlaced is toggled false.
    /// </summary>
    /// <param name="LogicNode"></param>
    /// <param name="requestedState"></param>
    public void ReactToLogic(GameObject LogicNode, int requestedState)
    {
        if (activelyBeingPlaced)
        {
            return;
        }
        LogicNode  startLogic = startNode.GetComponent <LogicNode>();
        LogicNode  endLogic = endNode.GetComponent <LogicNode>();
        GameObject startCollision = startLogic.GetCollidingNode(); GameObject endCollision = endLogic.GetCollidingNode();

        if (startCollision == null || endCollision == null)
        {
            Debug.Log(this.gameObject.name + " ends found to have no collisions, returning.");
            return;
        }
        LogicNode startCollisionLogic = startCollision.GetComponent <LogicNode>();
        LogicNode endCollisionLogic   = endCollision.GetComponent <LogicNode>();
        int       priorityState       = (int)LOGIC.INVALID;
        int       startCollState      = startCollisionLogic.GetLogicState();
        int       endCollState        = endCollisionLogic.GetLogicState();

        if (startCollState == (int)LOGIC.LOW || endCollState == (int)LOGIC.LOW)
        {
            priorityState = (int)LOGIC.LOW;
        }
        else if (startCollState == (int)LOGIC.HIGH || endCollState == (int)LOGIC.HIGH)
        {
            priorityState = (int)LOGIC.HIGH;
        }
        Debug.Log(this.gameObject.name + " priority state found to be: " + priorityState);
        startLogic.SetLogicState(priorityState);
        endLogic.SetLogicState(priorityState);
        if (startCollState != priorityState)
        {
            Debug.Log(this.gameObject.name + " Requesting node " + startCollisionLogic.gameObject.name + " to change to " + priorityState);
            startCollisionLogic.RequestStateChange(priorityState);
        }
        if (endCollState != priorityState)
        {
            Debug.Log(this.gameObject.name + " Requesting node " + endCollisionLogic.gameObject.name + " to change to " + priorityState);
            endCollisionLogic.RequestStateChange(priorityState);
        }
    }
Exemplo n.º 4
0
 /// <summary>
 /// On collision exit, takes this Logic Node, and all related nodes (for Protoboard),
 /// takes itself out of the Logic Manager's tracking of Active Logic Nodes.
 /// Also requests the owning device to set the Logic Node to neutral
 /// Logic State.
 /// </summary>
 /// <param name="collision"></param>
 private void OnTriggerExit2D(Collider2D collision)
 {
     if (collision.gameObject == collidingNode)
     {
         this.collidingNode = null;
         if (this.gameObject.transform.parent == protoboard)
         {   //Special case for protoboard to add all related nodes to the logic manager.
             logicManager.RemoveGameObject(protoboard.GetComponent <ProtoboardObject>().GetGameObjectByID(this.gameObject.name));
         }
         else
         {
             logicManager.RemoveGameObject(this.gameObject);
         }
         LogicNode collided_logic_node = collision.gameObject.GetComponent <LogicNode>();
         Debug.Log("Collision EXIT between node [" + this.gameObject.name + "] and [" + collision.gameObject.name + "]");
         if (collided_logic_node.GetLogicState() != (int)LOGIC.INVALID)
         {
             collided_logic_node.RequestStateChange((int)LOGIC.INVALID);
             this.RequestStateChange((int)LOGIC.INVALID);
             this.recentCollisionExit = true;
         }
     }
 }
Exemplo n.º 5
0
    /// <summary>
    /// Checks if the Device is On, and then continues to check all the inputs colliding
    /// node and sets the output nodes to the correct state.
    /// </summary>
    private void ChipIO()
    {
        GameObject logic_0, logic_1, logic_2, logic_3, logic_4, logic_5, logic_6,
                   logic_7, logic_8, logic_9, logic_10, logic_11, logic_12, logic_13;

        //GND
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 6, out logic_6))
        {
            LogicNode  logic_behavior    = logic_6.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            //GND pin collision node is not GND
            if (collided_state != (int)LOGIC.LOW)
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS08 Ground Input not set to LOW");
            }
        }
        //VCC
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 13, out logic_13))
        {
            LogicNode  logic_behavior    = logic_13.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state != (int)LOGIC.HIGH)
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS08 VCC Input not set to HIGH");
            }
        }

        /**
         * INPUTs find the collided nodes of the input pins and sets the input's
         * pin state to the collided node's state.
         *
         */
        //AND INPUT 1
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 0, out logic_0))
        {
            LogicNode  logic_behavior    = logic_0.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND INPUT 1
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 1, out logic_1))
        {
            LogicNode  logic_behavior    = logic_1.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND ------OUTPUT------- 1
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 2, out logic_2))
        {
            LogicNode  logic_behavior = logic_2.GetComponent <LogicNode>();
            GameObject collided_node = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state = collided_behavior.GetLogicState();
            LogicNode  lnode_0, lnode_1; //LogicNode references
            lnode_0 = logic_0.GetComponent <LogicNode>(); lnode_1 = logic_1.GetComponent <LogicNode>();
            int low = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                    lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.HIGH);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }

        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 3, out logic_3))
        {
            LogicNode  logic_behavior    = logic_3.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 4, out logic_4))
        {
            LogicNode  logic_behavior    = logic_4.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND ------OUTPUT------- 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 5, out logic_5))
        {
            LogicNode  logic_behavior = logic_5.GetComponent <LogicNode>();
            GameObject collided_node = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state = collided_behavior.GetLogicState();
            LogicNode  lnode_0, lnode_1; //LogicNode references
            lnode_0 = logic_3.GetComponent <LogicNode>(); lnode_1 = logic_4.GetComponent <LogicNode>();
            int low = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                    lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.HIGH);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }

        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 9, out logic_9))
        {
            LogicNode  logic_behavior    = logic_9.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 8, out logic_8))
        {
            LogicNode  logic_behavior    = logic_8.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND ------OUTPUT------- 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 7, out logic_7))
        {
            LogicNode  logic_behavior = logic_7.GetComponent <LogicNode>();
            GameObject collided_node = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state = collided_behavior.GetLogicState();
            LogicNode  lnode_0, lnode_1; //LogicNode references
            lnode_0 = logic_8.GetComponent <LogicNode>(); lnode_1 = logic_9.GetComponent <LogicNode>();
            int low = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                    lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.HIGH);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }

        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 12, out logic_12))
        {
            LogicNode  logic_behavior    = logic_12.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND INPUT 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 11, out logic_11))
        {
            LogicNode  logic_behavior    = logic_11.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("AND 74LS408 input 0 is invalid.");
            }
        }
        //AND ------OUTPUT------- 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 10, out logic_10))
        {
            LogicNode  logic_behavior = logic_10.GetComponent <LogicNode>();
            GameObject collided_node = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state = collided_behavior.GetLogicState();
            LogicNode  lnode_0, lnode_1; //LogicNode references
            lnode_0 = logic_11.GetComponent <LogicNode>(); lnode_1 = logic_12.GetComponent <LogicNode>();
            int low = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                    lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.HIGH);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (lnode_0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         lnode_1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }
    }
Exemplo n.º 6
0
    /// <summary>
    /// Checks if the Device is On, and then continues to check all the inputs colliding
    /// node and sets the output nodes to the correct state.
    /// </summary>
    private void ChipIO()
    {
        GameObject select0, select1, select2, enable, z, zinv, input_0, input_1, input_2,
                   input_3, input_4, input_5, input_6, input_7, logic_6, logic_13;

        //GND
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 6, out logic_6))
        {
            LogicNode  logic_behavior    = logic_6.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            //GND pin collision node is not GND
            if (collided_state != (int)LOGIC.LOW)
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A Ground Input not set to LOW");
            }
        }
        //VCC
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 13, out logic_13))
        {
            LogicNode  logic_behavior    = logic_13.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state != (int)LOGIC.HIGH)
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A VCC Input not set to HIGH");
            }
        }

        /**
         * INPUTs find the collided nodes of the input pins and sets the input's
         * pin state to the collided node's state.
         *
         */
        //MUX Selector 0, Node 11
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 10, out select0))
        {
            LogicNode  logic_behavior    = select0.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Selector 1, Node 10
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 9, out select1))
        {
            LogicNode  logic_behavior    = select1.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Selector 2, Node 9
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 8, out select2))
        {
            LogicNode  logic_behavior    = select2.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }

        //MUX Input 0, Node 4
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 3, out input_0))
        {
            LogicNode  logic_behavior    = input_0.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 1, Node 3
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 2, out input_1))
        {
            LogicNode  logic_behavior    = input_1.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 2, Node 2
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 1, out input_2))
        {
            LogicNode  logic_behavior    = input_2.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 3, Node 1
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 0, out input_3))
        {
            LogicNode  logic_behavior    = input_3.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 4, Node 15
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 14, out input_4))
        {
            LogicNode  logic_behavior    = input_4.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 5, Node 14
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 13, out input_5))
        {
            LogicNode  logic_behavior    = input_5.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 6, Node 13
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 12, out input_6))
        {
            LogicNode  logic_behavior    = input_6.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }
        //MUX Input 7, Node 12
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 11, out input_7))
        {
            LogicNode  logic_behavior    = input_7.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }

        //MUX Enable, Node 7
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 6, out enable))
        {
            LogicNode  logic_behavior    = enable.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            if (collided_state == (int)LOGIC.INVALID || !IsDeviceOn())
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
                Debug.Log("MUX 74LS151A input 0 is invalid.");
            }
        }


        //MUX Output Z
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 2, out z))
        {
            LogicNode  logic_behavior = z.GetComponent <LogicNode>();
            GameObject collided_node = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state = collided_behavior.GetLogicState();
            LogicNode  sel0, sel1, sel2, i0, i1, i2, i3, i4, i5, i6, i7, e; //LogicNode references
            sel0 = select0.GetComponent <LogicNode>(); sel1 = select1.GetComponent <LogicNode>(); sel2 = select2.GetComponent <LogicNode>();
            i0   = input_0.GetComponent <LogicNode>(); i1 = input_1.GetComponent <LogicNode>(); i2 = input_2.GetComponent <LogicNode>();
            i3   = input_3.GetComponent <LogicNode>(); i4 = input_4.GetComponent <LogicNode>(); i5 = input_5.GetComponent <LogicNode>();
            i6   = input_6.GetComponent <LogicNode>(); i7 = input_7.GetComponent <LogicNode>(); e = enable.GetComponent <LogicNode>();
            int low = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                    sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                    sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState(i0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState(i1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState(i2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState(i3.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState(i4.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState(i5.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState(i6.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else if (sel0.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel1.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH &&
                         sel2.GetCollidingNode().GetComponent <LogicNode>().GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState(i7.GetCollidingNode().GetComponent <LogicNode>().GetLogicState());
                }
                else
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }

        //MUX Output Z
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 2, out zinv))
        {
            LogicNode  logic_behavior    = zinv.GetComponent <LogicNode>();
            GameObject collided_node     = logic_behavior.GetCollidingNode();
            LogicNode  collided_behavior = collided_node.GetComponent <LogicNode>();
            int        collided_state    = collided_behavior.GetLogicState();
            LogicNode  zNode; //LogicNode references
            zNode = z.GetComponent <LogicNode>();
            int low     = (int)LOGIC.LOW;
            int invalid = (int)LOGIC.INVALID;
            if (IsDeviceOn())
            {
                if (zNode.GetLogicState() == (int)LOGIC.HIGH)
                {
                    logic_behavior.SetLogicState((int)LOGIC.LOW);
                }
                else if (zNode.GetLogicState() == (int)LOGIC.LOW)
                {
                    logic_behavior.SetLogicState((int)LOGIC.HIGH);
                }
                else if (zNode.GetLogicState() == (int)LOGIC.INVALID)
                {
                    logic_behavior.SetLogicState((int)LOGIC.INVALID);
                }
            }
            else
            {
                logic_behavior.SetLogicState((int)LOGIC.INVALID);
            }
            collided_behavior.RequestStateChange(logic_behavior.GetLogicState());
        }
    }