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());
        }
    }
Пример #2
0
    /// <summary>
    /// Callback that notifies the object that the mouse is being dragged
    /// on it. This is used to help 'move' the GameObject by calculating the offset
    /// from the previous mouse position. It also checks if the chip is in the
    /// 'Snapped' position if the Mouse click is let go.
    /// </summary>
    void OnMouseDrag()
    {
        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 curPosition    = Camera.main.ScreenToWorldPoint(curScreenPoint);

        transform.position = curPosition;

        //Check for snapping when chip is removed from set place.
        //Check if all nodes with the chip is colliding with another logic node;
        SpriteRenderer spr_ren = snapIndicatorGameObj.GetComponent <SpriteRenderer>();

        foreach (KeyValuePair <string, GameObject> entry in logic_dictionary)
        {
            GameObject logic_node     = entry.Value;
            LogicNode  logic_behavior = logic_node.GetComponent <LogicNode>();
            if (logic_behavior.GetCollidingNode() == null)
            {
                //indicator
                spr_ren.material.color = new Color(1, 1, 1); //neutral
                SNAPPED = false;
                Debug.Log("Snap not set.");
                return;
            }
        }
        //if execution reached here, it means all colliding nodes are valid nodes
        //indicate device can be active
        spr_ren.material.color = new Color(0, 1, 0); //green
    }
Пример #3
0
    /// <summary>
    /// Checks if pin 7 and pin 14 is connected to ground and logic high respectively.
    /// This is checked whenever a new state change is requested to be reacted to.
    /// </summary>
    /// <returns>True or False boolean value on whether the Device is considered on</returns>
    public bool IsDeviceOn()
    {
        if (!SNAPPED)
        {
            return(false);
        }
        GameObject logic_gnd;
        GameObject logic_vcc;

        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 6, out logic_gnd) &&
            logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 13, out logic_vcc))
        {
            LogicNode logic_behavior_gnd = logic_gnd.GetComponent <LogicNode>();
            LogicNode logic_behavior_vcc = logic_vcc.GetComponent <LogicNode>();
            LogicNode gndCollision       = logic_behavior_gnd.GetCollidingNode().GetComponent <LogicNode>();
            LogicNode vccCollision       = logic_behavior_vcc.GetCollidingNode().GetComponent <LogicNode>();
            Debug.Log("GND Set to: " + gndCollision.GetLogicState() + " for Device " + this.gameObject.name);
            Debug.Log("VCC Set to: " + vccCollision.GetLogicState() + " for Device " + this.gameObject.name);
            if (gndCollision.GetLogicState() == (int)LOGIC.LOW &&
                vccCollision.GetLogicState() == (int)LOGIC.HIGH)
            {
                Debug.Log(this.DeviceGameObject.name + " is ON.");
                return(true);
            }
        }
        Debug.Log(this.DeviceGameObject.name + " is OFF.");
        return(false);
    }
Пример #4
0
    private void CheckIfSnapped()
    {
        //Check if all nodes with the chip is colliding with another logic node;
        foreach (KeyValuePair <string, GameObject> entry in logic_dictionary)
        {
            GameObject logic_node     = entry.Value;
            LogicNode  logic_behavior = logic_node.GetComponent <LogicNode>();
            if (logic_behavior.GetCollidingNode() == null)
            {
                //indicator
                SpriteRenderer spr_ren = snapIndicatorGameObj.GetComponent <SpriteRenderer>();
                spr_ren.material.color = new Color(1, 1, 1); //neutral
                SNAPPED = false;
                Debug.Log("NOT SNAPPED.");
                return;
            }
        }
        //On release of mouse, SNAP the chip to the position
        GameObject node_left;

        //get both top left and top right logic nodes on the chip to check if they collided with any other logic nodes
        if (logic_dictionary.TryGetValue(LOGIC_DEVICE_ID + 0, out node_left))
        {
            LogicNode  logicNodeScript_l = node_left.GetComponent <LogicNode>();
            GameObject collidingNodeLeft = logicNodeScript_l.GetCollidingNode();
            Debug.Log("74LS04 SNAPPED!");
            Vector3 collidingNodePos = collidingNodeLeft.transform.position;
            Vector3 offsetPosition   = new Vector3(collidingNodePos.x + .245f, collidingNodePos.y - .58f, collidingNodePos.z);
            DeviceGameObject.transform.position = offsetPosition;
            //indicator
            SpriteRenderer spr_ren = snapIndicatorGameObj.GetComponent <SpriteRenderer>();
            spr_ren.material.color = new Color(0, 1, 0); //green
            SNAPPED = true;
        }
    }
Пример #5
0
    /// <summary>
    ///Interface method from LogicInterface.cs that allows the protoboard to react to any changes to its logic nodes.
    ///This method is called from OnMouseUp() function, so it regulates mouse toggles
    /// </summary>
    /// <param name="logicNode"></param>
    /// <param name="requestedState"></param>
    /// The logic node that calls the ReactToLogic method and the requestedState
    public void ReactToLogic(GameObject logicNode, int requestedState)
    {
        Debug.Log("Protoboard node reacting: " + logicNode.gameObject.name);
        LogicNode logicBehavior = logicNode.GetComponent <LogicNode>();
        string    logicID       = logicBehavior.gameObject.name;
        //Get the list of GameObjects (LogicNodes) that have the same ID as the input logicNode
        List <GameObject> LogicNodeList;

        if (LogicID_Node_Dict.TryGetValue(logicID, out LogicNodeList))
        {
            int priorityState = (int)LOGIC.INVALID;
            //iterate through the list of logicNode and find the state that needs to be set for the entire set
            foreach (GameObject node in LogicNodeList)
            {
                LogicNode  logicScript  = node.GetComponent <LogicNode>();
                GameObject collidedNode = logicScript.GetCollidingNode();
                if (collidedNode != null)
                {
                    LogicNode collidingScript = collidedNode.GetComponent <LogicNode>();
                    //HIGH Logic State is only allowed to be the set's state if the set's state is INVALID
                    //or HIGH already
                    if (collidingScript.GetLogicState() == (int)LOGIC.HIGH &&
                        priorityState == (int)LOGIC.INVALID)
                    {
                        priorityState = (int)LOGIC.HIGH;
                    }
                    //LOW always gets priortiy
                    else if (collidingScript.GetLogicState() == (int)LOGIC.LOW)
                    {
                        priorityState = (int)LOGIC.LOW;
                    }
                    Debug.Log("Priority state found to be " + priorityState + " from Collided node "
                              + collidedNode.gameObject.name + " in Protoboard Node " + logicNode.gameObject.name
                              + " from device " + collidedNode.gameObject.name);
                }
            }
            Debug.Log("PROTOBOARD Setting Logic Set " + logicID + " to state " + priorityState);

            foreach (GameObject node in LogicNodeList)
            {
                LogicNode logicScript = node.GetComponent <LogicNode>();
                logicScript.SetLogicState(priorityState);
            }
        }
    }
Пример #6
0
 private void CheckIfSnapped()
 {
     //Check if all nodes with the chip is colliding with another logic node;
     if (LEDNodeGnd.GetComponent <LogicNode>().GetCollidingNode() == null || LEDNodeVCC.GetComponent <LogicNode>().GetCollidingNode() == null)
     {
         Debug.Log("LED Not Snapped");
         SNAPPED = false;
     }
     else
     {
         Debug.Log("LED SNAPPED!");
         LogicNode  GndNode          = LEDNodeGnd.GetComponent <LogicNode>();
         GameObject CollidingNode    = GndNode.GetCollidingNode();
         Vector3    collidingNodePos = CollidingNode.transform.position;
         Vector3    offsetPosition   = new Vector3(collidingNodePos.x + 1.2f, collidingNodePos.y - .165f, collidingNodePos.z);
         DeviceGameObject.transform.position = offsetPosition;
         SNAPPED = true;
     }
 }
Пример #7
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);
        }
    }
    private bool CheckIfSnapped()
    {
        //Check if all nodes with the chip is colliding with another logic node;
        if (middleNode.GetComponent <LogicNode>().GetCollidingNode() == null || bottomNode.GetComponent <LogicNode>().GetCollidingNode() == null ||
            topNode.GetComponent <LogicNode>().GetCollidingNode() == null)
        {
            Debug.Log("LED Not Snapped");
            SNAPPED = false;
        }
        else
        {
            Debug.Log("LED SNAPPED!");
            LogicNode  middleNodeBehavior = middleNode.GetComponent <LogicNode>();
            GameObject CollidingNode      = middleNodeBehavior.GetCollidingNode();
            Vector3    collidingNodePos   = CollidingNode.transform.position;
            Vector3    offsetPosition     = new Vector3(collidingNodePos.x - .009f, collidingNodePos.y + .01f, collidingNodePos.z);
            DeviceGameObject.transform.position = offsetPosition;
            SNAPPED = true;
        }

        return(SNAPPED);
    }
Пример #9
0
    public void ReactToLogic(GameObject LogicNode, int requestedState)
    {
        if (!SNAPPED)
        {
            Debug.Log("LED Is not snapped, cannot react to logic.");
            return;
        }
        LogicNode      VCCLogic = LEDNodeVCC.GetComponent <LogicNode>(); LogicNode GNDLogic = LEDNodeGnd.GetComponent <LogicNode>();
        LogicNode      VCCCollidingNode = VCCLogic.GetCollidingNode().GetComponent <LogicNode>();
        LogicNode      GNDCollidingNode = GNDLogic.GetCollidingNode().GetComponent <LogicNode>();
        SpriteRenderer LEDSpriteRen     = this.gameObject.GetComponent <SpriteRenderer>();

        if (GNDCollidingNode.GetLogicState() == (int)LOGIC.LOW && VCCCollidingNode.GetLogicState() == (int)LOGIC.HIGH)
        {
            LEDSpriteRen.sprite = LEDOn;
            LEDState            = true;
        }
        else
        {
            LEDSpriteRen.sprite = LEDOff;
            LEDState            = false;
        }
    }
Пример #10
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());
        }
    }
Пример #11
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());
        }
    }