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