< 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:166
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 SettingsModule<QualitySettings> qualitySettings;
 18        public SettingsModule<GeneralSettings> generalSettings;
 19        public SettingsModule<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
 45
 146            qualitySettings = new SettingsModule<QualitySettings>(QUALITY_SETTINGS_KEY, qualitySettingsPreset.defaultPre
 147            generalSettings = new SettingsModule<GeneralSettings>(GENERAL_SETTINGS_KEY, GetDefaultGeneralSettings());
 148            audioSettings = new SettingsModule<AudioSettings>(AUDIO_SETTINGS_KEY, GetDefaultAudioSettings());
 49
 150            SubscribeToVirtualAudioMixerEvents();
 151            audioMixer = Resources.Load<AudioMixer>("AudioMixer");
 152        }
 53
 454        public void Dispose() { UnsubscribeFromVirtualAudioMixerEvents(); }
 55
 56        public void LoadDefaultSettings()
 57        {
 2258            autosettingsEnabled.Set(false);
 59
 2260            qualitySettings.Reset();
 2261            generalSettings.Reset();
 2262            audioSettings.Reset();
 2263        }
 64
 65        public void ResetAllSettings()
 66        {
 067            LoadDefaultSettings();
 068            SaveSettings();
 069            OnResetAllSettings?.Invoke();
 070        }
 71
 72        private GeneralSettings GetDefaultGeneralSettings()
 73        {
 174            return new GeneralSettings()
 75            {
 76                mouseSensitivity = 0.6f,
 77                scenesLoadRadius = 4,
 78                avatarsLODDistance = 16,
 79                maxNonLODAvatars = DataStore.DataStore_AvatarsLOD.DEFAULT_MAX_AVATAR,
 80                voiceChatVolume = 1,
 81                voiceChatAllow = GeneralSettings.VoiceChatAllow.ALL_USERS,
 82                autoqualityOn = false,
 83                namesOpacity = 0.5f
 84            };
 85        }
 86
 87        private AudioSettings GetDefaultAudioSettings()
 88        {
 189            return new AudioSettings()
 90            {
 91                masterVolume = 1f,
 92                voiceChatVolume = 1f,
 93                avatarSFXVolume = 1f,
 94                uiSFXVolume = 1f,
 95                sceneSFXVolume = 1f,
 96                musicVolume = 1f,
 97                chatSFXEnabled = true
 98            };
 99        }
 100
 101        /// <summary>
 102        /// Apply the auto quality setting by its index on the array
 103        /// </summary>
 104        /// <param name="index">Index within the autoQualitySettings array</param>
 105        public void ApplyAutoQualitySettings(int index)
 106        {
 0107            if (index < 0 || index >= autoqualitySettings.Length)
 0108                return;
 109
 0110            lastValidAutoqualitySet = autoqualitySettings[index];
 111
 0112            var qualiltyData = qualitySettings.Data;
 113
 0114            lastValidAutoqualitySet.baseResolution = qualiltyData.baseResolution;
 0115            lastValidAutoqualitySet.fpsCap = qualiltyData.fpsCap;
 116
 0117            qualitySettings.Apply(lastValidAutoqualitySet);
 0118        }
 119
 120        private void SubscribeToVirtualAudioMixerEvents()
 121        {
 1122            DataStore.i.virtualAudioMixer.voiceChatVolume.OnChange += ApplyVoiceChatSettings;
 1123            DataStore.i.virtualAudioMixer.musicVolume.OnChange += ApplyMusicVolume;
 1124            DataStore.i.virtualAudioMixer.avatarSFXVolume.OnChange += ApplyAvatarSFXVolume;
 1125            DataStore.i.virtualAudioMixer.uiSFXVolume.OnChange += ApplyUISFXVolume;
 1126        }
 127
 128        private void UnsubscribeFromVirtualAudioMixerEvents()
 129        {
 2130            DataStore.i.virtualAudioMixer.voiceChatVolume.OnChange -= ApplyVoiceChatSettings;
 2131            DataStore.i.virtualAudioMixer.musicVolume.OnChange -= ApplyMusicVolume;
 2132            DataStore.i.virtualAudioMixer.avatarSFXVolume.OnChange -= ApplyAvatarSFXVolume;
 2133            DataStore.i.virtualAudioMixer.uiSFXVolume.OnChange -= ApplyUISFXVolume;
 2134        }
 135
 136        public void ApplyMasterVolume()
 137        {
 138            // Update the "All" mixer group
 2139            audioMixer.SetFloat("AllBusVolume", Utils.ToAudioMixerGroupVolume(audioSettings.Data.masterVolume));
 140
 141            // Update voice chat volume, as it does not pass through the AudioMixer
 2142            ApplyVoiceChatSettings();
 2143        }
 144
 145        public void ApplyVoiceChatSettings(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f)
 146        {
 6147            AudioSettings audioSettingsData = audioSettings.Data;
 6148            float calculatedVolume = Utils.ToVolumeCurve(DataStore.i.virtualAudioMixer.voiceChatVolume.Get() * audioSett
 6149            WebInterface.ApplySettings(calculatedVolume, (int)generalSettings.Data.voiceChatAllow);
 6150        }
 151
 4152        public void ApplyAvatarSFXVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioM
 153
 4154        public void ApplyUISFXVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioMixer
 155
 4156        public void ApplyMusicVolume(float currentDataStoreVolume = 0f, float previousDataStoreVolume = 0f) { audioMixer
 157
 158        public void SaveSettings()
 159        {
 0160            generalSettings.Save();
 0161            qualitySettings.Save();
 0162            audioSettings.Save();
 0163            PlayerPrefsUtils.Save();
 0164        }
 165    }
 166}