Skip to content

Commit

Permalink
Merge pull request #314 from UltraStar-Deluxe/anst/improvements
Browse files Browse the repository at this point in the history
Anst/improvements
  • Loading branch information
basisbit committed Jun 27, 2022
2 parents f129201 + 9ff4028 commit f737eb6
Show file tree
Hide file tree
Showing 80 changed files with 1,314 additions and 242 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public static ClientSideConnectRequestManager Instance
if (instance == null)
{
ClientSideConnectRequestManager instanceInScene = FindObjectOfType<ClientSideConnectRequestManager>();
instanceInScene.InitSingleInstance();
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref instanceInScene);
}
return instance;
}
Expand Down Expand Up @@ -63,7 +63,8 @@ public static ClientSideConnectRequestManager Instance

private void Start()
{
InitSingleInstance();
ClientSideConnectRequestManager self = this;
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref self);
if (!Application.isPlaying || instance != this)
{
return;
Expand Down Expand Up @@ -132,17 +133,6 @@ private void DisposeConnectedServerHandler()
}
}

private void InitSingleInstance()
{
if (instance != null
&& instance != this)
{
Destroy(gameObject);
return;
}
instance = this;
}

private void OnApplicationPause(bool pauseStatus)
{
isApplicationPaused = pauseStatus;
Expand Down
8 changes: 8 additions & 0 deletions UltraStar Play/Assets/Common/Audio/BackgroundMusic.meta

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.

Binary file not shown.

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.

12 changes: 3 additions & 9 deletions UltraStar Play/Assets/Common/Audio/VolumeControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,15 @@ public class VolumeControl : MonoBehaviour, INeedInjection

private void Start()
{
UpdateVolumeInScene();
UpdateGeneralVolume();
settings.AudioSettings
.ObserveEveryValueChanged(audioSettings => audioSettings.VolumePercent)
.Subscribe(newValue => UpdateVolumeInScene())
.Subscribe(newValue => UpdateGeneralVolume())
.AddTo(gameObject);
}

private void UpdateVolumeInScene()
private void UpdateGeneralVolume()
{
AudioSource[] audioSources = FindObjectsOfType<AudioSource>();
if (!audioSources.IsNullOrEmpty())
{
audioSources.ForEach(audioSource => audioSource.volume = settings.AudioSettings.VolumePercent / 100.0f);
}

AudioListener.volume = settings.AudioSettings.VolumePercent / 100.0f;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class AudioSettings
// Range: 0..100
public int PreviewVolumePercent { get; set; } = 50;
public int VolumePercent { get; set; } = 100;
public bool BackgroundMusicEnabled { get; set; } = true;
public int BackgroundMusicVolumePercent { get; set; } = 70;

public EPitchDetectionAlgorithm pitchDetectionAlgorithm = EPitchDetectionAlgorithm.Dywa;
}
6 changes: 6 additions & 0 deletions UltraStar Play/Assets/Common/Model/Setting/EScoreMode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
public enum EScoreMode
{
Individual,
CommonAverage,
None,
}
3 changes: 3 additions & 0 deletions UltraStar Play/Assets/Common/Model/Setting/EScoreMode.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

20 changes: 20 additions & 0 deletions UltraStar Play/Assets/Common/Model/Setting/EScoreModeExtensions.cs
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.

4 changes: 2 additions & 2 deletions UltraStar Play/Assets/Common/Model/Setting/GameSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ public class GameSettings
{
public SystemLanguage language = SystemLanguage.English;
public List<string> songDirs = new();
public bool RatePlayers { get; set; } = true;
public bool CombineDuetScores { get; set; } = true;
public EScoreMode ScoreMode { get; set; } = EScoreMode.Individual;
public string CommonScoreNameSeparator { get; set; } = " & ";
}
4 changes: 3 additions & 1 deletion UltraStar Play/Assets/Common/Model/Stats/SongStatistic.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,17 @@ public class SongStatistic
{
public string PlayerName { get; private set; }
public EDifficulty Difficulty { get; private set; }
public EScoreMode ScoreMode { get; private set; }
public int Score { get; private set; }
public DateTime DateTime { get; private set; }

public SongStatistic(string playerName, EDifficulty difficulty, int score)
public SongStatistic(string playerName, EDifficulty difficulty, int score, EScoreMode scoreMode)
{
this.PlayerName = playerName;
this.Difficulty = difficulty;
this.Score = score;
this.DateTime = DateTime.Now;
this.ScoreMode = scoreMode;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public static ServerSideConnectRequestManager Instance
ServerSideConnectRequestManager instanceInScene = GameObjectUtils.FindComponentWithTag<ServerSideConnectRequestManager>("ServerSideConnectRequestManager");
if (instanceInScene != null)
{
instanceInScene.InitSingleInstance();
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref instanceInScene);
}
}
return instance;
Expand All @@ -59,7 +59,8 @@ public static ServerSideConnectRequestManager Instance

private void Start()
{
InitSingleInstance();
ServerSideConnectRequestManager self = this;
GameObjectUtils.TryInitSingleInstanceWithDontDestroyOnLoad(ref instance, ref self);
if (!Application.isPlaying || instance != this)
{
return;
Expand All @@ -77,28 +78,6 @@ private void Start()
});
}

private void InitSingleInstance()
{
if (!Application.isPlaying)
{
return;
}

if (instance != null
&& instance != this)
{
// This instance is not needed.
Destroy(gameObject);
return;
}
instance = this;

// Move object to top level in scene hierarchy.
// Otherwise this object will be destroyed with its parent, even when DontDestroyOnLoad is used.
transform.SetParent(null);
DontDestroyOnLoad(gameObject);
}

private void ServerAcceptMessageFromClient()
{
try
Expand Down
6 changes: 4 additions & 2 deletions UltraStar Play/Assets/Common/R/RMessages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ public static class Messages
public static readonly string difficulty_hard = "difficulty_hard";
public static readonly string difficulty_medium = "difficulty_medium";
public static readonly string enabled = "enabled";
public static readonly string enum_scoreMode_commonAverage = "enum_scoreMode_commonAverage";
public static readonly string enum_scoreMode_individual = "enum_scoreMode_individual";
public static readonly string enum_scoreMode_none = "enum_scoreMode_none";
public static readonly string exit = "exit";
public static readonly string graph_button_label = "graph_button_label";
public static readonly string graph_legend_good = "graph_legend_good";
Expand Down Expand Up @@ -99,7 +102,6 @@ public static class Messages
public static readonly string options_analyzeBeatsWithoutTargetNote = "options_analyzeBeatsWithoutTargetNote";
public static readonly string options_backgroundMusicEnabled = "options_backgroundMusicEnabled";
public static readonly string options_color = "options_color";
public static readonly string options_combineDuetScores = "options_combineDuetScores";
public static readonly string options_companionApp_button = "options_companionApp_button";
public static readonly string options_companionApp_title = "options_companionApp_title";
public static readonly string options_connectedClientCount = "options_connectedClientCount";
Expand Down Expand Up @@ -131,12 +133,12 @@ public static class Messages
public static readonly string options_playerProfiles_button = "options_playerProfiles_button";
public static readonly string options_playerProfiles_title = "options_playerProfiles_title";
public static readonly string options_previewVolume = "options_previewVolume";
public static readonly string options_ratePlayers = "options_ratePlayers";
public static readonly string options_recording_button = "options_recording_button";
public static readonly string options_recording_title = "options_recording_title";
public static readonly string options_resolution = "options_resolution";
public static readonly string options_sampleRate = "options_sampleRate";
public static readonly string options_sampleRate_auto = "options_sampleRate_auto";
public static readonly string options_scoreMode = "options_scoreMode";
public static readonly string options_showFps = "options_showFps";
public static readonly string options_showLyricsOnNotes = "options_showLyricsOnNotes";
public static readonly string options_showPitchIndicator = "options_showPitchIndicator";
Expand Down
Loading

0 comments on commit f737eb6

Please sign in to comment.