Files
JJBB/Assets/Project/Script/GUI/Other/SystemLogic.cs
2024-08-23 15:49:34 +08:00

497 lines
17 KiB
C#

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<UiToggleToSetting>();
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
}