示例#1
0
        override public void Init()
        {
            base.Init();

            m_BaseScale          = transform.localScale;
            m_BoundsState        = BoundsState.Off;
            m_BoundsShowAmount   = 0.0f;
            m_CurrentState       = ToolState.Off;
            m_EnterAmount        = 0.0f;
            m_TeleportFadeState  = TeleportFadeState.Default;
            m_TeleportFadeAmount = 0.0f;

            m_TeleportParabola = GetComponent <LineRenderer>();
            m_TeleportParabola.positionCount = m_TeleportParabolaPoints;
            for (int i = 0; i < m_TeleportParabolaPoints; ++i)
            {
                m_TeleportParabola.SetPosition(i, Vector3.zero);
            }
            m_TeleportParabola.material.SetColor("_EmissionColor", Color.black * 15.0f);
            m_TeleportParabola.enabled = false;

            LineRenderer rBadIconLine = m_BadTeleportIcon.GetComponentInChildren <LineRenderer>();

            rBadIconLine.material.SetColor("_EmissionColor", Color.red * 15.0f);

            m_TeleportPlaceIconBaseScale = m_TeleportPlaceIcon.localScale;
        }
示例#2
0
        override public void UpdateTool()
        {
            base.UpdateTool();

            Transform rAttachPoint = InputManager.m_Instance.GetBrushControllerAttachPoint();

            if (m_LockToController)
            {
                m_LastParabolaRay.origin             = rAttachPoint.position;
                m_LastParabolaRay.direction          = rAttachPoint.forward;
                m_BadTeleportIcon.transform.position = rAttachPoint.position;
                m_BadTeleportIcon.transform.rotation = rAttachPoint.rotation;
            }
            else
            {
                m_LastParabolaRay = ViewpointScript.Gaze;
            }

            bool bAimValid = m_LastParabolaRay.direction.y < m_TeleportParabolaMaxY;

            if (m_TeleportFadeState != TeleportFadeState.FadingToBlack)
            {
                bool visible = bAimValid;
                if (bAimValid)
                {
                    bool canPlaceParabola = UpdateTool_PlaceParabola();
                    visible = canPlaceParabola;
                }
                else
                {
                    visible = false;
                }
                SetBoundsVisibility(visible);
            }

            // Update hide parabola counter.
            if (!m_HideValidTeleportParabola)
            {
                m_TeleportParabolaFadeAmount += m_BoundsEnterSpeed * Time.deltaTime;
                m_TeleportParabolaFadeAmount  = Mathf.Min(m_TeleportParabolaFadeAmount, 1.0f);
            }
            else
            {
                m_TeleportParabolaFadeAmount -= m_BoundsEnterSpeed * Time.deltaTime;
                m_TeleportParabolaFadeAmount  = Mathf.Max(m_TeleportParabolaFadeAmount, 0.0f);
            }

            // Update bad teleport icon scale and visibility.
            bool bShowBadTeleport = !bAimValid;

            if (bShowBadTeleport)
            {
                if (m_BadTeleportIconEnterAmount < 1.0f)
                {
                    m_BadTeleportIconEnterAmount          += m_BoundsEnterSpeed * Time.deltaTime;
                    m_BadTeleportIconEnterAmount           = Mathf.Min(m_BadTeleportIconEnterAmount, 1.0f);
                    m_BadTeleportIcon.transform.localScale = new Vector3(m_BadTeleportIconEnterAmount,
                                                                         m_BadTeleportIconEnterAmount, m_BadTeleportIconEnterAmount);
                }
            }
            else
            {
                if (m_BadTeleportIconEnterAmount > 0.0f)
                {
                    m_BadTeleportIconEnterAmount          -= m_BoundsEnterSpeed * Time.deltaTime;
                    m_BadTeleportIconEnterAmount           = Mathf.Max(m_BadTeleportIconEnterAmount, 0.0f);
                    m_BadTeleportIcon.transform.localScale = new Vector3(m_BadTeleportIconEnterAmount,
                                                                         m_BadTeleportIconEnterAmount, m_BadTeleportIconEnterAmount);
                }
            }
            m_BadTeleportIcon.gameObject.SetActive(m_BadTeleportIconEnterAmount > 0.0f);

            // Update teleport fade.
            if (m_TeleportFadeState != TeleportFadeState.Default)
            {
                if (m_TeleportFadeState == TeleportFadeState.FadingToBlack)
                {
                    m_TeleportFadeAmount += m_TeleportFadeSpeed * Time.deltaTime;
                    if (m_TeleportFadeAmount >= 1.0f)
                    {
                        // Teleport the user
                        Vector3 vMovement = m_TeleportBoundsCurrent.transform.position -
                                            m_TeleportBoundsDesired.transform.position;

                        TrTransform newScene = App.Scene.Pose;
                        newScene.translation += vMovement;
                        // newScene might have gotten just a little bit invalid.
                        // Enforce the invariant that teleport always sends you
                        // to a scene which is MakeValidPose(scene)
                        newScene       = SketchControlsScript.MakeValidScenePose(newScene, BoundsRadius);
                        App.Scene.Pose = newScene;

                        m_TeleportFadeAmount = 1.0f;
                        m_TeleportFadeState  = TeleportFadeState.FadeToScene;
                        ViewpointScript.m_Instance.FadeToScene(m_TeleportFadeSpeed);
                        m_TeleportForceBoundsPosition = true;
                    }
                }
                else if (m_TeleportFadeState == TeleportFadeState.FadeToScene)
                {
                    m_TeleportFadeAmount -= m_TeleportFadeSpeed * Time.deltaTime;
                    if (m_TeleportFadeAmount <= 0.0f)
                    {
                        // Done fading.
                        m_TeleportFadeAmount = 0.0f;
                        m_TeleportFadeState  = TeleportFadeState.Default;
                    }
                }
            }

            // Check for teleporting.
            if (!m_EatInput && !m_ToolHidden && CanTeleport() &&
                InputManager.m_Instance.GetCommandDown(InputManager.SketchCommands.Teleport))
            {
                m_TeleportFadeState = TeleportFadeState.FadingToBlack;
                ViewpointScript.m_Instance.FadeToColor(Color.black, m_TeleportFadeSpeed);
                AudioManager.m_Instance.PlayTeleportSound(
                    ViewpointScript.Head.position + ViewpointScript.Head.forward);
            }

            PointerManager.m_Instance.SetMainPointerPosition(rAttachPoint.position);
        }