From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Assets/Scripts/XMainClient/XQualitySetting.cs | 608 +++++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XQualitySetting.cs (limited to 'Client/Assets/Scripts/XMainClient/XQualitySetting.cs') diff --git a/Client/Assets/Scripts/XMainClient/XQualitySetting.cs b/Client/Assets/Scripts/XMainClient/XQualitySetting.cs new file mode 100644 index 00000000..ec980d31 --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XQualitySetting.cs @@ -0,0 +1,608 @@ +using System; +using System.Collections.Generic; +using KKSG; +using UnityEngine; +using XUtliPoolLib; + +namespace XMainClient +{ + public class XQualitySetting + { + private static XQualitySetting.XSetting[] _settings = new XQualitySetting.XSetting[] + { + new XQualitySetting.XSetting(), + new XQualitySetting.XSetting(), + new XQualitySetting.XSetting(), + new XQualitySetting.XSetting() + }; + + private static float[] _hallLayerculldistance = new float[32]; + + private static float[] _layerculldistance = new float[32]; + + public static Light mainLight = null; + + public static IFxPro fxPro = null; + + public static int VisibleRoleCountPerLevel = 5; + + private static int _VisibleRoleCount = 20; + + private static int _QualityLevel = -1; + + private static int _HardwareQualityLevel = -1; + + private static bool _IsPcOrSimulator = false; + + private static XQualitySetting.XSetting _CurrentSetting = null; + + public static bool _InHall = false; + + public static bool _CastShadow = false; + + public static float _FadeDistance = 81f; + + private static int _flag = 0; + + private static IEnvSetting _envSet; + + public static int width = 1136; + + public static int height = 640; + + public static float maxResolution = 640f; + + public static int _InvisiblityLayerOffset = 0; + + public static int _QualityHighLayerOffset = 0; + + public static int _QualityNormalLayerOffset = 0; + + public static int _UILayerOffset = 0; + + public static int _DefaultLayerOffset = 0; + + public static int InVisiblityLayer = 31; + + public static int UILayer = 5; + + public static int TerrainLayer = 9; + + public static float _WindSpeedFactor = 1f; + + public static int lowLevel = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.ESetting.ELow); + + public static int normalLevel = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.ESetting.ENormal); + + public static int heighLevel = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.ESetting.EHeigh); + + public static int veryHighLevel = XQualitySetting.heighLevel + 1; + + public static int numLevel = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.ESetting.ENum); + + public static int lowResolution = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.EResolution.ELow); + + public static int normalResolution = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.EResolution.ENormal); + + public static int heighResolution = XFastEnumIntEqualityComparer.ToInt(XQualitySetting.EResolution.EHeigh); + + public enum ESetting + { + ELow, + ENormal, + EHeigh, + EVeryHeigh, + ENum + } + + public enum EResolution + { + ELow, + ENormal, + EHeigh, + ENum + } + + public class XSetting + { + public bool _bloom = false; + + public float _CameraHall = 130f; + + public float _CameraWorld = 80f; + + public BlendWeights bw = (BlendWeights)1; + + public int _CullMask = -1; + + public bool _EnableFog = true; + + public int _ShaderLod = 600; + + public int _MaxParticelCount = 10; + } + + public static void Init() + { + XQualitySetting._InvisiblityLayerOffset = 1 << LayerMask.NameToLayer("InVisiblity"); + XQualitySetting._QualityHighLayerOffset = 1 << LayerMask.NameToLayer("QualityHigh"); + XQualitySetting._QualityNormalLayerOffset = 1 << LayerMask.NameToLayer("QualityNormal"); + XQualitySetting._UILayerOffset = 1 << LayerMask.NameToLayer("UI"); + XQualitySetting._DefaultLayerOffset = 1 << LayerMask.NameToLayer("Default"); + XQualitySetting.XSetting xsetting = XQualitySetting._settings[0]; + xsetting._bloom = false; + xsetting._CameraHall = 130f; + xsetting._CameraWorld = 80f; + xsetting.bw = (BlendWeights)1; + xsetting._CullMask = ~(XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + xsetting._EnableFog = false; + xsetting._ShaderLod = 100; + xsetting._MaxParticelCount = 3; + XQualitySetting.XSetting xsetting2 = XQualitySetting._settings[1]; + xsetting2._bloom = false; + xsetting2._CameraHall = 140f; + xsetting2._CameraWorld = 80f; + xsetting2.bw = (BlendWeights)2; + xsetting2._CullMask = (~XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + xsetting2._EnableFog = true; + xsetting2._ShaderLod = 200; + xsetting2._MaxParticelCount = 6; + XQualitySetting.XSetting xsetting3 = XQualitySetting._settings[2]; + xsetting3._bloom = false; + xsetting3._CameraHall = 150f; + xsetting3._CameraWorld = 90f; + xsetting3.bw = (BlendWeights)2; + xsetting3._CullMask = (XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + xsetting3._EnableFog = true; + xsetting3._ShaderLod = 600; + xsetting3._MaxParticelCount = 50; + XQualitySetting.XSetting xsetting4 = XQualitySetting._settings[3]; + xsetting4._bloom = true; + xsetting4._CameraHall = 150f; + xsetting4._CameraWorld = 90f; + xsetting4.bw = (BlendWeights)4; + xsetting4._CullMask = (XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + xsetting4._EnableFog = true; + xsetting4._ShaderLod = 600; + xsetting4._MaxParticelCount = 50; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("Npc")] = 35f; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("Resources")] = 35f; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("QualityHigh")] = 80f; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("QualityNormal")] = 50f; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("QualityCullDistance")] = 20f; + XQualitySetting._hallLayerculldistance[LayerMask.NameToLayer("Dummy")] = 25f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("Npc")] = 40f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("Role")] = 40f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("Enemy")] = 40f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("BigGuy")] = 60f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("QualityHigh")] = 60f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("QualityNormal")] = 40f; + XQualitySetting._layerculldistance[LayerMask.NameToLayer("QualityCullDistance")] = 20f; + } + + public static void SetQuality(int level, bool init = false) + { + bool flag = level >= 0; + if (flag) + { + if (init) + { + QualitySettings.SetQualityLevel(2); + XQualitySetting._IsPcOrSimulator = (level > XQualitySetting.veryHighLevel); + XQualitySetting._HardwareQualityLevel = level; + bool flag2 = XQualitySetting._HardwareQualityLevel == XQualitySetting.lowLevel; + if (flag2) + { + QualitySettings.pixelLightCount = 0; + QualitySettings.masterTextureLimit = 1; + QualitySettings.anisotropicFiltering =(AnisotropicFiltering) 0; + } + else + { + QualitySettings.pixelLightCount = 1; + QualitySettings.masterTextureLimit = 0; + QualitySettings.anisotropicFiltering = (AnisotropicFiltering)1; + } + QualitySettings.particleRaycastBudget = 2; + } + int num = (level > XQualitySetting.veryHighLevel) ? XQualitySetting.veryHighLevel : level; + bool flag3 = XQualitySetting._QualityLevel != num; + XQualitySetting.XSetting xsetting; + if (flag3) + { + XQualitySetting._QualityLevel = num; + xsetting = XQualitySetting._settings[XQualitySetting._QualityLevel]; + QualitySettings.blendWeights = xsetting.bw; + } + else + { + xsetting = XQualitySetting._settings[XQualitySetting._QualityLevel]; + } + XQualitySetting._CurrentSetting = xsetting; + } + } + + public static void InitResolution() + { + XQualitySetting.width = Screen.width; + XQualitySetting.height = Screen.height; + XOptionsDocument specificDocument = XDocuments.GetSpecificDocument(XOptionsDocument.uuID); + bool flag = specificDocument != null; + if (flag) + { + int value = specificDocument.GetValue(XOptionsDefine.OD_RESOLUTION); + XQualitySetting.SetResolution((XQualitySetting.EResolution)value, true); + } + } + + public static void SetResolution(XQualitySetting.EResolution resolution, bool force = false) + { + bool flag = (XQualitySetting._InHall || force) && ((int)Application.platform == 11 || (int)Application.platform == 8); + if (flag) + { + int num = XFastEnumIntEqualityComparer.ToInt(resolution); + bool flag2 = num == XQualitySetting.heighResolution; + if (flag2) + { + XQualitySetting.maxResolution = (float)XQualitySetting.height; + Screen.SetResolution(XQualitySetting.width, XQualitySetting.height, true); + } + else + { + bool flag3 = num == XQualitySetting.normalResolution; + if (flag3) + { + XQualitySetting.maxResolution = 1080f; + } + else + { + XQualitySetting.maxResolution = 720f; + } + float num2 = XQualitySetting.maxResolution / (float)XQualitySetting.height; + bool flag4 = num2 > 0.75f; + if (flag4) + { + num2 = 0.75f; + } + bool flag5 = num2 < 0.7f; + if (flag5) + { + num2 = 0.7f; + } + Screen.SetResolution((int)((float)XQualitySetting.width * num2), (int)((float)XQualitySetting.height * num2), true); + } + } + } + + public static int GetDefalutResolution() + { + bool flag = XQualitySetting.width > 1920; + int result; + if (flag) + { + result = XQualitySetting.normalResolution; + } + else + { + result = XQualitySetting.heighResolution; + } + return result; + } + + public static int SetVisibleRoleLevel(int level) + { + bool flag = level < 0; + if (flag) + { + level = 0; + } + else + { + bool flag2 = level > XQualitySetting.veryHighLevel; + if (flag2) + { + level = XQualitySetting.veryHighLevel; + } + } + XQualitySetting._VisibleRoleCount = level * XQualitySetting.VisibleRoleCountPerLevel + XQualitySetting.VisibleRoleCountPerLevel; + return XQualitySetting._VisibleRoleCount; + } + + public static int GetDefalutVisibleRoleLevel() + { + bool flag = XQualitySetting._HardwareQualityLevel == XQualitySetting.veryHighLevel; + int result; + if (flag) + { + result = XQualitySetting.veryHighLevel; + } + else + { + result = XQualitySetting._HardwareQualityLevel + 1; + } + return result; + } + + public static void GetDefalutVisibleRoleCount(out int min, out int max) + { + min = XQualitySetting.VisibleRoleCountPerLevel; + max = 4 * XQualitySetting.VisibleRoleCountPerLevel; + } + + public static int GetVisibleRoleCount() + { + return XQualitySetting._VisibleRoleCount; + } + + public static void PostSetQuality() + { + XQualitySetting._flag = 0; + XQualitySetting.SetQuality(EFun.ECamera, XQualitySetting._QualityLevel >= XQualitySetting.heighLevel); + XQualitySetting.SetQuality(EFun.ENpcShadow, XQualitySetting._QualityLevel >= XQualitySetting.heighLevel); + XQualitySetting.SetQuality(EFun.ERoleShadow, XQualitySetting._QualityLevel >= XQualitySetting.normalLevel); + XQualitySetting.SetQuality(EFun.EEnemyShadow, XQualitySetting._QualityLevel >= XQualitySetting.normalLevel); + XQualitySetting.SetQuality(EFun.ERealTimeShadow, XQualitySetting._QualityLevel >= XQualitySetting.heighLevel && XQualitySetting._HardwareQualityLevel >= XQualitySetting.veryHighLevel && (int)Application.platform != 11); + XQualitySetting.SetQuality(EFun.EFxPro, XQualitySetting._QualityLevel == XQualitySetting.veryHighLevel && XQualitySetting._HardwareQualityLevel >= XQualitySetting.veryHighLevel); + XQualitySetting.SetQuality(EFun.ESceneFade, XQualitySetting._QualityLevel >= XQualitySetting.normalLevel); + XQualitySetting.SetQuality(EFun.EFadeInOut, XQualitySetting._QualityLevel >= XQualitySetting.normalLevel); + bool settingEnum = XSingleton.singleton.GetSettingEnum(ESettingConfig.ELowEffect); + if (settingEnum) + { + XQualitySetting.SetQuality(EFun.ELowEffect, XQualitySetting._QualityLevel == XQualitySetting.lowLevel); + } + else + { + XQualitySetting.SetQuality(EFun.ELowEffect, false); + } + XQualitySetting.SetQuality(EFun.ECommonHigh, XQualitySetting._QualityLevel >= XQualitySetting.heighLevel && XQualitySetting._InHall); + } + + public static int GetQuality() + { + return XQualitySetting._QualityLevel; + } + + public static bool GetQuality(EFun fun) + { + return (XQualitySetting._flag & XFastEnumIntEqualityComparer.ToInt(fun)) != 0; + } + + public static void SetQuality(EFun fun, bool add) + { + if (add) + { + XQualitySetting._flag |= XFastEnumIntEqualityComparer.ToInt(fun); + } + else + { + XQualitySetting._flag &= ~XFastEnumIntEqualityComparer.ToInt(fun); + } + } + + public static XQualitySetting.XSetting GetCurrentQualitySetting() + { + return XQualitySetting._settings[XQualitySetting._QualityLevel]; + } + + public static bool SupportHighEffect() + { + return XQualitySetting._HardwareQualityLevel >= XQualitySetting.veryHighLevel && (int)Application.platform != 11; + } + + public static int GetDefaultQualityLevel() + { + bool isPcOrSimulator = XQualitySetting._IsPcOrSimulator; + int result; + if (isPcOrSimulator) + { + result = XQualitySetting.veryHighLevel; + } + else + { + result = ((XQualitySetting._HardwareQualityLevel > XQualitySetting.heighLevel) ? XQualitySetting.heighLevel : XQualitySetting._HardwareQualityLevel); + } + return result; + } + + public static void EnterScene() + { + XQualitySetting._InHall = false; + XQualitySetting.PostSetQuality(); + } + + public static void EnterHall() + { + XQualitySetting._InHall = true; + XQualitySetting.PostSetQuality(); + } + + public static void SwitchScene() + { + XQualitySetting._envSet = null; + } + + public static void PostSceneLoad() + { + Shader.SetGlobalFloat("uirim", 0f); + XQualitySetting._CastShadow = false; + XQualitySetting.mainLight = null; + GameObject gameObject = GameObject.Find("MainLight"); + bool flag = gameObject != null; + if (flag) + { + XQualitySetting.mainLight = gameObject.GetComponent(); + bool flag2 = XQualitySetting.mainLight != null; + if (flag2) + { + Color color = XQualitySetting.mainLight.color * XQualitySetting.mainLight.intensity; + Shader.SetGlobalColor("lightColor", color); + Vector3 vector = -gameObject.transform.forward.normalized; + Shader.SetGlobalVector("lightDir", new Vector4(vector.x, vector.y, vector.z, 1f)); + XQualitySetting.mainLight.shadows = 0; + bool flag3 = XQualitySetting.GetQuality(EFun.ERealTimeShadow) && !XSingleton.singleton.IsMustTransform; + if (flag3) + { + XQualitySetting._CastShadow = (gameObject.layer == XQualitySetting.TerrainLayer); + } + else + { + XQualitySetting._CastShadow = false; + } + } + } + ShadowMapInfo.EnableShadow(XQualitySetting._CastShadow); + } + + public static void PostSetting() + { + DateTime now = DateTime.Now; + int num = now.Hour * 3600 + now.Minute * 60 + now.Second; + bool flag = XQualitySetting._envSet != null; + if (flag) + { + SceneTable.RowData sceneData = XSingleton.singleton.SceneData; + bool flag2 = sceneData != null && sceneData.EnvSet.Count > 0; + if (flag2) + { + int i = 0; + int count = sceneData.EnvSet.Count; + while (i < count) + { + bool flag3 = num >= sceneData.EnvSet[i, 0] && num < sceneData.EnvSet[i, 1]; + if (flag3) + { + XQualitySetting._envSet.EnableSetting(sceneData.EnvSet[i, 2]); + break; + } + i++; + } + } + else + { + XQualitySetting._envSet.EnableSetting(0); + } + } + XQualitySetting._WindSpeedFactor = XSingleton.singleton.RandomFloat(0.5f, 2f); + XQualitySetting.fxPro = null; + bool flag4 = XQualitySetting._CurrentSetting != null; + if (flag4) + { + Camera unityCamera = XSingleton.singleton.GameCamera.UnityCamera; + bool flag5 = unityCamera != null; + if (flag5) + { + unityCamera.hdr = false; + bool flag6 = XQualitySetting._InHall || XSingleton.singleton.GetSceneType(XSingleton.singleton.SceneID) == SceneType.SCENE_CALLBACK; + if (flag6) + { + unityCamera.farClipPlane = XQualitySetting._CurrentSetting._CameraHall; + unityCamera.cullingMask &= ~(XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + unityCamera.cullingMask |= XQualitySetting._CurrentSetting._CullMask; + unityCamera.cullingMask &= ~XQualitySetting._InvisiblityLayerOffset; + unityCamera.cullingMask &= ~XQualitySetting._UILayerOffset; + unityCamera.layerCullDistances = XQualitySetting._hallLayerculldistance; + } + else + { + bool flag7 = unityCamera.farClipPlane < 300f || unityCamera.farClipPlane > 600f; + if (flag7) + { + unityCamera.farClipPlane = XQualitySetting._CurrentSetting._CameraWorld; + } + unityCamera.cullingMask &= ~(XQualitySetting._QualityHighLayerOffset | XQualitySetting._QualityNormalLayerOffset); + unityCamera.cullingMask |= XQualitySetting._CurrentSetting._CullMask; + unityCamera.layerCullDistances = XQualitySetting._layerculldistance; + unityCamera.cullingMask &= ~XQualitySetting._InvisiblityLayerOffset; + unityCamera.cullingMask &= ~XQualitySetting._UILayerOffset; + } + bool flag8 = (int)Application.platform == 8 || XQualitySetting._IsPcOrSimulator; + if (flag8) + { + XQualitySetting.fxPro = (unityCamera.GetComponent("FxPro") as IFxPro); + bool flag9 = XQualitySetting.fxPro != null; + if (flag9) + { + bool flag10 = XQualitySetting.GetQuality(EFun.EFxPro) || XSingleton.singleton.SceneType == SceneType.SCENE_LOGIN; + if (flag10) + { + XQualitySetting.fxPro.Enable(true); + } + else + { + XQualitySetting.fxPro.Enable(false); + } + } + } + XSingleton.singleton.CameraLayerMask = (unityCamera.cullingMask | XQualitySetting._UILayerOffset); + unityCamera.useOcclusionCulling = false; + } + bool flag11 = XQualitySetting._InHall && !XSingleton.singleton.switchScene; + if (flag11) + { + XQualitySetting.PostSceneLoad(); + XPlayer player = XSingleton.singleton.Player; + bool flag12 = player != null; + if (flag12) + { + XShadowComponent xshadowComponent = player.GetXComponent(XShadowComponent.uuID) as XShadowComponent; + bool flag13 = xshadowComponent != null; + if (flag13) + { + xshadowComponent.ProcessShadow(); + } + } + List all = XSingleton.singleton.GetAll(); + for (int j = 0; j < all.Count; j++) + { + XEntity xentity = all[j]; + bool flag14 = xentity.Equipment != null; + if (flag14) + { + xentity.Equipment.RefreshSuitFx(); + xentity.Equipment.RefreshEquipFx(); + xentity.Equipment.RefreshSecondWeaponFx(); + } + XShadowComponent xshadowComponent2 = xentity.GetXComponent(XShadowComponent.uuID) as XShadowComponent; + bool flag15 = xshadowComponent2 != null; + if (flag15) + { + xshadowComponent2.ProcessShadow(); + } + } + } + RenderSettings.fog = XQualitySetting._CurrentSetting._EnableFog; + Shader.globalMaximumLOD = XQualitySetting._CurrentSetting._ShaderLod; + XFxMgr.MaxParticelCount = XQualitySetting._CurrentSetting._MaxParticelCount; + } + } + + public static void SetEnvSet(IEnvSetting envSet) + { + XQualitySetting._envSet = envSet; + } + + public static void SetDofFade(float fade) + { + bool flag = XQualitySetting.fxPro != null; + if (flag) + { + XQualitySetting.fxPro.SetDofFade(fade); + } + } + + public static void Update() + { + bool flag = XQualitySetting._CurrentSetting != null && XQualitySetting._CurrentSetting._ShaderLod >= 400 && XSingleton.singleton.CurrentStage.Stage != EXStage.World; + if (flag) + { + Shader.SetGlobalFloat("_windSpeed", Mathf.Sin(XQualitySetting._WindSpeedFactor * Time.realtimeSinceStartup)); + } + Transform cameraTrans = XSingleton.singleton.GameCamera.CameraTrans; + bool flag2 = cameraTrans != null; + if (flag2) + { + Shader.SetGlobalVector("cameraPos", cameraTrans.position); + } + } + } +} -- cgit v1.1-26-g67d0