Esempio n. 1
0
    private void UpdatePicking()
    {
        if (Input.GetKeyDown(KeyCode.P))
        {
            enablePicking = !enablePicking;
        }

        if (enablePicking && hasFocus && !MouseNavBase.MouseOnUI())
        {
            if (Input.GetMouseButtonDown(0))
            {
                lastMouse     = Input.mousePosition;
                mouseIntegral = Vector3.zero;
            }
            else if (Input.GetMouseButton(0) && lastMouse.HasValue)
            {
                var mouseDiff = Input.mousePosition - lastMouse.Value;
                mouseIntegral.x += Mathf.Abs(mouseDiff.x);
                mouseIntegral.y += Mathf.Abs(mouseDiff.y);
                lastMouse        = Input.mousePosition;
            }
            else if (lastMouse.HasValue && mouseIntegral == Vector2.zero)
            {
                OnClick(Input.mousePosition);
                lastMouse = null;
            }
        }
        else
        {
            lastMouse = null;
        }

        //scale pointer to pointerRadiusPixels
        if (pointerActive)
        {
            var cam            = Camera.main.transform;
            var w2cScale       = cam.worldToLocalMatrix.lossyScale;
            var minScale       = Mathf.Min(w2cScale.x, w2cScale.y, w2cScale.z);
            var vfov           = Camera.main.fieldOfView * Mathf.Deg2Rad;
            var hfov           = vfov * Camera.main.aspect;
            var maxRadPerPixel = Mathf.Max(vfov / Screen.height, hfov / Screen.width);
            pointer.transform.localScale = (1.0f / minScale) * Vector3.one *
                                           Vector3.Distance(pointer.transform.position, cam.position) *
                                           Mathf.Tan(pointerRadiusPixels * maxRadPerPixel);
        }
    }
Esempio n. 2
0
    private void UpdateNav()
    {
        MouseNavBase activeNav = null;

        if (mouseFly != null && mouseFly.enabled)
        {
            activeNav = mouseFly;
            builder.Append("\nfly navigation");
            if (mouseOrbit != null)
            {
                builder.Append(", press n to switch to orbit");
            }
            builder.Append("\nw/s/a/d/q/e to translate fwd/back/left/right/up/down");
        }
        else if (mouseOrbit != null && mouseOrbit.enabled)
        {
            activeNav = mouseOrbit;
            builder.Append("\norbit navigation");
            if (mouseFly != null)
            {
                builder.Append(", press n to switch to fly");
            }
            builder.Append("\npress c to rotate about ");
            builder.Append(pointerActive ? "pick point" : "centroid");
        }

        if (activeNav != null)
        {
            builder.Append("\ndrag mouse to rotate");
            builder.Append("\nmouse wheel to scale");
            if (activeNav.scaleModifier != MouseNavBase.Modifier.None)
            {
                builder.Append(" (or " + activeNav.scaleModifier + "-drag)");
            }
            builder.Append("\nright mouse to roll");
            if (activeNav.rollModifier != MouseNavBase.Modifier.None)
            {
                builder.Append(" (or " + activeNav.rollModifier + "-drag)");
            }
            if (activeNav.accelModifier != MouseNavBase.Modifier.None)
            {
                builder.Append("\npress " + activeNav.accelModifier + " to move faster");
            }
        }

        //toggle nav mode
        if (mouseFly != null && mouseOrbit != null && Input.GetKeyDown(KeyCode.N))
        {
            mouseFly.enabled   = !mouseFly.enabled;
            mouseOrbit.enabled = !mouseOrbit.enabled;

            if (mouseOrbit.enabled && resetOrbitPivotOnNavChange)
            {
                if (Physics.Raycast(Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2)),
                                    out RaycastHit hit))
                {
                    mouseOrbit.pivot = hit.point;
                }
                else if (tileset && tileset.Ready())
                {
                    mouseOrbit.pivot = tileset.transform.TransformPoint(tileset.BoundingSphere().position);
                }
            }
        }

        //set orbit nav pivot
        if (activeNav != null && activeNav == mouseOrbit && Input.GetKeyDown(KeyCode.C))
        {
            if (pointerActive)
            {
                mouseOrbit.pivot = pointer.transform.position;
            }
            else if (tileset && tileset.Ready())
            {
                mouseOrbit.pivot = tileset.transform.TransformPoint(tileset.BoundingSphere().position);
            }
        }
    }
Esempio n. 3
0
    private void UpdateNav()
    {
        MouseNavBase activeNav = null;

        if (mouseFly != null && mouseFly.enabled)
        {
            activeNav = mouseFly;
            builder.Append("\nfly navigation");
            if (mouseOrbit != null)
            {
                builder.Append(", press n to switch to orbit");
            }
            builder.Append("\nw/s/a/d/q/e to translate fwd/back/left/right/up/down");
        }
        else if (mouseOrbit != null && mouseOrbit.enabled)
        {
            activeNav = mouseOrbit;
            builder.Append("\norbit navigation");
            if (mouseFly != null)
            {
                builder.Append(", press n to switch to fly");
            }
            builder.Append("\npress c to rotate about ");
            builder.Append(pointerActive ? "pick point" : "centroid");
        }

        if (activeNav != null)
        {
            builder.Append("\ndrag mouse to rotate");
            builder.Append("\nmouse wheel to scale");
            if (activeNav.scaleModifier != MouseNavBase.Modifier.None)
            {
                builder.Append(" (or " + activeNav.scaleModifier + "-drag)");
            }
            if (!activeNav.lockRoll)
            {
                builder.Append("\nright mouse to roll");
                if (activeNav.rollModifier != MouseNavBase.Modifier.None)
                {
                    builder.Append(" (or " + activeNav.rollModifier + "-drag)");
                }
                builder.Append(", press l to lock");
            }
            else
            {
                builder.Append("\nroll locked, press l to unlock");
            }
            if (activeNav.accelModifier != MouseNavBase.Modifier.None)
            {
                builder.Append("\npress " + activeNav.accelModifier + " to move faster");
            }

            if (Input.GetKeyDown(KeyCode.L))
            {
                activeNav.lockRoll = !activeNav.lockRoll;
            }
        }

        //toggle nav mode
        if (mouseFly != null && mouseOrbit != null && Input.GetKeyDown(KeyCode.N))
        {
            mouseFly.enabled   = !mouseFly.enabled;
            mouseOrbit.enabled = !mouseOrbit.enabled;

            if (mouseOrbit.enabled && resetOrbitPivotOnNavChange)
            {
                if (Physics.Raycast(Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2)),
                                    out RaycastHit hit))
                {
                    mouseOrbit.pivot = hit.point;
                }
                else if (tileset && tileset.Ready())
                {
                    mouseOrbit.pivot = tileset.transform.TransformPoint(NonSkyBounds().position);
                }
            }
        }

        //set orbit nav pivot
        if (activeNav != null && activeNav == mouseOrbit && Input.GetKeyDown(KeyCode.C))
        {
            if (pointerActive)
            {
                mouseOrbit.pivot = pointer.transform.position;
            }
            else if (tileset && tileset.Ready())
            {
                mouseOrbit.pivot = tileset.transform.TransformPoint(NonSkyBounds().position);
            }
        }

        //tweak trans speed
        float ts = mouseFly != null ? mouseFly.transSpeed : mouseOrbit != null ? mouseOrbit.transSpeed : -1;

        if (ts >= 0)
        {
            builder.Append($"\ntrans speed {ts:f5} press [ slower, ] faster");
            float transAdj = 0.0001f;
            if (Input.GetKey(KeyCode.LeftBracket))
            {
                if (mouseOrbit != null)
                {
                    mouseOrbit.transSpeed = (float)Math.Max(0.001, mouseOrbit.transSpeed - transAdj);
                }
                if (mouseFly != null)
                {
                    mouseFly.transSpeed = (float)Math.Max(0.001, mouseFly.transSpeed - transAdj);
                }
            }
            if (Input.GetKey(KeyCode.RightBracket))
            {
                if (mouseOrbit != null)
                {
                    mouseOrbit.transSpeed = mouseOrbit.transSpeed + transAdj;
                }
                if (mouseFly != null)
                {
                    mouseFly.transSpeed = mouseFly.transSpeed + transAdj;
                }
            }
        }
    }