예제 #1
0
    void FixedUpdate()
    {
        wiimoteCount = wiimote_count();
        if (wiimoteCount > 0)
        {
            //Nota: alleen 1 wiimote is rekening mee gehouden, 2x privates nodig voor 2e of afwisselend behandelen
            x     = wiimote_getAccX(0);
            y     = wiimote_getAccY(0);
            z     = wiimote_getAccZ(0);
            roll  = Mathf.Round(wiimote_getRoll(0) + rollFudge);
            pitch = Mathf.Round(wiimote_getPitch(0) + pitchFudge);
            yaw   = Mathf.Round(wiimote_getYaw(0));

            //Orientation vectors
            if (!float.IsNaN(roll) && !float.IsNaN(pitch))
            {
                vec = new Vector3(pitch, 0, -1 * roll);
/*					vec = new Vector3(pitch, yaw , -1 * roll);*/
                vec    = Vector3.Lerp(oldVec, vec, Time.deltaTime * sensitivity);
                oldVec = vec;
            }

            /* ir Gui  */
            ir_x = wiimote_getIrX(0);
            ir_y = wiimote_getIrY(0);
            //F**k off basic zooi die er al was, Jens coming through
            if ((ir_x != -100) && (ir_y != -100))
            {
                temp_x = (ir_x + 1) / 2;
                temp_y = (ir_y + 1) / 2;
                screenpointer.transform.position = new Vector3(temp_x, temp_y, 0);
            }

            //Updaten van muispointers
            selectieScript.updateSelection(temp_x * Screen.width, temp_y * Screen.height);
            smoothCameraScript.UpdateCamera();

            //wanneer we gemerkt hebben dat de gebruiker in topview een vloer heeft geselecteerd, zetten we hem eerst terug op de grond voor iets anders te doen
            //de camera gaat in de smoothcamerascript de gebruiker terug in een draaiende beweging in het midden van de geselecteerde kamer zetten
            if (moveToSelectedRoom)
            {
                smoothCameraScript.goToRoom(selectieScript.lastGameObjectHit.transform.position);
                modus   = Modi.NAV_SEL;
                topview = false;
            }
            //Hier komen alle eigen manipulaties

            /*Klikken op A en B */             //TODO:single - pulse - klik :/
            if (wiimote_getButtonA(0) && wiimote_getButtonB(0) && !buttonpulse)
            {
                buttonpulse = true;
                switch (modus)
                {
                //TOONT HET MENU in selectie of manipulatiemode
                case Modi.NAV_SEL:                         //In selectiemodus: klikken = selecteren
                    if (selectieScript.GUIShown)
                    {
                        selectieScript.hideUI();
                        selectieScript.GUIShown = false;
                        modus = Modi.NAV_SEL;
                    }
                    else
                    {
                        ObjectScript script  = (ObjectScript)selectieScript.lastGameObjectHit.GetComponent("ObjectScript");
                        string[]     choices = { "Geen keuzes" };
                        if (script != null)
                        {
                            choices = script.getObjectPossibilities();
                        }
                        selectieScript.showUi(temp_x * Screen.width, temp_y * Screen.height, choices);
                        selectieScript.GUIShown = true;
                        modus = Modi.CHO_MAN;
                    }
                    break;

                case Modi.CHO_MAN:
                    //Zelfde als selectie -> terug naar nav gaan
                    if (selectieScript.GUIShown)
                    {
                        selectieScript.hideUI();
                        selectieScript.GUIShown = false;
                        modus = Modi.NAV_SEL;
                    }
                    else
                    {
                        ObjectScript script  = (ObjectScript)selectieScript.lastGameObjectHit.GetComponent("ObjectScript");
                        string[]     choices = { "Geen keuzes" };
                        if (script != null)
                        {
                            choices = script.getObjectPossibilities();
                        }
                        selectieScript.showUi(temp_x * Screen.width, temp_y * Screen.height, choices);
                        selectieScript.GUIShown = true;
                        modus = Modi.CHO_MAN;
                    }
                    break;

                case Modi.MOV:
                    GameObject newParent = raycastscript.getTargetObjects(new Vector3(temp_x * Screen.width, temp_y * Screen.height, 0), playerCam.camera);
                    if (newParent != null && newParent != selectieScript.lastGameObjectHit)
                    {
                        moveScript.changeStackParent(selectieScript.lastGameObjectHit, newParent);
                    }
                    break;
                }
            }
            else if (wiimote_getButtonA(0))              //Alleen A ingedrukt = menu kiezen
            {
                //buttonpulse = true;
                if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN)
                {
                    //Recalculate the gui pixel values from ir values
                    float realvalX = temp_x * Screen.width;
                    float realvalY = temp_y * Screen.height;
                    Debug.Log(selectieScript.getButtonOnPosition(realvalX, realvalY));
                    if (selectieScript.getButtonOnPosition(realvalX, realvalY) == "Move")
                    {
                        Debug.Log("Move change parent");
                        rotateScript.End();
                        scaleScript.End();
                        stackScript.End();
                        modus = Modi.MOV;
                        moveScript.Begin(selectieScript.lastGameObjectHit);
                    }
                    else if (selectieScript.getButtonOnPosition(realvalX, realvalY) == "Rotate")
                    {
                        Debug.Log("rotate");
                        scaleScript.End();
                        stackScript.End();
                        moveScript.End();
                        smoothCameraScript.GaNaarVorigePositie();
                        modus = Modi.ROT;
                        rotateScript.Begin(selectieScript.lastGameObjectHit);
                    }
                    else if (selectieScript.getButtonOnPosition(realvalX, realvalY) == "Add")
                    {
                        Debug.Log("stack");
                        rotateScript.End();
                        scaleScript.End();
                        moveScript.End();
                        modus = Modi.STA;
                        stackScript.Begin(selectieScript.lastGameObjectHit);
                    }
                    else if (selectieScript.getButtonOnPosition(realvalX, realvalY) == "Delete")
                    {
                        Debug.Log("remove");
                        rotateScript.End();
                        scaleScript.End();
                        stackScript.End();
                        moveScript.End();
                        //modus = Modi.DEL;	//Niet nodig: alles gebeurt hier
                        verwijderScript.DeleteObject(selectieScript.lastGameObjectHit);
                        selectieScript.lastGameObjectHit = null;
                        selectieScript.hideUI();
                        selectieScript.GUIShown = false;
                        modus = Modi.NAV_SEL;
                    }
                    else if (selectieScript.getButtonOnPosition(realvalX, realvalY) == "Scale")
                    {
                        Debug.Log("scale");
                        rotateScript.End();
                        stackScript.End();
                        moveScript.End();
                        smoothCameraScript.GaNaarVorigePositie();
                        modus = Modi.SCA;
                        scaleScript.Begin(selectieScript.lastGameObjectHit);
                    }
                }
            }
            else if (wiimote_getButtonB(0))
            {
                //buttonpulse = true;
                //Alleen knop B: niks in zetten dat al in A+B zit -> conflicten
            }
            else
            {
                //Geen knop ingedrukt
                buttonpulse = false;
            }

            if (wiimote_getButtonMinus(0) && !minbuttonpulse)             //Terug naar vorige modus
            {
                minbuttonpulse = true;
                if (modus == Modi.NAV_SEL)
                {
                    smoothCameraScript.returnFromTopview2();
                    topview = false;
                }
                else if (modus == Modi.MOV)                  //FROM move TO choicemodus
                {
                    moveScript.End();
                    modus = Modi.NAV_SEL;
                }
                else if (modus == Modi.ROT)
                {
                    rotateScript.End();
                    modus = Modi.NAV_SEL;
                }
                else if (modus == Modi.SCA)
                {
                    scaleScript.End();
                    modus = Modi.NAV_SEL;
                }
                else if (modus == Modi.STA)
                {
                    stackScript.End();
                    modus = Modi.NAV_SEL;
                }
            }
            else
            {
                minbuttonpulse = false;
            }

            if (wiimote_getButtonPlus(0))
            {
                if (modus == Modi.NAV_SEL)
                {
                    if (topview)
                    {
                        if (selectieScript.lastGameObjectHit != null && selectieScript.lastGameObjectHit.tag == "vloer")
                        {
                            moveToSelectedRoom = true;
                            returnToCamShowAfterManipulation = false;
                            topview = false;
                        }

                        else if (selectieScript.lastGameObjectHit != null && selectieScript.lastGameObjectHit.tag != "vloer")
                        {
                            moveToSelectedRoom = false;
                            returnToCamShowAfterManipulation = true;
                            topview = true;
                        }

                        else if (selectieScript.lastGameObjectHit == null)
                        {
                            returnToCamShowAfterManipulation = false;
                            moveToSelectedRoom = false;
                            topview            = true;
                        }
                    }
                }
                if (modus == Modi.SCA && !plusbuttonpulse)
                {
                    plusbuttonpulse = true;
                    scaleScript.releaseLock();
                    scaleScript.volgendeAs();
                }
            }
            else
            {
                plusbuttonpulse = false;
            }

            if (wiimote_getButtonHome(0) && !homebuttonpulse)              //Abort all
            {
                homebuttonpulse = true;
                Debug.Log("Abort");
                rotateScript.End();
                scaleScript.End();
                stackScript.Abort();
                moveScript.End();
                smoothCameraScript.GaNaarVorigePositie();
                modus = Modi.NAV_SEL;
                selectieScript.hideUI();
                selectieScript.GUIShown = false;
                topview = false;
            }
            else
            {
                homebuttonpulse = false;
            }

            if (wiimote_getButton1(0) && !button1pulse)              //Wisselen van camhoek
            {
                button1pulse = true;
                if (modus == Modi.NAV_SEL)
                {
                    smoothCameraScript.getNextCameraLokatie();
                }
            }
            else
            {
                button1pulse = false;
            }

            if (wiimote_getButton2(0) && !button1pulse)              //Wisselen van camhoek
            {
                button2pulse = true;
                if (modus == Modi.NAV_SEL)
                {
                    smoothCameraScript.getVorigCameraLokatie();
                }
            }
            else
            {
                button2pulse = false;
            }

            if (wiimote_getButtonLeft(0))
            {
                padbuttonpulse = true;
                if (modus == Modi.NAV_SEL)
                {
                    moveCameraLeft();
                }
                else if (modus == Modi.MOV)
                {
                    if (moveScript.gridModus)
                    {
                        moveScript.goToNextAvailablePositionLeft();
                    }
                    else
                    {
                        moveScript.goToLeft();
                    }
                }
                else if (modus == Modi.ROT)
                {
                    rotateScript.RotateLeft();
                }
                else if (modus == Modi.STA)
                {
                    if (stackScript.isActive)
                    {
                        if (stackScript.gridModus)
                        {
                            stackScript.goToNextAvailablePositionLeft();
                        }
                        else
                        {
                            stackScript.goToLeft();
                        }
                    }
                }
            }
            else if (wiimote_getButtonRight(0))
            {
                padbuttonpulse = true;
                if (modus == Modi.NAV_SEL)
                {
                    moveCameraRight();
                }
                else if (modus == Modi.MOV)
                {
                    if (moveScript.gridModus)
                    {
                        moveScript.goToNextAvailablePositionRight();
                    }
                    else
                    {
                        moveScript.goToRight();
                    }
                }
                else if (modus == Modi.ROT)
                {
                    rotateScript.RotateRight();
                }
                else if (modus == Modi.STA)
                {
                    if (stackScript.isActive)
                    {
                        if (stackScript.gridModus)
                        {
                            stackScript.goToNextAvailablePositionRight();
                        }
                        else
                        {
                            stackScript.goToRight();
                        }
                    }
                }
            }
            else if (wiimote_getButtonUp(0))
            {
                padbuttonpulse = true;
                if (modus == Modi.NAV_SEL && !topview)
                {
                    moveCameraForward();
                }
                else if (modus == Modi.MOV)
                {
                    if (moveScript.gridModus)
                    {
                        moveScript.goToNextAvailablePositionTop();
                    }
                    else
                    {
                        moveScript.goToTop();
                    }
                }
                else if (modus == Modi.STA)
                {
                    if (stackScript.isActive)
                    {
                        if (stackScript.gridModus)
                        {
                            stackScript.goToNextAvailablePositionTop();
                        }
                        else
                        {
                            stackScript.goToTop();
                        }
                    }
                }
            }
            else if (wiimote_getButtonDown(0))
            {
                padbuttonpulse = true;
                if (modus == Modi.NAV_SEL && !topview)
                {
                    moveCameraBackward();
                }
                else if (modus == Modi.MOV)
                {
                    if (moveScript.gridModus)
                    {
                        moveScript.goToNextAvailablePositionDown();
                    }
                    else
                    {
                        moveScript.goToBottom();
                    }
                }
                else if (modus == Modi.STA)
                {
                    if (stackScript.isActive)
                    {
                        if (stackScript.gridModus)
                        {
                            stackScript.goToNextAvailablePositionDown();
                        }
                        else
                        {
                            stackScript.goToBottom();
                        }
                    }
                }
            }
            else
            {
                padbuttonpulse = false;
            }

            //TODO: roll moet 0.5 sec ingehouden worden voordat deze reageert
            //Dus: functie aanroepen die 0.5 sec telt en dan pas bool op false zet
            if (!checkRollOutOfBounds())
            {
                Debug.Log("Roll in bounds");
                if (roll <= -20)                                         //Wiimote links kantelen
                {
                    if (modus == Modi.NAV_SEL && !topview && !rollpulse) //In navigatie
                    {
                        rollpulse = true;
                        rotateCameraLeft90Degrees();
                    }
                    else if (modus == Modi.ROT)
                    {
                        rotateScript.RotateLeft();
                    }
                    else if (modus == Modi.STA && !rollpulse)
                    {
                        rollpulse = true;
                        if (stackScript.isActive)
                        {
                            stackScript.goToNextPossibleStackedObject();
                        }
                    }
                    else if (modus == Modi.CHO_MAN && !rollpulse)
                    {
                        rollpulse = true;
                        selectieScript.getNextChild();
                    }
                }
                else if (roll >= 120)                   //Wiimote rechts kantelen
                {
                    if (modus == Modi.NAV_SEL && !topview && !rollpulse)
                    {
                        rollpulse = true;
                        rotateCameraRight90Degrees();
                    }
                    else if (modus == Modi.ROT)
                    {
                        rotateScript.RotateRight();
                    }
                    else if (modus == Modi.STA && !rollpulse)
                    {
                        rollpulse = true;
                        if (stackScript.isActive)
                        {
                            stackScript.goToNextPossibleStackedObject();
                        }
                    }
                }
                else
                {
                    rollpulse = false;
                }
            }

            //Pitch gebruiken voor schaleren
            if (!checkPitchOutOfBounds())
            {
                Debug.Log("Pitch in bounds");
                if (pitch <= -30)                  //Wiimote licht recht houden
                {
                    if (modus == Modi.SCA)
                    {
                        scaleScript.ScaleGroter();
                    }
                }
                else if (pitch >= 100)                     //TESTEN!
                {
                    if (modus == Modi.SCA)
                    {
                        scaleScript.ScaleKleiner();
                    }
                }

                if (pitch <= -70 && !topview)
                {
                    if (modus == Modi.NAV_SEL && checkRollOutOfBounds())
                    {
                        smoothCameraScript.GaNaarTopView();
                        topview = true;
                    }
                }
            }

            //Laatste check om te zien of selectiemode aan of uit moet (anders ingewikkeld in overzetten)
            //Reden: nu per key -> dan naar navigatie gemapt wegens wiimote - issues
            if (modus == Modi.NAV_SEL || modus == Modi.CHO_MAN)
            {
                selectieScript.setSelectionmodeOn();
            }
            else
            {
                selectieScript.setSelectionmodeOff();
                selectieScript.guiscript.hideGui();
            }
        }

        //Debug
        if (showDebugGUI)
        {
            DoDebugStr(0);
        }
    }
예제 #2
0
    // Update is called once per frame
    void Update()
    {
        //Laat hier temp staan OVERGEZET
        selectieScript.updateSelection(Input.mousePosition.x, Input.mousePosition.y);
        smoothCameraScript.UpdateCamera();

        //check of we een nieuwe kamer geselecteerd hebben vanuit topview en navigeer daarnaar
        /* OVERZETTEN */
        if (moveToSelectedRoom)
        {
            smoothCameraScript.goToRoom(selectieScript.lastGameObjectHit.transform.position);
            modus = Modi.NAV_SEL;
        }

        /*OVERGEZET*/
        // aborting modus
        if (Input.GetKeyUp("q"))
        {
            Debug.Log("Abort");
            rotateScript.End();
            scaleScript.End();
            stackScript.Abort();
            moveScript.End();

            if (returnToCamShowAfterManipulation)
            {
                modus = Modi.CAM_SHO;
            }
            else
            {
                smoothCameraScript.GaNaarVorigePositie();
                modus = Modi.NAV_SEL;
            }

            deselectAll();
        }
        // go to moving/changing parent modus
        else if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN && Input.GetButtonUp("Fire1"))
        {
            Debug.Log(selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y));
            if (selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y) == "Move")
            {
                Debug.Log("Move change parent");
                rotateScript.End();
                scaleScript.End();
                stackScript.End();

                modus = Modi.MOV;
                moveScript.Begin(selectieScript.lastGameObjectHit);
            }
            else if (selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y) == "Rotate")
            {
                Debug.Log("rotate");
                scaleScript.End();
                stackScript.End();
                moveScript.End();
                smoothCameraScript.GaNaarVorigePositie();

                modus = Modi.ROT;
                rotateScript.Begin(selectieScript.lastGameObjectHit);
            }
            else if (selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y) == "Add")
            {
                Debug.Log("stack");
                rotateScript.End();
                scaleScript.End();
                moveScript.End();

                modus = Modi.STA;
                stackScript.Begin(selectieScript.lastGameObjectHit);
            }
            else if (selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y) == "Delete")
            {
                Debug.Log("remove");
                rotateScript.End();
                scaleScript.End();
                stackScript.End();
                moveScript.End();

                modus = Modi.DEL;
            }
            else if (selectieScript.getButtonOnPosition(Input.mousePosition.x, Input.mousePosition.y) == "Scale")
            {
                Debug.Log("scale");
                rotateScript.End();
                stackScript.End();
                moveScript.End();
                smoothCameraScript.GaNaarVorigePositie();

                modus = Modi.SCA;
                scaleScript.Begin(selectieScript.lastGameObjectHit);
            }
            // go to scale modus
        }
        else if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN && Input.GetKeyUp("e"))
        {
            Debug.Log("scale");
            rotateScript.End();
            stackScript.End();
            moveScript.End();
            smoothCameraScript.GaNaarVorigePositie();

            modus = Modi.SCA;
            scaleScript.Begin(selectieScript.lastGameObjectHit);
            // go to rotate modus
        }
        else if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN && Input.GetKeyUp("r"))
        {
            Debug.Log("rotate");
            scaleScript.End();
            stackScript.End();
            moveScript.End();
            smoothCameraScript.GaNaarVorigePositie();

            modus = Modi.ROT;
            rotateScript.Begin(selectieScript.lastGameObjectHit);
            // go to stacking modus
        }
        else if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN && Input.GetKeyUp("t"))
        {
            Debug.Log("stack");
            rotateScript.End();
            scaleScript.End();
            moveScript.End();

            modus = Modi.STA;
            stackScript.Begin(selectieScript.lastGameObjectHit);
            // go to removing status
        }
        else if (selectieScript.lastGameObjectHit && modus == Modi.CHO_MAN && Input.GetKeyUp("y"))
        {
            Debug.Log("remove");
            rotateScript.End();
            scaleScript.End();
            stackScript.End();
            moveScript.End();

            modus = Modi.DEL;
            // go to slideshow modus
        }
        else if (Input.GetKeyUp("u"))
        {
            Debug.Log("slideshow");
            rotateScript.End();
            scaleScript.End();
            stackScript.End();
            moveScript.End();

            deselectAll();
            smoothCameraScript.getNextCameraLokatie();
            modus = Modi.CAM_SHO;
        }

        //Select an object
        if (modus == Modi.CHO_MAN || modus == Modi.NAV_SEL)
        {
            if (selectieScript.isActive && Input.GetButtonUp("Fire1"))
            {
                if (selectieScript.GUIShown)
                {
                    selectieScript.hideUI();
                    selectieScript.GUIShown = false;
                    modus = Modi.NAV_SEL;
                }
                else
                {
                    ObjectScript script  = (ObjectScript)selectieScript.lastGameObjectHit.GetComponent("ObjectScript");
                    string[]     choices = { "Geen keuzes" };              //wordt overreden indien niet null
                    if (script != null)
                    {
                        choices = script.getObjectPossibilities();
                    }
                    selectieScript.showUi(Input.mousePosition.x, Input.mousePosition.y, choices);
                    selectieScript.GUIShown = true;
                    modus = Modi.CHO_MAN;
                }
            }

            /*
             * selectieScript.fireEvent = true; //Vuur een clickevent af in selectie
             * //TODO: if object selected?
             * if(selectieScript.lastGameObjectHit != null){
             *      Debug.Log("Naar manipulatiemode");
             *      modus = Modi.CHO_MAN;
             *      }*/
        }

        //DEEL PER DEEL DOEN -> KNOP PER KNOP IN WIIMOTE | STAAT "DONE" NA UPDATEFUNCT. INDIEN GEIMPLEMENTEERD
        switch (modus)
        {
        case Modi.NAV_SEL:                 /* DONE  */
            selectieScript.setSelectionmodeOn();
            updateNavigation();
            break;

        case Modi.CHO_MAN:                 /* DONE  */
            selectieScript.setSelectionmodeOn();
            updateManipulationChoosing();
            break;

        case Modi.MOV:                 /* DONE - TOTEST */
            selectieScript.setSelectionmodeOff();
            updateMovingManipulation();
            selectieScript.guiscript.hideGui();
            break;

        case Modi.ROT:                 /* DONE - TOTEST */
            selectieScript.setSelectionmodeOff();
            updateRotatingManipulation();
            selectieScript.guiscript.hideGui();
            break;

        case Modi.SCA:                 /* DONE - TOTEST */
            selectieScript.setSelectionmodeOff();
            updateScalingManipulation();
            selectieScript.guiscript.hideGui();
            break;

        case Modi.STA:                 /* DONE - TOTEST */
            selectieScript.setSelectionmodeOff();
            updateStackingManipulation();
            selectieScript.guiscript.hideGui();
            break;

        case Modi.DEL:                 /* DONE - TOTEST */
            selectieScript.setSelectionmodeOff();
            updateDeletingManipulation();
            selectieScript.guiscript.hideGui();
            break;

        case Modi.CAM_SHO:                 /* DONE |MERGED WITH NAV_SEL | TOTEST */
            //selectieScript.setSelectionmodeOn();
            updateCameraShow();
            //selectieScript.guiscript.hideGui();
            break;
        }

        //Set the gui shizzle
        Vector3 mousePos = Input.mousePosition;
        float   mouseX   = mousePos.x / Screen.width;
        float   mouseY   = mousePos.y / Screen.height;

        screenpointer.transform.position = new Vector3(mouseX, mouseY, 0);
        Rect cursloc = new Rect(mousePos.x, Screen.height - mousePos.y, cursorImage.width, cursorImage.height);
    }