private void Update() { if (Input.GetKeyDown(KeyCode.F) && !inFullSlomo) { DoStasis(); } //if an object is in stasis, release it if necessary. if (lastObject) { //square magnitude check for distance because its faster than magnitude. if (Input.GetKeyDown(KeyCode.R) || (transform.position - lastObject.transform.position).sqrMagnitude > sqrRange) { lastObject.SetStasis(false); lastObject = null; } //test adding a force to the object in stasis. if (Input.GetMouseButtonDown(1)) { //test if (Physics.Raycast(pivot.position, pivot.forward, out RaycastHit hit, range, mask)) { if (hit.transform.TryGetComponent <StasisObject>(out StasisObject so)) { if (lastObject == so) { so.AddImpulse(pivot.forward); } } } } } }
IEnumerator CheckForStasisObject(Coroutine slomoRoutine) { float startTime = Time.unscaledTime; while (Time.unscaledTime - startTime < 5) //max 5 seconds { if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(pivot.position, pivot.forward, out RaycastHit hit, range, mask)) { if (hit.transform.TryGetComponent <StasisObject>(out StasisObject so)) { if (lastObject) { lastObject.SetStasis(false); } so.SetStasis(true); //Debug.Log("Set Stasis", so); lastObject = so; break; } } } yield return(null); } if (!inFullSlomo) { StopCoroutine(slomoRoutine); } inFullSlomo = false; var c = slomoOverlay.color; c.a = 0; slomoOverlay.color = c; Time.timeScale = 1f; }