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()); } }
/// <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 }
/// <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); }
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; } }
/// <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); } } }
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; } }
/// <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); }
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; } }
/// <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()); } }
/// <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()); } }