< Summary

Class:DCL.Settings
Assembly:Settings
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/Settings/Settings.cs
Covered lines:24
Uncovered lines:45
Coverable lines:69
Total lines:193
Line coverage:34.7% (24 of 69)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Settings()0%440100%
LoadQualitySettings()0%4.123050%
LoadGeneralSettings()0%3.192033.33%
LoadDefaultSettings()0%2100%
ResetAllSettings()0%6200%
GetDefaultGeneralSettings()0%110100%
ApplyAutoQualitySettings(...)0%20400%
ApplyQualitySettings(...)0%3.073080%
ApplyGeneralSettings(...)0%12300%
SaveSettings()0%2100%

File(s)

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

#LineLine coverage
 1using UnityEngine;
 2using System;
 3using DCL.Helpers;
 4using DCL.Interface;
 5
 6namespace DCL
 7{
 8    public class Settings : DCL.Singleton<Settings>
 9    {
 10        const string QUALITY_SETTINGS_KEY = "Settings.Quality";
 11        const string GENERAL_SETTINGS_KEY = "Settings.General";
 12
 13        public event Action<SettingsData.QualitySettings> OnQualitySettingsChanged;
 14        public event Action<SettingsData.GeneralSettings> OnGeneralSettingsChanged;
 15        public event Action OnResetAllSettings;
 16
 017        public SettingsData.QualitySettings qualitySettings { get { return currentQualitySettings; } }
 018        public SettingsData.QualitySettingsData qualitySettingsPresets { get { return qualitySettingsPreset; } }
 019        public SettingsData.GeneralSettings generalSettings { get { return currentGeneralSettings; } }
 20
 21        private static SettingsData.QualitySettingsData qualitySettingsPreset = null;
 22
 23        public SettingsData.QualitySettingsData autoqualitySettings = null;
 24        public SettingsData.QualitySettings lastValidAutoqualitySet;
 25
 26        private readonly BooleanVariable autosettingsEnabled = null;
 27
 028        public SettingsData.QualitySettings currentQualitySettings { private set; get; }
 29        private SettingsData.GeneralSettings currentGeneralSettings;
 30
 131        public Settings()
 32        {
 133            if (qualitySettingsPreset == null)
 34            {
 135                qualitySettingsPreset = Resources.Load<SettingsData.QualitySettingsData>("ScriptableObjects/QualitySetti
 36            }
 37
 138            if (autoqualitySettings == null)
 39            {
 140                autoqualitySettings = Resources.Load<SettingsData.QualitySettingsData>("ScriptableObjects/AutoQualitySet
 141                lastValidAutoqualitySet = autoqualitySettings[autoqualitySettings.Length / 2];
 42            }
 43
 144            if (autosettingsEnabled == null)
 145                autosettingsEnabled = Resources.Load<BooleanVariable>("ScriptableObjects/AutoQualityEnabled");
 46
 147            LoadQualitySettings();
 148            LoadGeneralSettings();
 149        }
 50
 51        private void LoadQualitySettings()
 52        {
 153            bool isQualitySettingsSet = false;
 154            if (PlayerPrefsUtils.HasKey(QUALITY_SETTINGS_KEY))
 55            {
 56                try
 57                {
 058                    currentQualitySettings = JsonUtility.FromJson<SettingsData.QualitySettings>(PlayerPrefsUtils.GetStri
 059                    isQualitySettingsSet = true;
 060                }
 61                catch (Exception e)
 62                {
 063                    Debug.Log(e.Message);
 064                }
 65            }
 66
 167            if (!isQualitySettingsSet)
 68            {
 169                currentQualitySettings = qualitySettingsPreset.defaultPreset;
 70            }
 171        }
 72
 73        private void LoadGeneralSettings()
 74        {
 175            currentGeneralSettings = GetDefaultGeneralSettings();
 76
 177            if (PlayerPrefsUtils.HasKey(GENERAL_SETTINGS_KEY))
 78            {
 79                try
 80                {
 081                    object currentSetting = currentGeneralSettings;
 082                    JsonUtility.FromJsonOverwrite(PlayerPrefsUtils.GetString(GENERAL_SETTINGS_KEY), currentSetting);
 083                    currentGeneralSettings = (SettingsData.GeneralSettings)currentSetting;
 084                }
 85                catch (Exception e)
 86                {
 087                    Debug.Log(e.Message);
 088                }
 89            }
 190        }
 91
 92        public void LoadDefaultSettings()
 93        {
 094            autosettingsEnabled.Set(false);
 095            currentQualitySettings = qualitySettingsPreset.defaultPreset;
 096            currentGeneralSettings = GetDefaultGeneralSettings();
 97
 098            ApplyQualitySettings(currentQualitySettings);
 099            ApplyGeneralSettings(currentGeneralSettings);
 0100        }
 101
 102        public void ResetAllSettings()
 103        {
 0104            LoadDefaultSettings();
 0105            SaveSettings();
 0106            OnResetAllSettings?.Invoke();
 0107        }
 108
 109        private SettingsData.GeneralSettings GetDefaultGeneralSettings()
 110        {
 1111            return new SettingsData.GeneralSettings()
 112            {
 113                sfxVolume = 1,
 114                mouseSensitivity = 0.6f,
 115                scenesLoadRadius = 4,
 116                voiceChatVolume = 1,
 117                voiceChatAllow = SettingsData.GeneralSettings.VoiceChatAllow.ALL_USERS,
 118                autoqualityOn = false
 119            };
 120        }
 121
 122        /// <summary>
 123        /// Apply the auto quality setting by its index on the array
 124        /// </summary>
 125        /// <param name="index">Index within the autoQualitySettings array</param>
 126        public void ApplyAutoQualitySettings(int index)
 127        {
 0128            if (index < 0 || index >= autoqualitySettings.Length)
 0129                return;
 130
 0131            lastValidAutoqualitySet = autoqualitySettings[index];
 0132            lastValidAutoqualitySet.baseResolution = currentQualitySettings.baseResolution;
 0133            lastValidAutoqualitySet.fpsCap = currentQualitySettings.fpsCap;
 134
 0135            if (currentQualitySettings.Equals(lastValidAutoqualitySet))
 0136                return;
 137
 0138            ApplyQualitySettings(lastValidAutoqualitySet);
 0139        }
 140
 141        public void ApplyQualitySettings(SettingsData.QualitySettings settings)
 142        {
 1143            if (settings.Equals(currentQualitySettings))
 0144                return;
 145
 1146            currentQualitySettings = settings;
 1147            OnQualitySettingsChanged?.Invoke(settings);
 1148        }
 149
 150        public void ApplyGeneralSettings(SettingsData.GeneralSettings settings)
 151        {
 0152            if (settings.Equals(currentGeneralSettings))
 0153                return;
 154
 0155            currentGeneralSettings = settings;
 0156            OnGeneralSettingsChanged?.Invoke(settings);
 0157            autosettingsEnabled.Set(settings.autoqualityOn);
 0158        }
 159
 160        public void SaveSettings()
 161        {
 0162            PlayerPrefsUtils.SetString(GENERAL_SETTINGS_KEY, JsonUtility.ToJson(currentGeneralSettings));
 0163            PlayerPrefsUtils.SetString(QUALITY_SETTINGS_KEY, JsonUtility.ToJson(currentQualitySettings));
 0164            PlayerPrefsUtils.Save();
 0165        }
 166    }
 167}
 168
 169namespace DCL.SettingsData
 170{
 171    [Serializable]
 172    public struct GeneralSettings
 173    {
 174        public enum VoiceChatAllow { ALL_USERS, VERIFIED_ONLY, FRIENDS_ONLY }
 175
 176        public float sfxVolume;
 177        public float mouseSensitivity;
 178        public float voiceChatVolume;
 179        public VoiceChatAllow voiceChatAllow;
 180        public bool autoqualityOn;
 181        public float scenesLoadRadius;
 182
 183        public bool Equals(GeneralSettings settings)
 184        {
 185            return sfxVolume == settings.sfxVolume
 186                   && mouseSensitivity == settings.mouseSensitivity
 187                   && scenesLoadRadius == settings.scenesLoadRadius
 188                   && voiceChatVolume == settings.voiceChatVolume
 189                   && voiceChatAllow == settings.voiceChatAllow
 190                   && autoqualityOn == settings.autoqualityOn;
 191        }
 192    }
 193}