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; } } }
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; }
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); }
/// <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(); }
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 }