-
-
Notifications
You must be signed in to change notification settings - Fork 73
Commit
Anst/improvements
- Loading branch information
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
using System; | ||
using System.Collections; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using UnityEngine; | ||
using UnityEngine.UIElements; | ||
using UniInject; | ||
using UniRx; | ||
using UnityEngine.SceneManagement; | ||
|
||
// Disable warning about fields that are never assigned, their values are injected. | ||
#pragma warning disable CS0649 | ||
|
||
public class BackgroundMusicManager : MonoBehaviour, INeedInjection | ||
{ | ||
private static BackgroundMusicManager instance; | ||
public static BackgroundMusicManager Instance | ||
{ | ||
get | ||
{ | ||
if (instance == null) | ||
{ | ||
BackgroundMusicManager instanceInScene = GameObjectUtils.FindComponentWithTag<BackgroundMusicManager>("BackgroundMusicManager"); | ||
if (instanceInScene != null) | ||
{ | ||
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref instanceInScene); | ||
} | ||
} | ||
return instance; | ||
} | ||
} | ||
|
||
private static readonly int timeInSecondsBeforeRestartingBackgroundMusic = 20; | ||
private static readonly List<EScene> scenesWithoutBackgroundMusic = new() | ||
{ | ||
EScene.SingScene, | ||
EScene.SongSelectScene, | ||
EScene.SingingResultsScene, | ||
EScene.HighscoreScene, | ||
EScene.SongEditorScene, | ||
}; | ||
|
||
private bool ShouldPlayBackgroundMusic | ||
{ | ||
get | ||
{ | ||
if (settings.AudioSettings.BackgroundMusicVolumePercent <= 0) | ||
{ | ||
return false; | ||
} | ||
|
||
EScene sceneEnum = ESceneUtils.GetSceneByBuildIndex(SceneManager.GetActiveScene().buildIndex); | ||
return !scenesWithoutBackgroundMusic.Contains(sceneEnum); | ||
} | ||
} | ||
|
||
[Inject(SearchMethod = SearchMethods.GetComponentInChildren)] | ||
private AudioSource backgroundMusicAudioSource; | ||
|
||
[Inject] | ||
private Settings settings; | ||
|
||
private float lastPauseTimeInSeconds; | ||
|
||
private void Start() { | ||
BackgroundMusicManager self = this; | ||
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref self); | ||
|
||
instance.UpdateBackgroundMusic(); | ||
|
||
if (!Application.isPlaying || instance != this) | ||
{ | ||
return; | ||
} | ||
|
||
settings.ObserveEveryValueChanged(it => it.AudioSettings.BackgroundMusicVolumePercent) | ||
.Subscribe(_ => UpdateBackgroundMusic()) | ||
.AddTo(gameObject); | ||
} | ||
|
||
private void UpdateBackgroundMusic() | ||
{ | ||
// Update volume | ||
backgroundMusicAudioSource.volume = settings.AudioSettings.BackgroundMusicVolumePercent / 100f; | ||
|
||
// Play or pause the music | ||
if (ShouldPlayBackgroundMusic | ||
&& !backgroundMusicAudioSource.isPlaying) | ||
{ | ||
// If the music did not play for a longer duration, then start it from the beginning. | ||
float timeInSecondsWithoutBackgroundMusic = Time.time - lastPauseTimeInSeconds; | ||
if (lastPauseTimeInSeconds > 0 | ||
&& timeInSecondsWithoutBackgroundMusic > timeInSecondsBeforeRestartingBackgroundMusic) | ||
{ | ||
Debug.Log($"Did not play background music for {timeInSecondsWithoutBackgroundMusic} seconds. Restarting it from the beginning."); | ||
backgroundMusicAudioSource.Stop(); | ||
} | ||
backgroundMusicAudioSource.Play(); | ||
} | ||
else if (!ShouldPlayBackgroundMusic | ||
&& backgroundMusicAudioSource.isPlaying) | ||
{ | ||
backgroundMusicAudioSource.Pause(); | ||
lastPauseTimeInSeconds = Time.time; | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
This work is licensed under the Creative Commons license by-sa 3.0. | ||
(http://creativecommons.org/licenses/by-sa/3.0/) | ||
|
||
Author: | ||
DJad (http://www.jamendo.com/de/artist/DJad) | ||
|
||
Distributed by: | ||
Site: jamendo.com | ||
File: DJad - Walking Alone.mp3 | ||
URL: http://www.jamendo.com/de/track/543970 |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
public enum EScoreMode | ||
{ | ||
Individual, | ||
CommonAverage, | ||
None, | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
using System; | ||
using ProTrans; | ||
|
||
public static class ScoreModeExtensions | ||
{ | ||
public static string GetTranslation(this EScoreMode scoreMode) | ||
{ | ||
switch (scoreMode) | ||
{ | ||
case EScoreMode.Individual: | ||
return TranslationManager.GetTranslation(R.Messages.enum_scoreMode_individual); | ||
case EScoreMode.CommonAverage: | ||
return TranslationManager.GetTranslation(R.Messages.enum_scoreMode_commonAverage); | ||
case EScoreMode.None: | ||
return TranslationManager.GetTranslation(R.Messages.enum_scoreMode_none); | ||
default: | ||
throw new ArgumentOutOfRangeException(nameof(scoreMode), scoreMode, null); | ||
} | ||
} | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.