public virtual async void Abort() { print("Game aborted"); Music.Stop(); // Resume DSP AudioListener.pause = false; // Unload resources Context.AudioManager.Unload("Level"); onGameAborted.Invoke(this); Dispose(); var sceneLoader = new SceneLoader("Navigation"); sceneLoader.Load(); var transitioned = false; Context.ScreenManager.ChangeScreen(OverlayScreen.Id, ScreenTransition.None, 0.4f, 1, onFinished: screen => transitioned = true); await UniTask.WaitUntil(() => transitioned && sceneLoader.IsLoaded); sceneLoader.Activate(); }
protected virtual async void Start() { await UniTask.WaitUntil(() => Context.IsInitialized); try { await Initialize(); } catch (Exception e) { Debug.LogError(e); // Not editor if (Context.SelectedGameMode != GameMode.Unspecified) { Context.GameErrorState = new GameErrorState { Message = "DIALOG_LEVEL_LOAD_ERROR".Get(), Exception = e }; await UniTask.Delay(TimeSpan.FromSeconds(3)); var sceneLoader = new SceneLoader("Navigation"); sceneLoader.Load(); var transitioned = false; Context.ScreenManager.ChangeScreen(OverlayScreen.Id, ScreenTransition.None, 0.4f, 1, onFinished: screen => transitioned = true); await UniTask.WaitUntil(() => transitioned && sceneLoader.IsLoaded); sceneLoader.Activate(); } } }
public async void NextStage() { if (State == ScreenState.Inactive) { return; } State = ScreenState.Inactive; ProfileWidget.Instance.FadeOut(); LoopAudioPlayer.Instance.StopAudio(0.4f); Context.AudioManager.Get("LevelStart").Play(); var sceneLoader = new SceneLoader("Game"); sceneLoader.Load(); await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); NavigationBackdrop.Instance.FadeBrightness(0, 0.8f); await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); if (!sceneLoader.IsLoaded) { await UniTask.WaitUntil(() => sceneLoader.IsLoaded); } Context.AssetMemory.DisposeTaggedCacheAssets(AssetTag.GameCover); sceneLoader.Activate(); }
public async void Retry() { if (State == ScreenState.Inactive) { return; } // TODO: Refactor with TierResult? State = ScreenState.Inactive; ProfileWidget.Instance.FadeOut(); LoopAudioPlayer.Instance.StopAudio(0.4f); Context.AudioManager.Get("LevelStart").Play(); Context.SelectedGameMode = GameMode.Tier; Context.TierState = new TierState(tierState.Tier); var sceneLoader = new SceneLoader("Game"); sceneLoader.Load(); await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); NavigationBackdrop.Instance.FadeBrightness(0, 0.8f); await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); if (!sceneLoader.IsLoaded) { await UniTask.WaitUntil(() => sceneLoader.IsLoaded); } sceneLoader.Activate(); }
public async void OnStartButton() { if (SelectedTier == null || State == ScreenState.Inactive) { return; } Context.Haptic(HapticTypes.SoftImpact, true); if (SelectedTier.StagesValid) { lastScrollPosition = scrollRect.verticalNormalizedPosition; State = ScreenState.Inactive; Context.SelectedGameMode = GameMode.Tier; Context.TierState = new TierState(SelectedTier); LoadedContent = null; scrollRect.GetComponentsInChildren <TierCard>().ForEach(it => it.OnTierStart()); ProfileWidget.Instance.FadeOut(); LoopAudioPlayer.Instance.StopAudio(0.4f); Context.AudioManager.Get("LevelStart").Play(); Context.SelectedMods = Context.Player.Settings.EnabledMods.ToHashSet(); // This will be filtered await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); OpaqueOverlay.Show(); await UniTask.Delay(TimeSpan.FromSeconds(0.8f)); var sceneLoader = new SceneLoader("Game"); sceneLoader.Load(); await UniTask.WaitUntil(() => sceneLoader.IsLoaded); sceneLoader.Activate(); } else { DownloadAndUnpackStages(); } }
public virtual async void Retry() { print("Game retried"); // Unload resources Context.AudioManager.Unload("Level"); onGameRetried.Invoke(this); Dispose(); var sceneLoader = new SceneLoader("Game"); sceneLoader.Load(); var transitioned = false; Context.ScreenManager.ChangeScreen(OverlayScreen.Id, ScreenTransition.None, 0.4f, 1, onFinished: screen => transitioned = true); await UniTask.WaitUntil(() => transitioned && sceneLoader.IsLoaded); sceneLoader.Activate(); }
public virtual async void Complete(bool?skipMusic = null) { if (State.IsCompleted || State.IsFailed) { return; } print("Game completed"); if (skipMusic == null) { skipMusic = Chart.SkipMusicOnCompletion; } State.IsCompleted = true; State.OnComplete(); if (State.Mode == GameMode.Tier) { Context.TierState.OnStageComplete(); } inputController.DisableInput(); onGameCompleted.Invoke(this); if (!EditorImmediatelyComplete) { var maxVolume = Music.Volume; var volume = Music.Volume * 3f; // Wait for audio to finish var remainingLength = MusicLength - Music.PlaybackTime; var startTime = DateTime.Now; await UniTask.WaitUntil(() => { if (skipMusic.Value) { volume -= 1 / 60f; if (volume < 1) { Music.Volume = Math.Min(maxVolume, volume); } return(Music.IsFinished() || volume <= 0); } else { return(Music.IsFinished() || DateTime.Now - startTime > TimeSpan.FromSeconds(remainingLength)); // Just as a fail-safe } }); } State.IsReadyToExit = true; print("Audio ended"); Context.AudioManager.Unload("Level"); try { await UniTask.WhenAll(BeforeExitTasks); } catch (OperationCanceledException) { } onGameBeforeExit.Invoke(this); await Resources.UnloadUnusedAssets(); Dispose(); globalCalibrator?.Dispose(); var sceneLoader = new SceneLoader("Navigation"); sceneLoader.Load(); await UniTask.Delay(TimeSpan.FromSeconds(1.5f)); if (!sceneLoader.IsLoaded) { await UniTask.WaitUntil(() => sceneLoader.IsLoaded); } sceneLoader.Activate(); }