//Rotate component
 private void RotateComponent(GameObject _object)
 {
     if (_rotClicks < 4)
     {
         _object.transform.Rotate(90, 0, 0);
         if (_rotClicks == 0)
         {
             _direction = GridHandler.ComponentDirection.DOWN;
         }
         else if (_rotClicks == 1)
         {
             _direction = GridHandler.ComponentDirection.RIGHT;
         }
         else if (_rotClicks == 2)
         {
             _direction = GridHandler.ComponentDirection.UP;
         }
         else
         {
             _direction = GridHandler.ComponentDirection.LEFT;
         }
         _rotClicks++;
     }
     else if (_rotClicks < 8)
     {
         _object.transform.Rotate(0, 0, 90);
         _direction = GridHandler.ComponentDirection.LEFT;
         _rotClicks++;
     }
     else if (_rotClicks < 12)
     {
         _object.transform.Rotate(0, 90, 0);
         if (_rotClicks == 8)
         {
             _direction = GridHandler.ComponentDirection.BACK;
         }
         else if (_rotClicks == 9)
         {
             _direction = GridHandler.ComponentDirection.RIGHT;
         }
         else if (_rotClicks == 10)
         {
             _direction = GridHandler.ComponentDirection.FRONT;
         }
         else
         {
             _direction = GridHandler.ComponentDirection.LEFT;
         }
         _rotClicks++;
     }
     else
     {
         _rotClicks = 0;
     }
     //Debug.Log(_direction);
 }
Example #2
0
    //Rotate component
    private void RotateComponent(GameObject _object)
    {
        if (_rotClicks < 4)
        {
            //Rotate OR centre
            _object.transform.Rotate(90, 0, 0);
            //Change direction of OR centre
            if (_rotClicks == 0)
            {
                _direction = GridHandler.ComponentDirection.DOWN;
            }
            else if (_rotClicks == 1)
            {
                _direction = GridHandler.ComponentDirection.RIGHT;
            }
            else if (_rotClicks == 2)
            {
                _direction = GridHandler.ComponentDirection.UP;
            }
            else
            {
                _direction = GridHandler.ComponentDirection.LEFT;
            }

            //Change position direction and orientation of siblings
            sib1 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z - 1);
            sib2 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z + 1);
            foreach (GridHandler.GridSpot t in _tempSib)
            {
                GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
            }
            _tempSib.Clear();
            _tempSib.Add(sib1);
            _tempSib.Add(sib2);
            _siblings = _tempSib;

            GridHandler.GridSpot eld;
            eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
            GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.FRONT, GridHandler.ComponentDirection.BACK);
            GameObject obj1, obj2;
            if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
            {
                obj1.transform.eulerAngles = new Vector3(-180, 0, 0);
                obj2.transform.eulerAngles = new Vector3(-180, 180, 0);
                obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.FRONT;
                obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.BACK;
            }
            GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
            GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
            _rotClicks++;
            //-----------------------------
        }
        else if (_rotClicks < 8)
        {
            _direction = GridHandler.ComponentDirection.LEFT;
            if (GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y + 1, _pos.z) && GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y - 1, _pos.z) && GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y, _pos.z + 1) && GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y, _pos.z - 1))
            {
                _object.transform.Rotate(0, 0, 90);
                if (_rotClicks == 4)
                {
                    //left go up, right go down
                    sib1 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y + 1, _pos.z);
                    sib2 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y - 1, _pos.z);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.DOWN, GridHandler.ComponentDirection.UP);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-90, 0, 0);
                        obj2.transform.eulerAngles = new Vector3(90, 180, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.DOWN;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.UP;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else if (_rotClicks == 5)
                {
                    //Right and left switch
                    sib1 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z + 1);
                    sib2 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z - 1);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.BACK, GridHandler.ComponentDirection.FRONT);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, 180, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, 0, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.BACK;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.FRONT;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else if (_rotClicks == 6)
                {
                    //Right go up, left go down
                    sib1 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y - 1, _pos.z);
                    sib2 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y + 1, _pos.z);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.UP, GridHandler.ComponentDirection.DOWN);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(90, 180, 0);
                        obj2.transform.eulerAngles = new Vector3(-90, 0, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.UP;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.DOWN;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else
                {
                    sib1 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z - 1);
                    sib2 = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z + 1);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.FRONT, GridHandler.ComponentDirection.BACK);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, 0, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, 180, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.FRONT;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.BACK;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                    //Left left, right right
                }
                _rotClicks++;
            }
            else
            {
                _rotClicks += 4;
            }
        }
        else if (_rotClicks < 12)
        {
            if (GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y, _pos.z - 1) && GameHandler.instance._grid.isOnGrid(_pos.x + 1, _pos.y, _pos.z) && GameHandler.instance._grid.isOnGrid(_pos.x, _pos.y, _pos.z + 1) && GameHandler.instance._grid.isOnGrid(_pos.x - 1, _pos.y, _pos.z))
            {
                _object.transform.Rotate(0, 90, 0);
                if (_rotClicks == 8)
                {
                    _direction = GridHandler.ComponentDirection.BACK;
                    sib1       = GameHandler.instance._grid.GetGridSpot(_pos.x + 1, _pos.y, _pos.z);
                    sib2       = GameHandler.instance._grid.GetGridSpot(_pos.x - 1, _pos.y, _pos.z);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.LEFT, GridHandler.ComponentDirection.RIGHT);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, -90, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, 90, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.LEFT;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.RIGHT;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else if (_rotClicks == 9)
                {
                    _direction = GridHandler.ComponentDirection.RIGHT;
                    sib1       = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z + 1);
                    sib2       = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z - 1);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.BACK, GridHandler.ComponentDirection.FRONT);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, 180, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, 0, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.BACK;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.FRONT;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else if (_rotClicks == 10)
                {
                    _direction = GridHandler.ComponentDirection.FRONT;
                    sib1       = GameHandler.instance._grid.GetGridSpot(_pos.x - 1, _pos.y, _pos.z);
                    sib2       = GameHandler.instance._grid.GetGridSpot(_pos.x + 1, _pos.y, _pos.z);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.RIGHT, GridHandler.ComponentDirection.LEFT);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, 90, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, -90, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.RIGHT;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.LEFT;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                else
                {
                    _direction = GridHandler.ComponentDirection.LEFT;
                    sib1       = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z - 1);
                    sib2       = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z + 1);
                    foreach (GridHandler.GridSpot t in _tempSib)
                    {
                        GameHandler.instance._grid.SetSpotToType(GridHandler.SpotType.EMPTY, t.Position.x, t.Position.y, t.Position.z);
                        GameHandler.instance._grid.AttachComponent(t.Position.x, t.Position.y, t.Position.z);
                    }
                    _tempSib.Clear();
                    _tempSib.Add(sib1);
                    _tempSib.Add(sib2);
                    _siblings = _tempSib;

                    GridHandler.GridSpot eld;
                    eld = GameHandler.instance._grid.GetGridSpot(_pos.x, _pos.y, _pos.z);
                    GameHandler.instance._grid.SetSiblingsForComponent(_pos.x, _pos.y, _pos.z, _tempSib, GridHandler.ComponentDirection.FRONT, GridHandler.ComponentDirection.BACK);
                    GameObject obj1, obj2;
                    if (GameHandler.instance._grid.GetComponentObject(sib1.Position, out obj1) && GameHandler.instance._grid.GetComponentObject(sib2.Position, out obj2))
                    {
                        obj1.transform.eulerAngles = new Vector3(-180, 0, 0);
                        obj2.transform.eulerAngles = new Vector3(-180, 180, 0);
                        obj1.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.FRONT;
                        obj2.GetComponent <SiblingsDir> ().Direction = GridHandler.ComponentDirection.BACK;
                    }
                    GameHandler.instance._grid.SetEldest(sib1.Position.x, sib1.Position.y, sib1.Position.z, eld.Position);
                    GameHandler.instance._grid.SetEldest(sib2.Position.x, sib2.Position.y, sib2.Position.z, eld.Position);
                }
                _rotClicks++;
            }
            else
            {
                _rotClicks += 4;
            }
            //Left and right move counterwise position
        }
        else
        {
            _rotClicks = 0;
        }
        //Debug.Log(_direction);
    }
 public InputComponent(IVector3 pos, GridHandler.ComponentDirection dir, bool _logicArg)
 {
     _logicInput = _logicArg;
     _direction  = dir;
     _position   = pos;
 }
Example #4
0
 public ORComponent(IVector3 pos, GridHandler.ComponentDirection dir)
 {
     _direction = dir;
     _position  = pos;
     _input     = new List <bool> ();
 }
 public SplitterComponent(IVector3 pos, GridHandler.ComponentDirection dir, GridHandler.ComponentDirection sec)
 {
     _direction          = dir;
     _position           = pos;
     _secondaryDirection = sec;
 }
 public NOTComponent(IVector3 pos, GridHandler.ComponentDirection dir)
 {
     _direction = dir;
     _position  = pos;
 }
    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();
    }