public void OnEndDrag(PointerEventData data) { ConstantHandler.Instance.ComponentDragged = false; if (ConstantHandler.Instance.ComponentAdded) { IVector3 pos = ConstantHandler.Instance.PositionComponentAdded; if ((_typeOfItem == GridHandler.SpotType.OR_CENTRE || _typeOfItem == GridHandler.SpotType.AND_CENTRE) && _grid.isOnGrid(pos.x, pos.y, pos.z - 1) && _grid.isOnGrid(pos.x, pos.y, pos.z + 1)) { sib1 = _grid.GetGridSpot(pos.x, pos.y, pos.z - 1); sib2 = _grid.GetGridSpot(pos.x, pos.y, pos.z + 1); _sib.Add(sib1); _sib.Add(sib2); GridHandler.GridSpot eld; eld = _grid.GetGridSpot(pos.x, pos.y, pos.z); _grid.SetSpotToType(_typeOfItem, pos.x, pos.y, pos.z); _grid.AttachComponent(pos.x, pos.y, pos.z); _grid.SetSiblingsForComponent(pos.x, pos.y, pos.z, _sib, GridHandler.ComponentDirection.FRONT, GridHandler.ComponentDirection.BACK); _grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position); _grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position); } else if (_typeOfItem != GridHandler.SpotType.OR_CENTRE && _typeOfItem != GridHandler.SpotType.AND_CENTRE) { if (_grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.OR_CENTRE || _grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.AND_CENTRE) { List <GridHandler.GridSpot> sib = _grid.GetSiblings(pos.x, pos.y, pos.z); foreach (GridHandler.GridSpot s in sib) { _grid.SetSpotToType(GridHandler.SpotType.EMPTY, s.Position.x, s.Position.y, s.Position.z); _grid.AttachComponent(s.Position.x, s.Position.y, s.Position.z); } } else if (_grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.OR_LEFT || _grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.OR_RIGHT || _grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.AND_LEFT || _grid.GetComponentType(pos.x, pos.y, pos.z) == GridHandler.SpotType.AND_RIGHT) { eldest = _grid.GetEldest(pos.x, pos.y, pos.z); List <GridHandler.GridSpot> sib = _grid.GetSiblings(eldest.x, eldest.y, eldest.z); foreach (GridHandler.GridSpot s in sib) { _grid.SetSpotToType(GridHandler.SpotType.EMPTY, s.Position.x, s.Position.y, s.Position.z); _grid.AttachComponent(s.Position.x, s.Position.y, s.Position.z); } _grid.SetSpotToType(GridHandler.SpotType.EMPTY, eldest.x, eldest.y, eldest.z); _grid.AttachComponent(eldest.x, eldest.y, eldest.z); } _grid.SetSpotToType(_typeOfItem, pos.x, pos.y, pos.z); _grid.AttachComponent(pos.x, pos.y, pos.z); } ConstantHandler.Instance.PositionComponentAdded = IVector3.zero; ConstantHandler.Instance.ComponentAdded = false; } Destroy(gameObject); }
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(); }