private void FindAllComponents() { input = new List <InputComponent> (); wires = new List <WireComponent> (); not = new List <NOTComponent> (); or = new List <ORComponent> (); splitter = new List <SplitterComponent> (); and = new List <ANDComponent> (); output = null; electronPos = new List <IVector3> (); _logicVals = new List <bool> (); int val = 0; for (int i = 0; i < ConstantHandler.Instance.GridLength; i++) { for (int j = 0; j < ConstantHandler.Instance.GridWidth; j++) { for (int k = 0; k < ConstantHandler.Instance.GridHeight; k++) { GameObject spot; if (_grid.GetComponentObject(new IVector3(i, j, k), out spot)) { GridHandler.SpotType _type = _grid.GetComponentType(i, j, k); switch (_type) { case GridHandler.SpotType.INPUT_A: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; input.Add(new InputComponent(new IVector3(i, j, k), dir, _logicInput[0])); _logicVals.Add(_logicInput [0]); electronPos.Add(new IVector3(i, j, k)); break; } case GridHandler.SpotType.INPUT_B: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; input.Add(new InputComponent(new IVector3(i, j, k), dir, _logicInput[1])); _logicVals.Add(_logicInput [1]); electronPos.Add(new IVector3(i, j, k)); break; } case GridHandler.SpotType.INPUT_C: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; input.Add(new InputComponent(new IVector3(i, j, k), dir, _logicInput[2])); _logicVals.Add(_logicInput [2]); electronPos.Add(new IVector3(i, j, k)); break; } case GridHandler.SpotType.WIRE: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; wires.Add(new WireComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.OUTPUT: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; output = new OutputComponent(new IVector3(i, j, k), dir); break; } case GridHandler.SpotType.NOT: { GridHandler.ComponentDirection dir = spot.GetComponent <RotateOnClick> ().Direction; not.Add(new NOTComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.OR_LEFT: { GridHandler.ComponentDirection dir = spot.GetComponent <SiblingsDir> ().Direction; wires.Add(new WireComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.OR_RIGHT: { GridHandler.ComponentDirection dir = spot.GetComponent <SiblingsDir> ().Direction; wires.Add(new WireComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.OR_CENTRE: { GridHandler.ComponentDirection dir = spot.GetComponent <RotAndSiblingPosChange>().Direction; or.Add(new ORComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.SPLITTER: { GridHandler.ComponentDirection dir = spot.GetComponent <SplitterRotateOnClick> ().Direction; GridHandler.ComponentDirection sec = spot.GetComponent <SplitterRotateOnClick> ().SecondaryDirection; splitter.Add(new SplitterComponent(new IVector3(i, j, k), dir, sec)); break; } case GridHandler.SpotType.AND_CENTRE: { GridHandler.ComponentDirection dir = spot.GetComponent <RotAndSiblingPosChange>().Direction; and.Add(new ANDComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.AND_LEFT: { GridHandler.ComponentDirection dir = spot.GetComponent <SiblingsDir> ().Direction; wires.Add(new WireComponent(new IVector3(i, j, k), dir)); break; } case GridHandler.SpotType.AND_RIGHT: { GridHandler.ComponentDirection dir = spot.GetComponent <SiblingsDir> ().Direction; wires.Add(new WireComponent(new IVector3(i, j, k), dir)); break; } } } } } } if (input.Count < 1) { Debug.LogError("No inputs detected"); return; } if (output == null) { Debug.LogError("No output detected"); return; } MoveElectron(); }