protected override void DoEffect(PlayerController user) { GameManager.Instance.PauseRaw(true); BraveTime.RegisterTimeScaleMultiplier(0f, GameManager.Instance.gameObject); AkSoundEngine.PostEvent("Stop_SND_All", GameManager.Instance.gameObject); GameManager.Instance.StartCoroutine(OcarinaOfTime.HandleReturn(user)); AkSoundEngine.PostEvent("Play_UI_gameover_start_01", GameManager.Instance.gameObject); base.DoEffect(user); }
private static IEnumerator HandleReturn(PlayerController user) { Pixelator.Instance.DoFinalNonFadedLayer = true; if (user.CurrentGun) { user.CurrentGun.CeaseAttack(false, null); } user.CurrentInputState = PlayerInputState.NoInput; GameManager.Instance.MainCameraController.SetManualControl(true, false); Transform cameraTransform = GameManager.Instance.MainCameraController.transform; Vector3 cameraStartPosition = cameraTransform.position; Vector3 cameraEndPosition = user.CenterPosition; GameManager.Instance.MainCameraController.OverridePosition = cameraStartPosition; if (user.CurrentGun) { user.CurrentGun.DespawnVFX(); } yield return(null); if (user.CurrentGun) { user.CurrentGun.DespawnVFX(); } user.gameObject.SetLayerRecursively(LayerMask.NameToLayer("Unfaded")); GameUIRoot.Instance.ForceClearReload(user.PlayerIDX); GameUIRoot.Instance.notificationController.ForceHide(); float elapsed = 0f; float duration = 0.8f; tk2dBaseSprite spotlightSprite = ((GameObject)UnityEngine.Object.Instantiate(BraveResources.Load("DeathShadow", ".prefab"), user.specRigidbody.UnitCenter, Quaternion.identity)).GetComponent <tk2dBaseSprite>(); spotlightSprite.spriteAnimator.ignoreTimeScale = true; spotlightSprite.spriteAnimator.Play(); tk2dSpriteAnimator whooshAnimator = spotlightSprite.transform.GetChild(0).GetComponent <tk2dSpriteAnimator>(); whooshAnimator.ignoreTimeScale = true; whooshAnimator.Play(); Pixelator.Instance.CustomFade(0.6f, 0f, Color.white, Color.black, 0.1f, 0.5f); Pixelator.Instance.LerpToLetterbox(0.35f, 0.8f); BraveInput.AllowPausedRumble = true; user.DoVibration(Vibration.Time.Normal, Vibration.Strength.Hard); while (elapsed < duration) { if (GameManager.INVARIANT_DELTA_TIME == 0f) { elapsed += 0.05f; } elapsed += GameManager.INVARIANT_DELTA_TIME; float t = elapsed / duration; GameManager.Instance.MainCameraController.OverridePosition = Vector3.Lerp(cameraStartPosition, cameraEndPosition, t); user.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); spotlightSprite.color = new Color(1f, 1f, 1f, t); Pixelator.Instance.saturation = Mathf.Clamp01(1f - t); yield return(null); } spotlightSprite.color = Color.white; yield return(user.StartCoroutine(OcarinaOfTime.InvariantWait(user, 0.4f))); Transform clockhairTransform = ((GameObject)UnityEngine.Object.Instantiate(BraveResources.Load("Clockhair", ".prefab"))).transform; ClockhairController clockhair = clockhairTransform.GetComponent <ClockhairController>(); elapsed = 0f; duration = clockhair.ClockhairInDuration; Vector3 clockhairTargetPosition = user.CenterPosition; Vector3 clockhairStartPosition = clockhairTargetPosition + new Vector3(-20f, 5f, 0f); clockhair.renderer.enabled = false; clockhair.spriteAnimator.Play("clockhair_intro"); clockhair.hourAnimator.Play("hour_hand_intro"); clockhair.minuteAnimator.Play("minute_hand_intro"); clockhair.secondAnimator.Play("second_hand_intro"); bool hasWobbled = false; while (elapsed < duration) { if (GameManager.INVARIANT_DELTA_TIME == 0f) { elapsed += 0.05f; } elapsed += GameManager.INVARIANT_DELTA_TIME; float t2 = elapsed / duration; float smoothT = Mathf.SmoothStep(0f, 1f, t2); Vector3 currentPosition = Vector3.Slerp(clockhairStartPosition, clockhairTargetPosition, smoothT); clockhairTransform.position = currentPosition.WithZ(0f); if (t2 > 0.5f) { clockhair.renderer.enabled = true; clockhair.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); } if (t2 > 0.75f) { clockhair.hourAnimator.GetComponent <Renderer>().enabled = true; clockhair.minuteAnimator.GetComponent <Renderer>().enabled = true; clockhair.secondAnimator.GetComponent <Renderer>().enabled = true; clockhair.hourAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); clockhair.minuteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); clockhair.secondAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); } if (!hasWobbled && clockhair.spriteAnimator.CurrentFrame == clockhair.spriteAnimator.CurrentClip.frames.Length - 1) { clockhair.spriteAnimator.Play("clockhair_wobble"); hasWobbled = true; } clockhair.sprite.UpdateZDepth(); user.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); yield return(null); } if (!hasWobbled) { clockhair.spriteAnimator.Play("clockhair_wobble"); } clockhair.SpinToSessionStart(clockhair.ClockhairSpinDuration); elapsed = 0f; duration = clockhair.ClockhairSpinDuration + clockhair.ClockhairPauseBeforeShot; while (elapsed < duration) { if (GameManager.INVARIANT_DELTA_TIME == 0f) { elapsed += 0.05f; } elapsed += GameManager.INVARIANT_DELTA_TIME; clockhair.spriteAnimator.UpdateAnimation(GameManager.INVARIANT_DELTA_TIME); yield return(null); } clockhair.spriteAnimator.Play("clockhair_fire"); clockhair.hourAnimator.GetComponent <Renderer>().enabled = false; clockhair.minuteAnimator.GetComponent <Renderer>().enabled = false; clockhair.secondAnimator.GetComponent <Renderer>().enabled = false; Pixelator.Instance.FadeToBlack(0.5f, false, 0f); Pixelator.Instance.saturation = 1f; Pixelator.Instance.LerpToLetterbox(1f, 0.25f); UnityEngine.Object.Destroy(spotlightSprite.gameObject); Pixelator.Instance.DoFinalNonFadedLayer = false; user.CurrentInputState = PlayerInputState.AllInput; user.gameObject.SetLayerRecursively(LayerMask.NameToLayer("FG_Reflection")); GameManager.Instance.ForceUnpause(); GameManager.Instance.PreventPausing = false; user.healthHaver.IsVulnerable = true; user.healthHaver.TriggerInvulnerabilityPeriod(-1f); Pixelator.Instance.FadeToBlack(0.5f, false, 0f); GameUIRoot.Instance.ToggleUICamera(false); GameManager.Instance.SetNextLevelIndex(OcarinaOfTime.GetTargetLevelIndexFromSavedTileset(GameManager.Instance.Dungeon.tileIndices.tilesetId)); if (GameManager.Instance.CurrentGameMode == GameManager.GameMode.BOSSRUSH) { GameManager.Instance.DelayedLoadBossrushFloor(0.5f); } else { GameManager.Instance.DelayedLoadNextLevel(0.5f); } if (user.inventory != null && user.PlayerHasActiveSynergy("#SWORDGEON_AWAITS_%PLAYER_NICK")) { user.inventory.AddGunToInventory(Toolbox.GetGunById(SpecialItemIds.HerosSword), true); } yield break; }