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> /// 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); }
public IEnumerator ProtoboardTest() { SetupScene(); yield return(new WaitForSecondsRealtime(1)); GameObject Protoboard = GameObject.Find("Protoboard"); Assert.IsNotNull(Protoboard); ProtoboardObject protoboardObject = Protoboard.GetComponent <ProtoboardObject>(); GameObject testNode = new GameObject("TesterNode"); LogicNode testLogic = testNode.AddComponent <LogicNode>(); foreach (KeyValuePair <string, List <GameObject> > entry in protoboardObject.GetNodeDictionary()) { List <GameObject> relatedNodes = entry.Value; foreach (GameObject protonode in relatedNodes) { testNode.transform.position = protonode.transform.position; testLogic.SetLogicState((int)LOGIC.HIGH); yield return(new WaitForSeconds(.1f)); foreach (GameObject protoboardNode in relatedNodes) //place node { Assert.AreEqual(testLogic.GetLogicState(), protoboardNode.GetComponent <LogicNode>().GetLogicState()); } testLogic.SetLogicState((int)LOGIC.LOW); yield return(new WaitForSeconds(.1f)); foreach (GameObject protoboardNode in relatedNodes) //place node { Assert.AreEqual(testLogic.GetLogicState(), protoboardNode.GetComponent <LogicNode>().GetLogicState()); } testLogic.SetLogicState((int)LOGIC.INVALID); yield return(new WaitForSeconds(.1f)); foreach (GameObject protoboardNode in relatedNodes) //place node { Assert.AreEqual(testLogic.GetLogicState(), protoboardNode.GetComponent <LogicNode>().GetLogicState()); } } } yield return(new WaitForSecondsRealtime(1)); yield break; }
/// <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); } } }
public IEnumerator SwitchTest() { SetupScene(); yield return(new WaitForSecondsRealtime(1)); GameObject topNode = new GameObject("topNode"); LogicNode topLogic = topNode.AddComponent <LogicNode>(); GameObject botNode = new GameObject("botNode"); LogicNode botLogic = botNode.AddComponent <LogicNode>(); GameObject middleNode = new GameObject("middleNode"); LogicNode middleLogic = middleNode.AddComponent <LogicNode>(); GameObject SwitchPrefab = Resources.Load <GameObject>("Prefabs/Lab/Switch"); Assert.NotNull(SwitchPrefab); GameObject switchGO = GameObject.Instantiate <GameObject>(SwitchPrefab); Switch switchScript = switchGO.GetComponent <Switch>(); yield return(new WaitForSecondsRealtime(1)); LogicNode switchTop = switchScript.GetTopNode().GetComponent <LogicNode>(); LogicNode switchBot = switchScript.GetBotNode().GetComponent <LogicNode>(); LogicNode switchMiddle = switchScript.GetMiddleNode().GetComponent <LogicNode>(); topNode.transform.position = switchTop.gameObject.transform.position; botNode.transform.position = switchBot.gameObject.transform.position; middleNode.transform.position = switchMiddle.gameObject.transform.position; yield return(new WaitForSecondsRealtime(1)); switchScript.OnMouseUp(); yield return(new WaitForSecondsRealtime(1)); topLogic.SetLogicState((int)LOGIC.HIGH); botLogic.SetLogicState((int)LOGIC.LOW); switchScript.ToggleSwitch(true); yield return(new WaitForSecondsRealtime(1)); Assert.AreEqual(switchMiddle.GetLogicState(), topLogic.GetLogicState()); switchScript.ToggleSwitch(false); yield return(new WaitForSecondsRealtime(1)); Assert.AreEqual(switchMiddle.GetLogicState(), botLogic.GetLogicState()); yield break; }
/// <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); } }
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> /// 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; } } }
//Toggles node set from INVALID -> LOW -> HIGH private void ToggleNodeSet(GameObject logicNode) { LogicNode logicBehaviorScript = logicNode.GetComponent <LogicNode>(); string logicID = logicBehaviorScript.gameObject.name; int state = logicBehaviorScript.GetLogicState(); if (state == (int)LOGIC.INVALID) { Debug.Log("Logic INVALID is found, toggling to Logic Low"); state = (int)LOGIC.LOW; } else if (state == (int)LOGIC.LOW) { Debug.Log("Logic LOW is found, Toggling to Logic HIGH"); state = (int)LOGIC.HIGH; } else if (state == (int)LOGIC.HIGH) { Debug.Log("Logic HIGH is found, Toggling to Logic LOW"); state = (int)LOGIC.INVALID; } //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)) { //iterate through the list of logicNode foreach (GameObject node in LogicNodeList) { //if the itearting node is not the input logicNode, then set the node's state //to the input logicNode's state LogicNode logicScript = node.GetComponent <LogicNode>(); logicScript.SetLogicState(state); } } }
/// <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()); } }