Ejemplo n.º 1
0
    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();
    }