| | |
| | | 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,
|
| | | } |