< Summary

Class:DCL.SettingsCommon.Settings
Assembly:Settings
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/Settings.cs
Covered lines:42
Uncovered lines:18
Coverable lines:60
Total lines:184
Line coverage:70% (42 of 60)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Settings()0%440100%
Dispose()0%110100%
LoadDefaultSettings()0%110100%
ResetAllSettings()0%6200%
GetDefaultGeneralSettings()0%110100%
GetDefaultAudioSettings()0%110100%
ApplyAutoQualitySettings(...)0%12300%
SubscribeToVirtualAudioMixerEvents()0%110100%
UnsubscribeFromVirtualAudioMixerEvents()0%110100%
ApplyMasterVolume()0%110100%
ApplyVoiceChatSettings(...)0%110100%
ApplyAvatarSFXVolume(...)0%110100%
ApplyUISFXVolume(...)0%110100%
ApplyMusicVolume(...)0%110100%
SaveSettings()0%2100%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/Settings.cs

#LineLine coverage
 1using System;
 2using DCL.Helpers;
 3using DCL.Interface;
 4using UnityEngine;
 5using UnityEngine.Audio;
 6
 7namespace DCL.SettingsCommon
 8{
 9    public class Settings : Singleton<Settings>
 10    {
 11        const string QUALITY_SETTINGS_KEY = "Settings.Quality";
 12        const string GENERAL_SETTINGS_KEY = "Settings.General";
 13        const string AUDIO_SETTINGS_KEY = "Settings.Audio";
 14        public event Action OnResetAllSettings;
 015        public QualitySettingsData qualitySettingsPresets => qualitySettingsPreset;
 16
 17        public ISettingsRepository<QualitySettings> qualitySettings;
 18        public ISettingsRepository<GeneralSettings> generalSettings;
 19        public ISettingsRepository<AudioSettings> audioSettings;
 20
 21        private static QualitySettingsData qualitySettingsPreset = null;
 22
 23        public QualitySettingsData autoqualitySettings = null;
 24        public QualitySettings lastValidAutoqualitySet;
 25
 26        private readonly BooleanVariable autosettingsEnabled = null;
 27        private readonly AudioMixer audioMixer;
 28
 129        public Settings()
 30        {
 131            if (qualitySettingsPreset == null)
 32            {
 133                qualitySettingsPreset = Resources.Load<QualitySettingsData>("ScriptableObjects/QualitySettingsData");
 34            }
 35
 136            if (autoqualitySettings == null)
 37            {
 138                autoqualitySettings = Resources.Load<QualitySettingsData>("ScriptableObjects/AutoQualitySettingsData");
 139                lastValidAutoqualitySet = autoqualitySettings[autoqualitySettings.Length / 2];
 40            }
 41
 142            if (autosettingsEnabled == null)
 143                autosettingsEnabled = Resources.Load<BooleanVariable>("ScriptableObjects/AutoQualityEnabled");
 44
 145            qualitySettings = new ProxySettingsRepository<QualitySettings>(
 46                new PlayerPrefsQualitySettingsRepository(
 47                    new PlayerPrefsSettingsByKey(QUALITY_SETTINGS_KEY),
 48                    qualitySettingsPreset.defaultPreset),
 49                new SettingsModule<QualitySettings>(
 50                    QUALITY_SETTINGS_KEY,
 51                    qualitySettingsPreset.defaultPreset));
 152            generalSettings = new ProxySettingsRepository<GeneralSettings>(
 53                new PlayerPrefsGeneralSettingsRepository(
 54                    new PlayerPrefsSettingsByKey(GENERAL_SETTINGS_KEY),
 55                    GetDefaultGeneralSettings()),
 56                new SettingsModule<GeneralSettings>(
 57                    GENERAL_SETTINGS_KEY,
 58                    GetDefaultGeneralSettings()));
 159            audioSettings = new ProxySettingsRepository<AudioSettings>(
 60                new PlayerPrefsAudioSettingsRepository(
 61                    new PlayerPrefsSettingsByKey(AUDIO_SETTINGS_KEY),
 62                    GetDefaultAudioSettings()),
 63                new SettingsModule<AudioSettings>(
 64                    AUDIO_SETTINGS_KEY,
 65                    GetDefaultAudioSettings()));
 66
 167            SubscribeToVirtualAudioMixerEvents();
 168            audioMixer = Resources.Load<AudioMixer>("AudioMixer");
 169        }
 70
 471        public void Dispose() { UnsubscribeFromVirtualAudioMixerEvents(); }
 72
 73        public void LoadDefaultSettings()
 74        {
 2275            autosettingsEnabled.Set(false);
 76
 2277            qualitySettings.Reset();
 2278            generalSettings.Reset();
 2279            audioSettings.Reset();
 2280        }
 81
 82        public void ResetAllSettings()
 83        {
 084            LoadDefaultSettings();
 085            SaveSettings();
 086            OnResetAllSettings?.Invoke();
 087        }
 88
 89        private GeneralSettings GetDefaultGeneralSettings()
 90        {
 291            return new GeneralSettings
 92            {
 93                mouseSensitivity = 0.6f,
 94                scenesLoadRadius = 4,
 95                avatarsLODDistance = 16,
 96                maxNonLODAvatars = DataStore.DataStore_AvatarsLOD.DEFAULT_MAX_AVATAR,
 97                voiceChatVolume = 1,
 98                voiceChatAllow = GeneralSettings.VoiceChatAllow.ALL_USERS,
 99                autoqualityOn = false,
 100                namesOpacity = 0.5f,
 101                profanityChatFiltering = true
 102            };
 103        }
 104
 105        private AudioSettings GetDefaultAudioSettings()
 106        {
 2107            return new AudioSettings()
 108            {
 109                masterVolume = 1f,
 110                voiceChatVolume = 1f,
 111                avatarSFXVolume = 1f,
 112                uiSFXVolume = 1f,
 113                sceneSFXVolume = 1f,
 114                musicVolume = 1f,
 115                chatSFXEnabled = true
 116            };
 117        }
 118
 119        /// <summary>
 120        /// Apply the auto quality setting by its index on the array
 121        /// </summary>
 122        /// <param name="index">Index within the autoQualitySettings array</param>
 123        public void ApplyAutoQualitySettings(int index)
 124        {
 0125            if (index < 0 || index >= autoqualitySettings.Length)
 0126                return;
 127
 0128            lastValidAutoqualitySet = autoqualitySettings[index];
 129
 0130            var qualiltyData = qualitySettings.Data;
 131
 0132            lastValidAutoqualitySet.baseResolution = qualiltyData.baseResolution;
 0133            lastValidAutoqualitySet.fpsCap = qualiltyData.fpsCap;
 134
 0135            qualitySettings.Apply(lastValidAutoqualitySet);
 0136        }
 137
 138        private void SubscribeToVirtualAudioMixerEvents()
 139        {
 1140            DataStore.i.virtualAudioMixer.voiceChatVolume.OnChange += ApplyVoiceChatSettings;
 1141            DataStore.i.virtualAudioMixer.musicVolume.OnChange += ApplyMusicVolume;
 1142            DataStore.i.virtualAudioMixer.avatarSFXVolume.OnChange += ApplyAvatarSFXVolume;
 1143            DataStore.i.virtualAudioMixer.uiSFXVolume.OnChange += ApplyUISFXVolume;
 1144        }
 145
 146        private void UnsubscribeFromVirtualAudioMixerEvents()
 147        {
 2148            DataStore.i.virtualAudioMixer.voiceChatVolume.OnChange -= ApplyVoiceChatSettings;
 2149            DataStore.i.virtualAudioMixer.musicVolume.OnChange -= ApplyMusicVolume;
 2150            DataStore.i.virtualAudioMixer.avatarSFXVolume.OnChange -= ApplyAvatarSFXVolume;
 2151            DataStore.i.virtualAudioMixer.uiSFXVolume.OnChange -= ApplyUISFXVolume;
 2152        }
 153
 154        public void ApplyMasterVolume()
 155        {
 156            // Update the "All" mixer group
 2157            audioMixer.SetFloat("AllBusVolume", Utils.ToAudioMixerGroupVolume(audioSettings.Data.masterVolume));
 158
 159            // Update voice chat volume, as it does not pass through the AudioMixer
 2160            ApplyVoiceChatSettings();
 2161        }
 162
 163        public void ApplyVoiceChatSettings(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f)
 164        {
 6165            AudioSettings audioSettingsData = audioSettings.Data;
 6166            float calculatedVolume = Utils.ToVolumeCurve(DataStore.i.virtualAudioMixer.voiceChatVolume.Get() * audioSett
 6167            WebInterface.ApplySettings(calculatedVolume, (int)generalSettings.Data.voiceChatAllow);
 6168        }
 169
 4170        public void ApplyAvatarSFXVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioM
 171
 4172        public void ApplyUISFXVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioMixer
 173
 4174        public void ApplyMusicVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioMixer
 175
 176        public void SaveSettings()
 177        {
 0178            generalSettings.Save();
 0179            qualitySettings.Save();
 0180            audioSettings.Save();
 0181            PlayerPrefsUtils.Save();
 0182        }
 183    }
 184}