示例#1
0
        //!
        //! single touch ended (called by Mouse or Touch Input)
        //! @param      pos     screen position of pointer
        //!
        public void singlePointerEnded(Vector3 pos)
        {
            pointerDown = false;

            if (mainController.ActiveMode == MainController.Mode.lightSettingsMode && editingLight)
            {
                if (!mainController.liveMode)
                {
                    mainController.sendUpdateToServer();
                }
                undoRedoController.addAction();
                editingLight = false;
                return;
            }

            if (!pause)
            {             //pause is active when avaoiding double interactions
                if (!pointerOnGUI())
                {
                    //oneForAll mode
                    if (mainController.ActiveMode == MainController.Mode.oneForAllMode)
                    {
                        undoRedoController.addAction();
                        hitPositionBuffer = nullVector;
                        return;
                    }

                    //pointToMove active
                    if (mainController.ActiveMode == MainController.Mode.pointToMoveMode ||
                        mainController.ActiveMode == MainController.Mode.pointShootTranslation)
                    {
                        mainController.hidePointToMoveIdentifier(objectRaycast(pos, groundPlane));
                        return;
                    }

                    if (!(mainController.ActiveMode == MainController.Mode.translationMode ||
                          mainController.ActiveMode == MainController.Mode.rotationMode ||
                          mainController.ActiveMode == MainController.Mode.scaleMode ||
                          mainController.ActiveMode == MainController.Mode.animationEditing))
                    {
                        //selection mode is active
                        GameObject hitObject = cameraRaycast(pos, defaultLayermask);
                        if (hitObject)
                        {
                            //Object was hit
                            mainController.handleSelection(hitObject.transform);
                            hitObject = null;
                        }
                    }
                    else
                    {
                        //editing mode is active
                        if (pointerOnModifier)
                        {
                            pointerOnModifier = false;
                            mainController.resetModifiers();
                            hitPositionBuffer = nullVector;

                            if (mainController.AnimationController.isActive)
                            {
                                mainController.AnimationController.setKeyFrame();
                            }
                        }
                    }
                }
            }
            else
            {
                pause = false;
            }

            //reset variables
            lastTime          = float.NaN;
            pointerOnModifier = false;
        }
示例#2
0
        //!
        //! Update is called once per frame
        //!
        void Update()
        {
            if (lastPosition != target.position)
            {
                lastPosition = target.position;
                translationStillFrameCount = 0;
            }
            else if (translationStillFrameCount < 11)
            {
                translationStillFrameCount++;
            }
            if (lastRotation != target.rotation)
            {
                lastRotation            = target.rotation;
                rotationStillFrameCount = 0;
            }
            else if (rotationStillFrameCount < 11)
            {
                rotationStillFrameCount++;
            }
            if (translationStillFrameCount >= 10 && rotationStillFrameCount >= 10 && tempLock)
            {
                tempLock = false;
            }
            if (!locked && !tempLock)
            {
                //publish translation change
                if (mainController.liveMode)
                {
                    if (translationStillFrameCount == 0)                     //position just changed
                    {
                        if ((Time.time - lastTranslationUpdateTime) >= updateIntervall)
                        {
                            // serverAdapter.sendTranslation(target, target.position, !selected);
                            serverAdapter.sendTranslation(target, !selected);

                            serverAdapter.sendTransform(target, !selected);

                            lastTranslationUpdateTime = Time.time;
                            translationUpdateDelayed  = false;
                        }
                        else
                        {
                            translationUpdateDelayed = true;
                        }
                    }
                    else if (translationUpdateDelayed)                     //update delayed, but object not moving
                    {
                        // serverAdapter.sendTranslation(target, target.position, !selected);
                        serverAdapter.sendTranslation(target, !selected);

                        serverAdapter.sendTransform(target, !selected);

                        lastTranslationUpdateTime = Time.time;
                        translationUpdateDelayed  = false;
                    }
                }
                else if (translationStillFrameCount == 10)                 //object is now no longer moving
                {
                    // serverAdapter.sendTranslation(target, target.position, !selected);
                    serverAdapter.sendTranslation(target, !selected);

                    serverAdapter.sendTransform(target, !selected);
                }

                //publish rotation change
                if (mainController.liveMode)
                {
                    if (rotationStillFrameCount == 0)                     //position just changed
                    {
                        if ((Time.time - lastRotationUpdateTime) >= updateIntervall)
                        {
                            // serverAdapter.sendRotation(target, target.rotation, !selected);
                            serverAdapter.sendRotation(target, !selected);

                            serverAdapter.sendTransform(target, !selected);

                            lastRotationUpdateTime = Time.time;
                            rotationUpdateDelayed  = false;
                        }
                        else
                        {
                            rotationUpdateDelayed = true;
                        }
                    }
                    else if (rotationUpdateDelayed)                     //update delayed, but object not moving
                    {
                        //serverAdapter.sendRotation(target, target.rotation, !selected);
                        serverAdapter.sendRotation(target, !selected);


                        serverAdapter.sendTransform(target, !selected);

                        lastRotationUpdateTime = Time.time;
                        rotationUpdateDelayed  = false;
                    }
                }
                else if (rotationStillFrameCount == 10)                 //object is now no longer moving
                {
                    // serverAdapter.sendRotation(target, target.rotation, !selected);
                    serverAdapter.sendRotation(target, !selected);

                    serverAdapter.sendTransform(target, !selected);
                }
            }

            //turn on highlight modes
            if (selected && drawGlowAgain)
            {
                if (lightGeo)
                {
                    lightGeo.GetComponent <Renderer>().enabled = true;
                }
                else
                {
                    this.showHighlighted(this.gameObject);
                }
                drawGlowAgain = false;
            }

            //turn off highlight mode
            else if (!selected && !drawGlowAgain)
            {
                if (lightGeo)
                {
                    lightGeo.GetComponent <Renderer>().enabled = false;
                }
                else
                {
                    this.showNormal(this.gameObject);
                }
                drawGlowAgain = true;
            }

            //execute smooth translate
            if (smoothTranslationActive)
            {
                target.position = Vector3.Lerp(target.position, targetTranslation, Time.deltaTime * translationDamping);
                if (Vector3.Distance(target.position, targetTranslation) < 0.0001f)
                {
                    target.position = targetTranslation;
                    // HACK: to key pointToMove
                    //
                    //if ( mainController.UIAdapter.LayoutUI == layouts.ANIMATION )
                    //   animationController.setKeyFrame();
                    smoothTranslationActive = false;
                }
                if ((Time.time - smoothTranslateTime) > 3.0f)
                {
                    smoothTranslationActive = false;
                    // HACK: to key pointToMove
                    //
                    //if (mainController.UIAdapter.LayoutUI == layouts.ANIMATION)
                    //    animationController.setKeyFrame();
                    undoRedoController.addAction();
                }
            }
        }