using Games.GlobeDefine; using GCGame.Table; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; public class SystemLogic : MonoBehaviour { public void Start() { InitGraphicSetting(); InitBaseSetting(); InitPlayerInfo(); InitFuncSetting(); InitVoiceSetting(); _init = true; OnEnable(); } public void OnCloseClick() { UIManager.CloseUI(UIInfo.SystemAndAutoFight); } #region base setting public Toggle _BtnMusic; public Toggle _BtnSound; public Toggle _Shock; public Toggle _CameraShake; public Slider _SoundVolume; public Text _ViewPlayerCount; public Toggle[] _QualityToggles; public Toggle[] _hideToggles; public Toggle[] _EffectLimitToggles; public Toggle[] _TerrainQualityToggles; public void InitBaseSetting() { InitToggleVC(_BtnMusic, PlayerPreferenceData.SystemMusic); InitToggleVC(_BtnSound, PlayerPreferenceData.SystemSoundEffect); InitToggleVC(_Shock, PlayerPreferenceData.SystemShock); InitToggleVC(_CameraShake, PlayerPreferenceData.SystemCameraShake); _SoundVolume.value = PlayerPreferenceData.SystemSoundVolum; } public void OnMusic(bool on) { PlayerPreferenceData.SystemMusic.Set(on); } public void OnSoundEffect(bool on) { PlayerPreferenceData.SystemSoundEffect.Set(on); if (GameManager.gameManager.ActiveScene != null) GameManager.gameManager.ActiveScene.SetSceneSoundEffect(on); if (HitTipLogic.Instance()) HitTipLogic.Instance().RefreshVolumn(); } public void OnSoundVolume(float value) { PlayerPreferenceData.SystemSoundVolum = value; SoundManager.SetGlobalVolumn(value); if (HitTipLogic.Instance()) HitTipLogic.Instance().RefreshVolumn(); } #endregion #region playerInfo public Image _PlayerIcon; public Text _PlayerName; public Text _ServerName; public void InitPlayerInfo() { var strPlayerHeadPic = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.HeadPic; LoadAssetBundle.Instance.SetImageSprite(_PlayerIcon, strPlayerHeadPic); _PlayerName.text = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.RoleName; var lastServerData = LoginData.GetServerListDataByID(PlayerPreferenceData.LastServer); _ServerName.text = lastServerData.m_name; } public void OnAccountClick() { var dicStr = StrDictionary.GetClientDictionaryString("#{2897}"); MessageBoxLogic.OpenOKCancelBox(dicStr, "", OnAccountOK, OnMessageBoxNO); } public void OnAccountOK() { SdkControl.instance.Logout(); UIManager.CloseUI(UIInfo.SystemAndAutoFight); } public void OnMessageBoxNO() { } #endregion #region graphic setting public Toggle _Water; // public Toggle _Enlighten; public Toggle _Distortion; public Toggle _DymShadow; public Toggle _Fog; public Toggle _AntiAntialiasing; // public Toggle _Normal; public Toggle _TexQuality; //public Toggle _RoleEffect; public Toggle _DamageBoard; public Toggle _NameBoard; //public Toggle _SkillEffect; public Toggle _HighResolution; public Toggle _HighFrameRate; private bool _init; private bool _updateQuality = true; private UiToggleVCGroup _qualityToggles; private UiToggleVCGroup _effectLimitToggles; private UiToggleVCGroup _terrainToggles; private void InitGraphicSetting() { _qualityToggles = new UiToggleVCGroup(_QualityToggles); _qualityToggles.onToggleClick += OnQualityToggleClick; _terrainToggles = new UiToggleVCGroup(_TerrainQualityToggles); _terrainToggles.onToggleClick += OnTerrainQualityClick; _effectLimitToggles = new UiToggleVCGroup(_EffectLimitToggles); _effectLimitToggles.onToggleClick += OnEffectLimitClick; InitToggle(_NameBoard, PlayerPreferenceData.SystemNameBoard, null); InitToggle(_DamageBoard, PlayerPreferenceData.SystemDamageBoardEnable, null); InitToggleVC(_Water, PlayerPreferenceData.SystemWaterEffectEnable); InitToggleVC(_Distortion, PlayerPreferenceData.SystemQualityDistortion); InitToggleVC(_DymShadow, PlayerPreferenceData.SystemQualityDymShadow); InitToggleVC(_Fog, PlayerPreferenceData.SystemQualityFog); InitToggleVC(_AntiAntialiasing, PlayerPreferenceData.SystemQualityAntiAliasing); InitToggleVC(_TexQuality, PlayerPreferenceData.SystemQualityTexQuality); InitToggleVC(_HighResolution, PlayerPreferenceData.SystemQualityHighResolution); InitToggleVC(_HighFrameRate, PlayerPreferenceData.SystemQualityHighFrameRate); } private void OnEnable() { if (_init) { PlayerPreferenceData.SystemWaterEffectEnable.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityDistortion.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityDymShadow.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityFog.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityAntiAliasing.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityTexQuality.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityHighResolution.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityHighFrameRate.onSettingUpdate += OnBoolSettingUpdate; PlayerPreferenceData.SystemTerrainQuality.onSettingUpdate += OnIntSettingUpdate; PlayerPreferenceData.SystemTerrainQuality.onSettingUpdate += OnTerrainQualityUpdate; PlayerPreferenceData.EffectLimitLevel.onSettingUpdate += OnEffectLimitUpdate; PlayerPreferenceData.OtherPlayerHideMask.staticSetting.onSettingUpdate += OnOtherHideMask; PlayerPreferenceData.SystemHideFellow.staticSetting.onSettingUpdate += OnHideFellowUpdate; PlayerPreferenceData.EffectLimitLevel.onSettingUpdate += OnHideIntUpdate; PlayerPreferenceData.ShowOtherPlayerCount.onSettingUpdate += OnHideIntUpdate; PlayerPreferenceData.OtherPlayerHideMask.staticSetting.onSettingUpdate += OnHideIntUpdate; PlayerPreferenceData.SystemHideFellow.staticSetting.onSettingUpdate += OnHideBoolUpdate; PlayerPreferenceData.ShowOtherPlayerCount.onSettingUpdate += OnShowPlayerUpdate; OnShowPlayerUpdate(PlayerPreferenceData.ShowOtherPlayerCount); OnOtherHideMask(PlayerPreferenceData.OtherPlayerHideMask.staticSetting); OnHideFellowUpdate(PlayerPreferenceData.SystemHideFellow.staticSetting); OnQualityUpdate(); OnHideSettingUpdate(); _terrainToggles.SetToggle(PlayerPreferenceData.SystemTerrainQuality); _effectLimitToggles.SetToggle(PlayerPreferenceData.EffectLimitLevel); } } private void OnDisable() { if (!GameManager.applicationQuit) { PlayerPreferenceData.SystemWaterEffectEnable.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityDistortion.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityDymShadow.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityFog.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityAntiAliasing.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityTexQuality.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityHighResolution.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemQualityHighFrameRate.onSettingUpdate -= OnBoolSettingUpdate; PlayerPreferenceData.SystemTerrainQuality.onSettingUpdate -= OnIntSettingUpdate; PlayerPreferenceData.SystemTerrainQuality.onSettingUpdate -= OnTerrainQualityUpdate; PlayerPreferenceData.EffectLimitLevel.onSettingUpdate -= OnEffectLimitUpdate; PlayerPreferenceData.OtherPlayerHideMask.staticSetting.onSettingUpdate -= OnOtherHideMask; PlayerPreferenceData.SystemHideFellow.staticSetting.onSettingUpdate -= OnHideFellowUpdate; PlayerPreferenceData.EffectLimitLevel.onSettingUpdate -= OnHideIntUpdate; PlayerPreferenceData.ShowOtherPlayerCount.onSettingUpdate -= OnHideIntUpdate; PlayerPreferenceData.OtherPlayerHideMask.staticSetting.onSettingUpdate -= OnHideIntUpdate; PlayerPreferenceData.SystemHideFellow.staticSetting.onSettingUpdate -= OnHideBoolUpdate; PlayerPreferenceData.ShowOtherPlayerCount.onSettingUpdate -= OnShowPlayerUpdate; } } private void InitToggleVC(Toggle toggle, BooleanSetting booleanSetting) { var toggleVc = toggle.gameObject.EnsureComponent(); toggleVc.Init(booleanSetting); } private void OnIntSettingUpdate(int dummy) { OnQualityUpdate(); } private void OnBoolSettingUpdate(bool dummy) { OnQualityUpdate(); } private void OnQualityUpdate() { if (_updateQuality) { var current = new QualityLevelData(); current.MatchCurrent(); var qualityIndex = PlayerPreferenceData.qualityStandards.FindIndex(a => a.MatchLevel(current)); _qualityToggles.SetToggle(qualityIndex + 1); } } private void OnTerrainQualityUpdate(int level) { _terrainToggles.SetToggle(level); } private void OnQualityToggleClick(int qualityLevel) { // 屏蔽画质按钮更新,直到全部配置完成 var target = PlayerPreferenceData.qualityStandards[qualityLevel - 1]; _updateQuality = false; target.ApplyToCurrent(); _updateQuality = true; OnQualityUpdate(); } private void OnEffectLimitClick(int quality) { PlayerPreferenceData.EffectLimitLevel.Set(quality); } private void OnTerrainQualityClick(int quality) { PlayerPreferenceData.SystemTerrainQuality.Set(quality); } private static void InitToggle(Toggle toggle, BooleanSetting setting, UnityAction updateAction) { toggle.isOn = setting; toggle.onValueChanged.AddListener(isOn => { if (isOn != setting) { setting.Set(isOn); if (updateAction != null) updateAction(); } }); } #endregion #region function setting public Toggle _JoyStick; public Toggle _ScreenClick; public Toggle _SwitchTargetToPet; public Toggle _RefuseTeam; public Toggle _RefuseFriend; public Toggle _AutoTeamFollow; public Toggle _AutoRefit; public Toggle _AutoJoinTeam; public Toggle _AutoAllowTeam; public void InitFuncSetting() { _JoyStick.isOn = PlayerPreferenceData.SystemUseJoyStick; _ScreenClick.isOn = PlayerPreferenceData.SystemUseScreenClick; _AutoTeamFollow.isOn = PlayerPreferenceData.SystemAutoTeamFollow; _SwitchTargetToPet.isOn = PlayerPreferenceData.SystemSwitchTargetToPet; _RefuseTeam.isOn = PlayerPreferenceData.SystemRefuseTeam; _RefuseFriend.isOn = PlayerPreferenceData.SystemRefuseFriend; _AutoRefit.isOn = PlayerPreferenceData.AutoRefitEquip; _AutoJoinTeam.isOn = PlayerPreferenceData.AutoJoinTeam; _AutoAllowTeam.isOn = PlayerPreferenceData.AutoAllowTeam; } public void UseJoyStick(bool isOn) { PlayerPreferenceData.SystemUseJoyStick = isOn; } public void UseScreenClick(bool isOn) { PlayerPreferenceData.SystemUseScreenClick = isOn; } public void AutoTeamFollow(bool isOn) { PlayerPreferenceData.SystemAutoTeamFollow = isOn; } public void SwitchTargetToPet(bool isOn) { PlayerPreferenceData.SystemSwitchTargetToPet.Set(isOn); } public void RefuseTeam(bool isOn) { PlayerPreferenceData.SystemRefuseTeam = isOn; } public void RefuseFriend(bool isOn) { PlayerPreferenceData.SystemRefuseFriend = isOn; } public void AutoRefit(bool isOn) { PlayerPreferenceData.AutoRefitEquip = isOn; } public void AutoJoinTeam(bool isOn) { PlayerPreferenceData.AutoJoinTeam = isOn; } public void AutoAllowTeam(bool isOn) { PlayerPreferenceData.AutoAllowTeam = isOn; } #endregion #region voice setting public Toggle _VoiceWiFi; public Toggle _VoiceGuild; public Toggle _VoiceWorld; public Toggle _VoiceTeam; public Toggle _VoiceNearBy; public Toggle showWing; public Toggle showAura; public Toggle showRide; public Toggle showFellow; private UiToggleVCGroup _hideToggleVcGroup; public Slider _SliderViewPlayer; private bool _updateHide = true; private bool _updateShowPlayer = true; public void InitVoiceSetting() { _VoiceWiFi.isOn = PlayerPreferenceData.SystemAutoVoiceWiFi; _VoiceGuild.isOn = PlayerPreferenceData.SystemAutoVoiceGuild; _VoiceWorld.isOn = PlayerPreferenceData.SystemAutoVoiceWorld; _VoiceTeam.isOn = PlayerPreferenceData.SystemAutoVoiceTeam; _VoiceNearBy.isOn = PlayerPreferenceData.SystemAutoVoiceNearBy; OnOtherHideMask(PlayerPreferenceData.OtherPlayerHideMask.staticSetting); showWing.onValueChanged.AddListener(a => OnHideMaskToggle(ModelPart.wing, a)); showAura.onValueChanged.AddListener(a => OnHideMaskToggle(ModelPart.aura, a)); showRide.onValueChanged.AddListener(a => OnHideMaskToggle(ModelPart.mount, a)); showFellow.onValueChanged.AddListener(OnHideFellowToggle); _hideToggleVcGroup = new UiToggleVCGroup(_hideToggles); _hideToggleVcGroup.onToggleClick += OnHideToggleUpdate; OnHideFellowUpdate(PlayerPreferenceData.SystemHideFellow.staticSetting); _SliderViewPlayer.onValueChanged.AddListener(OnShowPlayerSlider); } private void OnShowPlayerUpdate(int value) { _ViewPlayerCount.text = value.ToString(); if (_updateShowPlayer) _SliderViewPlayer.value = Mathf.Clamp01((float) value / GlobeVar.SHOW_PLAYER_NUM_MAX); } private void OnShowPlayerSlider(float value) { _updateShowPlayer = false; var count = Mathf.FloorToInt(value * GlobeVar.SHOW_PLAYER_NUM_MAX); PlayerPreferenceData.ShowOtherPlayerCount.Set(count); _updateShowPlayer = true; } private void OnHideIntUpdate(int dummy) { OnHideSettingUpdate(); } private void OnHideBoolUpdate(bool dummy) { OnHideSettingUpdate(); } private void OnHideSettingUpdate() { if (_updateHide) { var current = new ModelHideLevel(); current.MatchCurrentStatic(); var qualityIndex = PlayerPreferenceData.modelHideLevels.FindIndex(a => a.MatchLevel(current)); _hideToggleVcGroup.SetToggle(qualityIndex + 1); } } private void OnHideToggleUpdate(int level) { // 屏蔽画质按钮更新,直到全部配置完成 var target = PlayerPreferenceData.modelHideLevels[level - 1]; _updateQuality = false; target.ApplyToStatic(); _updateQuality = true; OnHideSettingUpdate(); } private void OnEffectLimitUpdate(int level) { _effectLimitToggles.SetToggle(level); } private void OnHideFellowToggle(bool isOn) { PlayerPreferenceData.SystemHideFellow.SetStaticValue(isOn); } private void OnHideFellowUpdate(bool isOn) { showFellow.isOn = isOn; } private void OnHideMaskToggle(int modelPart, bool isOn) { var mask = PlayerPreferenceData.OtherPlayerHideMask.staticSetting.current; mask = mask.ReplaceFlag(modelPart.ToFlag(), isOn); PlayerPreferenceData.OtherPlayerHideMask.SetStaticValue(mask); } private void OnOtherHideMask(int hideMask) { showWing.isOn = hideMask.ContainFlag(ModelPart.wing.ToFlag()); showAura.isOn = hideMask.ContainFlag(ModelPart.aura.ToFlag()); showRide.isOn = hideMask.ContainFlag(ModelPart.mount.ToFlag()); } public void VoiceWiFi(bool isOn) { PlayerPreferenceData.SystemAutoVoiceWiFi = isOn; } public void VoiceGuild(bool isOn) { PlayerPreferenceData.SystemAutoVoiceGuild = isOn; } public void VoiceWorld(bool isOn) { PlayerPreferenceData.SystemAutoVoiceWorld = isOn; } public void VoiceTeam(bool isOn) { PlayerPreferenceData.SystemAutoVoiceTeam = isOn; } public void VoiceNearBy(bool isOn) { PlayerPreferenceData.SystemAutoVoiceNearBy = isOn; } #endregion }