示例#1
0
 void SetBoundsVisibility(bool bShow)
 {
     if (!bShow)
     {
         if (m_BoundsState == BoundsState.FadingIn || m_BoundsState == BoundsState.Showing)
         {
             m_BoundsState = BoundsState.FadingOut;
         }
         else if (m_BoundsState == BoundsState.FadingInDelay)
         {
             m_BoundsState = BoundsState.Off;
         }
     }
     else
     {
         if (m_BoundsState == BoundsState.FadingOut)
         {
             m_BoundsState = BoundsState.FadingIn;
         }
         else if (m_BoundsState == BoundsState.Off)
         {
             m_BoundsState = BoundsState.FadingInDelay;
             m_BoundsEnterDelayCountdown = m_BoundsEnterDelay;
         }
     }
 }
示例#2
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;
        }
示例#3
0
        override public void EnableTool(bool bEnable)
        {
            base.EnableTool(bEnable);

            // Initialize to zeroed out.
            m_EnterAmount = 0.0f;
            UpdateToolScale();
#if JOGGING_ENABLED
            m_JogLastHeadPosition = Vector3.zero;
#endif

            // Bounds need to be active, place icon should default to off.
            m_TeleportBounds.gameObject.SetActive(bEnable);
            m_TeleportPlaceIcon.gameObject.SetActive(false);

            // Eat up some input when we're enabled.
            if (bEnable)
            {
                m_LockToController = m_SketchSurface.IsInFreePaintMode();
                if (m_LockToController)
                {
                    m_BrushController = InputManager.m_Instance.GetController(InputManager.ControllerName.Brush);
                }

                // Build out our play area mesh.
                m_TeleportBoundsCurrent.BuildBounds();
                m_TeleportBoundsDesired.BuildBounds();

                EatInput();
                m_BoundsState      = BoundsState.Off;
                m_BoundsShowAmount = 0.0f;
                UpdateBoundsScale(m_BoundsShowAmount);
                UpdateIconScale();

                m_CurrentState = ToolState.Enter;
            }
            else
            {
                m_CurrentState = ToolState.Off;
            }

            // Make sure our UI reticle isn't active.
            SketchControlsScript.m_Instance.ForceShowUIReticle(false);

            SetBoundsVisibility(false);
            m_BadTeleportIconEnterAmount = 0.0f;
            m_BadTeleportIcon.gameObject.SetActive(false);
        }
示例#4
0
    /// <summary>
    /// Toggle visibility of diagnostics board.
    /// </summary>
    private void ToggleBounds(GameObject button)
    {
        if (BState == BoundsState.off)
        {
            BState = BoundsState.mesh;
            EFP.GetComponent <EFPDriver>().MeshBoundsVis = true;
        }
        else if (BState == BoundsState.mesh)
        {
            BState = BoundsState.voxels;
            EFP.GetComponent <EFPDriver>().MeshBoundsVis = false;
            EFP.GetComponent <EFPDriver>().VoxVis        = true;
        }
        else
        {
            BState = BoundsState.off;
            EFP.GetComponent <EFPDriver>().VoxVis = false;
        }

        UpdateBoundsLabel();
    }
示例#5
0
        void Update()
        {
            // Update bounds transitions.
            switch (m_BoundsState)
            {
            case BoundsState.FadingInDelay:
                m_BoundsEnterDelayCountdown -= Time.deltaTime;
                if (m_BoundsEnterDelayCountdown <= 0.0f)
                {
                    m_BoundsState = BoundsState.FadingIn;
                    m_TeleportPlaceIcon.gameObject.SetActive(true);
                    m_TeleportParabola.enabled = true;
                }
                m_BoundsShowAmount = 0.0f;
                UpdateBoundsScale(m_BoundsShowAmount);
                UpdateIconScale();
                SetTeleportParabola();
                break;

            case BoundsState.FadingIn:
                m_BoundsShowAmount += m_BoundsEnterSpeed * Time.deltaTime;
                if (m_BoundsShowAmount >= 1.0f)
                {
                    m_BoundsShowAmount = 1.0f;
                    m_BoundsState      = BoundsState.Showing;
                }
                UpdateBoundsScale(m_BoundsShowAmount);
                UpdateIconScale();
                SetTeleportParabola();
                break;

            case BoundsState.FadingOut:
                m_BoundsShowAmount -= m_BoundsEnterSpeed * Time.deltaTime;
                if (m_BoundsShowAmount <= 0.0f)
                {
                    m_BoundsShowAmount = 0.0f;
                    m_BoundsState      = BoundsState.Off;
                    m_TeleportPlaceIcon.gameObject.SetActive(false);
                    m_TeleportParabola.enabled  = false;
                    m_BoundsEnterDelayCountdown = m_BoundsEnterDelay;
                }
                UpdateBoundsScale(m_BoundsShowAmount);
                UpdateIconScale();
                SetTeleportParabola();
                break;
            }

            // Update tool transitions.
            switch (m_CurrentState)
            {
            case ToolState.Enter:
                m_EnterAmount += (m_EnterSpeed * Time.deltaTime);
                if (m_EnterAmount >= 1.0f)
                {
                    m_EnterAmount  = 1.0f;
                    m_CurrentState = ToolState.Active;
                }
                UpdateToolScale();
                break;

            case ToolState.Active:
                break;

            default:
            case ToolState.Off: break;
            }

            if (!m_LockToController)
            {
                // If we're not locking to a controller, update our transforms now, instead of in LateUpdate.
                UpdateTransformsFromControllers();
            }

#if JOGGING_ENABLED && (UNITY_EDITOR || EXPERIMENTAL_ENABLED)
            if (Config.IsExperimental)
            {
                // Add jogging motion.
                Vector3 currentHeadPosition = ViewpointScript.Head.position;
                if (m_JogLastHeadPosition != Vector3.zero)
                {
                    Vector3 headMotion = currentHeadPosition - m_JogLastHeadPosition;

                    TrTransform newScene     = Coords.ScenePose;
                    float       motionFactor = Vector3.Dot(headMotion, m_TeleportTargetVector);
                    motionFactor          = (motionFactor - m_MotionMinThreshhold) / (m_MotionMaxThreshhold - m_MotionMinThreshhold);
                    motionFactor          = Mathf.SmoothStep(0, 1, motionFactor) * (m_MotionMaxThreshhold - m_MotionMinThreshhold);
                    newScene.translation -= m_MotionSpeedup * motionFactor * m_TeleportTargetVector.normalized;

                    if (headMotion.y > m_JogMinThreshold)
                    {
                        m_JogStage = JogState.JoggingUp;
                    }
                    if (m_JogStage != JogState.NotJogging)
                    {
                        newScene.translation -= m_JogSpeed * m_TeleportTargetVector;
                        if (m_JogStage == JogState.JoggingUp && headMotion.y < 0)
                        {
                            m_JogStage = JogState.JoggingDown;
                        }
                        else if (m_JogStage == JogState.JoggingDown && headMotion.y >= 0)
                        {
                            m_JogStage = JogState.NotJogging;
                        }
                    }

                    // 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);
                    Coords.ScenePose = newScene;
                }
                m_JogLastHeadPosition = currentHeadPosition;
            }
#endif
        }