少年修仙传客户端代码仓库
client_Wu Xijin
2018-09-04 d9e6e5aac14261fad5bd18053b600bd513b45509
System/SystemSetting/SystemSetting.cs
@@ -1,220 +1,277 @@
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using System;
using Snxxz.UI;
using System.Collections;
public class SystemSetting : Singleton<SystemSetting>
{
    const string QUALITY_LEVEL_KEY = "GameQualityLevel";
    const string SOUND_VOLUME_KEY = "SoundRatioKey";  //音乐
    const string SOUND_EFFECT_KEY = "SoundEffect"; //音效
    const string FPS_KEY = "FPSKey";
    public Dictionary<SystemSwitch, bool> systemSettings = new Dictionary<SystemSwitch, bool>();
    int m_PlayerSyncCount = -1;
    public event Action<SystemSwitch, bool> OnSettingChanged;
    public event Action qualityLevelChangeEvent;
    public event Action playerSyncCountChangeEvent;
    public SystemSetting()
    {
        DTC0102_tagCDBPlayer.switchAccountEvent += OnSwitchAccount;
    }
    ~SystemSetting()
    {
        DTC0102_tagCDBPlayer.switchAccountEvent -= OnSwitchAccount;
    }
    public void SetSoundVolume(float _volume)
    {
        LocalSave.SetFloat(SOUND_VOLUME_KEY, Mathf.Clamp01(_volume));
        SoundPlayer.Instance.musicAudioSource.volume = Mathf.Clamp01(_volume);
    }
    public float GetSoundVolume()
    {
        return LocalSave.GetFloat(SOUND_VOLUME_KEY, 1);
    }
    public void SetSoundEffect(float value)
    {
        LocalSave.SetFloat(SOUND_EFFECT_KEY, Mathf.Clamp01(value));
    }
    public float GetSoundEffect()
    {
        return LocalSave.GetFloat(SOUND_EFFECT_KEY, 1);
    }
    public void SetSystemSettingSwitch(SystemSwitch type, bool _value)
    {
        SettingMgr.Instance.SetAccountSetStr(type.ToString(), _value.ToString());
        systemSettings[type] = _value;
        if (OnSettingChanged != null)
        {
            OnSettingChanged(type, _value);
        }
    }
    public bool GetSystemSettingSwitch(SystemSwitch type)
    {
        if (systemSettings.ContainsKey(type))
        {
            return systemSettings[type];
        }
        else
        {
            return systemSettings[type] = SettingMgr.Instance.GetAccountSetBoolInfo(type.ToString()); ;
        }
    }
    public void SetPlayerSyncCount(int _syncCount)
    {
        SettingMgr.Instance.SetAccountSetStr("PlayerSyncCount", _syncCount.ToString());
        if (m_PlayerSyncCount != _syncCount)
        {
            m_PlayerSyncCount = _syncCount;
            if (playerSyncCountChangeEvent != null)
            {
                playerSyncCountChangeEvent();
            }
        }
    }
    public int GetPlayerSyncCount()
    {
        if (m_PlayerSyncCount == -1)
        {
            var result = SettingMgr.Instance.GetAccountSetIntInfo("PlayerSyncCount");
            if (result == -1)
            {
                m_PlayerSyncCount = 15;
            }
            else
            {
                m_PlayerSyncCount = Mathf.Clamp(result, 0, 20);
            }
        }
        return m_PlayerSyncCount;
    }
    public void SetQualityLevel(GameQuality _quality, bool _disabeCamera = true)
    {
        LocalSave.SetInt(QUALITY_LEVEL_KEY, Mathf.Clamp((int)_quality, 0, 2));
        QualitySettings.SetQualityLevel((int)_quality);
        switch (_quality)
        {
            case GameQuality.Low:
                Shader.globalMaximumLOD = 250;
                Shader.DisableKeyword("QUALITY_HGH");
                Shader.DisableKeyword("QUALITY_MED");
                Shader.EnableKeyword("QUALITY_LOW");
                PostProcessingUtility.TogglePostProcessing(false);
                break;
            case GameQuality.Medium:
                Shader.globalMaximumLOD = 250;
                Shader.DisableKeyword("QUALITY_HGH");
                Shader.EnableKeyword("QUALITY_MED");
                Shader.DisableKeyword("QUALITY_LOW");
                PostProcessingUtility.TogglePostProcessing(false);
                break;
            case GameQuality.High:
                Shader.globalMaximumLOD = 500;
                Shader.EnableKeyword("QUALITY_HGH");
                Shader.DisableKeyword("QUALITY_MED");
                Shader.DisableKeyword("QUALITY_LOW");
                PostProcessingUtility.TogglePostProcessing(false);
                break;
        }
#if UNITY_ANDROID && !UNITY_EDITOR
        if (_disabeCamera)
        {
            CameraManager.uiCamera.enabled = false;
        }
        ResolutionUtility.AdjustResolution(_quality);
        if (_disabeCamera)
        {
            SnxxzGame.Instance.StartCoroutine(Co_WaitFewMinute());
        }
#endif
        if (qualityLevelChangeEvent != null)
        {
            qualityLevelChangeEvent();
        }
    }
    public GameQuality GetCurrentQualityLevel()
    {
        //目前看起来所有的安卓机跑高效果都可以接受,先给玩家默认设置高效果。
        if (Application.platform == RuntimePlatform.Android)
        {
            return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY, (int)GameQuality.High);
        }
        else
        {
            return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY, (int)GameQuality.High);
        }
    }
    public void SetFPSLimit(int _fps)
    {
        LocalSave.SetInt(FPS_KEY, Application.targetFrameRate = Mathf.Clamp(_fps, 30, 60));
    }
    public int GetFPSLimit()
    {
        return LocalSave.GetInt(FPS_KEY, 30);
    }
    public void LetFPSUnLimit()
    {
        Application.targetFrameRate = 1000;
    }
    private void OnSwitchAccount()
    {
        systemSettings.Clear();
        m_PlayerSyncCount = -1;
    }
    IEnumerator Co_WaitFewMinute()
    {
        yield return WaitingForSecondConst.WaitMS500;
        CameraManager.uiCamera.enabled = true;
    }
}
public enum SystemSwitch
{
    OtherPlayer,          //是否显示其他玩家
    HideMonster,   //是否显示普通小怪
}
public enum PlayerSyncCount
{
    None,
    Five = 5,
    Ten = 10,
    Fifteen = 15,
}
public enum GameQuality
{
    Low = 0,
    Medium = 1,
    High = 2,
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using System;
using Snxxz.UI;
using System.Collections;
public class SystemSetting : Singleton<SystemSetting>
{
    const string QUALITY_LEVEL_KEY = "GameQualityLevel";
    const string SOUND_VOLUME_KEY = "SoundRatioKey";  //音乐
    const string SOUND_EFFECT_KEY = "SoundEffect"; //音效
    const string GAMEFRAME_KEY = "GameFrameSetting";//垂直同步率
    public Dictionary<SystemSwitch, bool> systemSettings = new Dictionary<SystemSwitch, bool>();
    int m_PlayerSyncCount = -1;
    public event Action<SystemSwitch, bool> OnSettingChanged;
    public event Action qualityLevelChangeEvent;
    public event Action playerSyncCountChangeEvent;
    public event Action gameFrameChangeEvent;
    public SystemSetting()
    {
        DTC0102_tagCDBPlayer.switchAccountEvent += OnSwitchAccount;
    }
    ~SystemSetting()
    {
        DTC0102_tagCDBPlayer.switchAccountEvent -= OnSwitchAccount;
    }
    public void SetSoundVolume(float _volume)
    {
        LocalSave.SetFloat(SOUND_VOLUME_KEY, Mathf.Clamp01(_volume));
        SoundPlayer.Instance.musicAudioSource.volume = Mathf.Clamp01(_volume);
    }
    public float GetSoundVolume()
    {
        return LocalSave.GetFloat(SOUND_VOLUME_KEY, 1);
    }
    public void SetSoundEffect(float value)
    {
        LocalSave.SetFloat(SOUND_EFFECT_KEY, Mathf.Clamp01(value));
    }
    public float GetSoundEffect()
    {
        return LocalSave.GetFloat(SOUND_EFFECT_KEY, 1);
    }
    public void SetGameFps(GameFps _frame)
    {
        LocalSave.SetInt(GAMEFRAME_KEY, (int)_frame);
        Application.targetFrameRate = Mathf.Clamp((int)_frame, 30, 60);
        if (gameFrameChangeEvent != null)
        {
            gameFrameChangeEvent();
        }
    }
    public GameFps GetGameFps()
    {
        return (GameFps)LocalSave.GetInt(GAMEFRAME_KEY, (int)GameFps.Full);
    }
    public void SetSystemSettingSwitch(SystemSwitch type, bool _value)
    {
        SettingMgr.Instance.SetAccountSetStr(type.ToString(), _value.ToString());
        systemSettings[type] = _value;
        if (OnSettingChanged != null)
        {
            OnSettingChanged(type, _value);
        }
    }
    public bool GetSystemSettingSwitch(SystemSwitch type)
    {
        if (systemSettings.ContainsKey(type))
        {
            return systemSettings[type];
        }
        else
        {
            return systemSettings[type] = SettingMgr.Instance.GetAccountSetBoolInfo(type.ToString()); ;
        }
    }
    public void SetPlayerSyncCount(int _syncCount)
    {
        SettingMgr.Instance.SetAccountSetStr("PlayerSyncCount", _syncCount.ToString());
        if (m_PlayerSyncCount != _syncCount)
        {
            m_PlayerSyncCount = _syncCount;
            if (playerSyncCountChangeEvent != null)
            {
                playerSyncCountChangeEvent();
            }
        }
    }
    public int GetPlayerSyncCount()
    {
        if (m_PlayerSyncCount == -1)
        {
            var result = SettingMgr.Instance.GetAccountSetIntInfo("PlayerSyncCount");
            if (result == -1)
            {
                var quality = GetCurrentQualityLevel();
                switch (quality)
                {
                    case GameQuality.High:
                        m_PlayerSyncCount = 15;
                        break;
                    case GameQuality.Low:
                        m_PlayerSyncCount = 10;
                        break;
                    case GameQuality.Medium:
                        m_PlayerSyncCount = 5;
                        break;
                }
            }
            else
            {
                m_PlayerSyncCount = Mathf.Clamp(result, 0, 20);
            }
        }
        return m_PlayerSyncCount;
    }
    public void SetQualityLevel(GameQuality _quality, bool _disabeCamera = true)
    {
        LocalSave.SetInt(QUALITY_LEVEL_KEY, Mathf.Clamp((int)_quality, 0, 2));
        QualitySettings.SetQualityLevel(Mathf.Clamp((int)_quality, 0, 2));
        switch (_quality)
        {
            case GameQuality.Low:
                Shader.globalMaximumLOD = 250;
                Shader.DisableKeyword("QUALITY_HGH");
                Shader.DisableKeyword("QUALITY_MED");
                Shader.EnableKeyword("QUALITY_LOW");
                break;
            case GameQuality.Medium:
                Shader.globalMaximumLOD = 250;
                Shader.DisableKeyword("QUALITY_HGH");
                Shader.EnableKeyword("QUALITY_MED");
                Shader.DisableKeyword("QUALITY_LOW");
                break;
            case GameQuality.High:
                Shader.globalMaximumLOD = 500;
                Shader.EnableKeyword("QUALITY_HGH");
                Shader.DisableKeyword("QUALITY_MED");
                Shader.DisableKeyword("QUALITY_LOW");
                break;
        }
#if UNITY_ANDROID && !UNITY_EDITOR
        if (_disabeCamera)
        {
            CameraManager.uiCamera.enabled = false;
        }
        ResolutionUtility.AdjustResolution(_quality);
        if (_disabeCamera)
        {
            SnxxzGame.Instance.StartCoroutine(Co_WaitFewMinute());
        }
#endif
        if (qualityLevelChangeEvent != null)
        {
            qualityLevelChangeEvent();
        }
    }
    public GameQuality GetCurrentQualityLevel()
    {
        //目前看起来所有的安卓机跑高效果都可以接受,先给玩家默认设置高效果。
        if (Application.platform == RuntimePlatform.Android)
        {
            if (!LocalSave.HasKey(QUALITY_LEVEL_KEY))
            {
                var defaultQuality = GameQuality.High;
                //                 if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 3.5f * 1024)
                //                 {
                //                     defaultQuality = GameQuality.High;
                //                 }
                //                 else if (DeviceUtility.cpu >= 4 && DeviceUtility.memory > 2.5f * 1024)
                //                 {
                //                     defaultQuality = GameQuality.Medium; ;
                //                 }
                //                 else if (DeviceUtility.cpu > 1 && DeviceUtility.memory > 1.5f * 1024)
                //                 {
                //                     defaultQuality = GameQuality.Low;
                //                 }
                return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY, (int)defaultQuality);
            }
            else
            {
                return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY);
            }
        }
        else
        {
            return (GameQuality)LocalSave.GetInt(QUALITY_LEVEL_KEY, (int)GameQuality.High);
        }
    }
    public void LetFPSUnLimit()
    {
        Application.targetFrameRate = 1000;
    }
    private void OnSwitchAccount()
    {
        systemSettings.Clear();
        m_PlayerSyncCount = -1;
    }
    private GameFps GetRecommendFps()
    {
        if (Screen.width * Screen.height > (1920 * 1080 + 10000))
        {
            return GameFps.Half;
        }
        else
        {
            return GameFps.Full;
        }
    }
    IEnumerator Co_WaitFewMinute()
    {
        yield return WaitingForSecondConst.WaitMS500;
        CameraManager.uiCamera.enabled = true;
    }
}
public enum SystemSwitch
{
    OtherPlayer,          //是否显示其他玩家
    HideMonster,   //是否显示普通小怪
}
public enum PlayerSyncCount
{
    None,
    Five = 5,
    Ten = 10,
    Fifteen = 15,
}
public enum GameQuality
{
    Low = 0,
    Medium = 1,
    High = 2,
}
public enum GameFps
{
    Free = -1,
    Half = 30,
    Full = 60,
}