NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_SettingController.cs

304 lines
9.0 KiB
C#
Raw Normal View History

2024-03-28 18:58:39 +08:00
using Cysharp.Threading.Tasks;
using Gameplay;
2023-11-06 19:06:05 +08:00
using TMPro;
2023-11-07 14:25:44 +08:00
using UnityEngine;
2024-03-28 18:58:39 +08:00
using UnityEngine.UI;
2023-11-06 19:06:05 +08:00
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Slider = UnityEngine.UI.Slider;
public class UI_SettingController : UIWindow
{
2023-12-07 19:58:28 +08:00
public Button Button_Close;
public Image Image_ScreenSet;
public TMP_Text Text_ScreenSet;
public TMP_Text Text_ImageQuality;
public Button Button_LowQ1;
public Button Button_LowQ2;
public Button Button_HighQ1;
public Button Button_HighQ2;
public Button Button_60F;
public Image Image_YPot_60;
public Image Image_BPot_60;
public Button Button_30F;
public Image Image_YPot_30;
public Image Image_BPot_30;
public Image Image_SoundSet;
public TMP_Text Text_SoundSet;
public TMP_Text Text_BGM;
public Button Button_Open_BGM;
public Button Button_Close_BGM;
public Slider Slider_HaveVoice_BGM;
public TMP_Text Text_Rate_BGM;
public Slider Slider_NoVoice_BGM;
public TMP_Text Text_Effect;
public Button Button_Open_Effect;
public Button Button_Close_Effect;
public Slider Slider_HaveVoice_Effect;
public TMP_Text Text_Rate_Effect;
public Slider Slider_NoVoice_Effect;
public TMP_Text Text_Talk;
public Button Button_Open_Talk;
public Button Button_Close_Talk;
public Slider Slider_HaveVoice_Talk;
public TMP_Text Text_Rate_Talk;
public Slider Slider_NoVoice_Talk;
public Button Button_Open_Map;
public Button Button_Close_Map;
public Button Button_Cancel;
public Button Button_Save;
2023-12-21 19:16:44 +08:00
public TMP_Text Text_PlayerID;
2023-12-07 19:58:28 +08:00
2024-03-28 18:58:39 +08:00
/// <summary>
/// 打开设置界面
/// </summary>
/// <returns></returns>
public static async UniTask<UIWindow> Open()
{
CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
2024-05-16 12:40:15 +08:00
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Setting);
2024-03-28 18:58:39 +08:00
}
/// <summary>
/// 高斯模糊遮罩
/// </summary>
private RawImage rawImageGaussianBlurMask;
2023-12-08 14:16:12 +08:00
private GameSettingData _settings;
2023-12-07 19:58:28 +08:00
2024-01-23 12:25:47 +08:00
public override void OnInit()
2023-12-07 19:58:28 +08:00
{
UI_SettingBinder.GetComponents(this);
2024-03-28 18:58:39 +08:00
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
rawImageGaussianBlurMask.texture = CommonUtils.screenTexture;
2023-12-08 14:16:12 +08:00
BindButton(Button_Close, () => CloseWindow());
2023-12-07 19:58:28 +08:00
BindButton(Button_LowQ2, LowQuality);
BindButton(Button_HighQ2, HighQuality);
BindButton(Button_60F, Set60FrameRate);
BindButton(Button_30F, Set30FrameRate);
BindButton(Button_Close_BGM, CloseBGM);
BindButton(Button_Close_Effect, CloseEffect);
BindButton(Button_Close_Talk, CloseTalk);
BindButton(Button_Open_BGM, OpenBGM);
BindButton(Button_Open_Effect, OpenEffect);
BindButton(Button_Open_Talk, OpenTalk);
2023-12-08 14:16:12 +08:00
BindButton(Button_Open_Map, OpenGrid);
BindButton(Button_Close_Map, CloseGrid);
2023-12-07 19:58:28 +08:00
BindButton(Button_Cancel, Cancel);
BindButton(Button_Save, Save);
2023-12-08 14:16:12 +08:00
Slider_HaveVoice_BGM.onValueChanged.AddListener(OnValueChangedBGM);
Slider_HaveVoice_Effect.onValueChanged.AddListener(OnValueChangedEffect);
Slider_HaveVoice_Talk.onValueChanged.AddListener(OnValueChangedTalk);
Slider_NoVoice_BGM.interactable = false;
Slider_NoVoice_Effect.interactable = false;
Slider_NoVoice_Talk.interactable = false;
Init();
}
2023-12-08 14:56:34 +08:00
public void OnEnable()
{
2023-12-08 14:16:12 +08:00
Init();
2023-12-07 19:58:28 +08:00
}
private void Init()
{
_settings = new GameSettingData(GameSettingManager.Instance.SettingData);
2023-12-21 19:16:44 +08:00
Text_PlayerID.text = $"账号ID{Gameplay.Net.Actor.Instance.Login.AccountID}";
2023-12-07 19:58:28 +08:00
InitSlider();
2023-12-08 14:56:34 +08:00
if (_settings.PerformanceID > 1)
2023-12-08 14:16:12 +08:00
HighQuality();
else
LowQuality();
if (_settings.FrameRate.Equals(30))
Set30FrameRate();
else
Set60FrameRate();
if (_settings.IsOpenGrid)
CloseGrid();
else
OpenGrid();
}
2023-12-07 19:58:28 +08:00
2023-12-08 14:16:12 +08:00
private void InitSlider()
{
Slider_HaveVoice_BGM.value = _settings.BGMValue;
Slider_NoVoice_BGM.value = _settings.BGMValue;
Slider_HaveVoice_Effect.value = _settings.EffectValue;
Slider_NoVoice_Effect.value = _settings.EffectValue;
Slider_HaveVoice_Talk.value = _settings.TalkValue;
Slider_NoVoice_Talk.value = _settings.TalkValue;
if (_settings.BGMValue <= 0)
CloseBGM();
else
OpenBGM();
if (_settings.EffectValue <= 0)
CloseEffect();
else
OpenEffect();
if (_settings.TalkValue <= 0)
CloseTalk();
else
OpenTalk();
2023-12-07 19:58:28 +08:00
}
private void HighQuality()
{
2023-12-08 14:56:34 +08:00
if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
_settings.PerformanceID = 2;
else
_settings.PerformanceID = 2;
2023-12-07 19:58:28 +08:00
Button_LowQ1.gameObject.SetActive(false);
Button_LowQ2.gameObject.SetActive(true);
Button_HighQ1.gameObject.SetActive(true);
Button_HighQ2.gameObject.SetActive(false);
}
private void LowQuality()
{
2023-12-08 14:56:34 +08:00
_settings.PerformanceID = 1;
2023-12-07 19:58:28 +08:00
Button_LowQ1.gameObject.SetActive(true);
Button_LowQ2.gameObject.SetActive(false);
Button_HighQ1.gameObject.SetActive(false);
Button_HighQ2.gameObject.SetActive(true);
}
private void Set60FrameRate()
{
2023-12-08 14:16:12 +08:00
_settings.FrameRate = 60;
2023-12-07 19:58:28 +08:00
Image_BPot_60.gameObject.SetActive(false);
Image_BPot_30.gameObject.SetActive(true);
}
private void Set30FrameRate()
{
2023-12-08 14:16:12 +08:00
_settings.FrameRate = 30;
2023-12-07 19:58:28 +08:00
Image_BPot_60.gameObject.SetActive(true);
Image_BPot_30.gameObject.SetActive(false);
}
private void CloseBGM()
{
2023-12-08 14:16:12 +08:00
_settings.BGMValue = 0;
2023-12-07 19:58:28 +08:00
Button_Open_BGM.gameObject.SetActive(true);
Slider_NoVoice_BGM.gameObject.SetActive(true);
Slider_HaveVoice_BGM.gameObject.SetActive(false);
}
private void CloseEffect()
{
2023-12-08 14:16:12 +08:00
_settings.EffectValue = 0;
2023-12-07 19:58:28 +08:00
Button_Open_Effect.gameObject.SetActive(true);
Slider_NoVoice_Effect.gameObject.SetActive(true);
Slider_HaveVoice_Effect.gameObject.SetActive(false);
}
private void CloseTalk()
{
2023-12-08 14:16:12 +08:00
_settings.TalkValue = 0;
2023-12-07 19:58:28 +08:00
Button_Open_Talk.gameObject.SetActive(true);
Slider_NoVoice_Talk.gameObject.SetActive(true);
Slider_HaveVoice_Talk.gameObject.SetActive(false);
}
private void OpenBGM()
{
Button_Open_BGM.gameObject.SetActive(false);
Slider_NoVoice_BGM.gameObject.SetActive(false);
Slider_HaveVoice_BGM.gameObject.SetActive(true);
if (Slider_HaveVoice_BGM.value <= 0)
Slider_HaveVoice_BGM.value = 0.5f;
2023-12-08 14:16:12 +08:00
_settings.BGMValue = Slider_HaveVoice_BGM.value;
2023-12-07 19:58:28 +08:00
}
private void OpenEffect()
{
Button_Open_Effect.gameObject.SetActive(false);
Slider_NoVoice_Effect.gameObject.SetActive(false);
Slider_HaveVoice_Effect.gameObject.SetActive(true);
if (Slider_HaveVoice_Effect.value <= 0)
Slider_HaveVoice_Effect.value = 0.5f;
2023-12-08 14:16:12 +08:00
_settings.EffectValue = Slider_HaveVoice_Effect.value;
2023-12-07 19:58:28 +08:00
}
private void OpenTalk()
{
Button_Open_Talk.gameObject.SetActive(false);
Slider_NoVoice_Talk.gameObject.SetActive(false);
Slider_HaveVoice_Talk.gameObject.SetActive(true);
if (Slider_HaveVoice_Talk.value <= 0)
Slider_HaveVoice_Talk.value = 0.5f;
2023-12-08 14:16:12 +08:00
_settings.TalkValue = Slider_HaveVoice_Talk.value;
2023-12-07 19:58:28 +08:00
}
2023-12-08 14:56:34 +08:00
2023-12-07 19:58:28 +08:00
private void OnValueChangedBGM(float value)
{
2023-12-08 14:16:12 +08:00
_settings.BGMValue = value;
FormatText(Text_Rate_BGM, value);
2023-12-07 19:58:28 +08:00
Slider_NoVoice_BGM.value = Slider_HaveVoice_BGM.value;
if (value <= 0)
CloseBGM();
}
private void OnValueChangedEffect(float value)
{
2023-12-08 14:16:12 +08:00
_settings.EffectValue = value;
FormatText(Text_Rate_Effect, value);
2023-12-07 19:58:28 +08:00
Slider_NoVoice_Effect.value = Slider_HaveVoice_Effect.value;
if (value <= 0)
CloseEffect();
}
private void OnValueChangedTalk(float value)
{
2023-12-08 14:16:12 +08:00
_settings.TalkValue = value;
FormatText(Text_Rate_Talk, value);
2023-12-07 19:58:28 +08:00
Slider_NoVoice_Talk.value = Slider_HaveVoice_Effect.value;
if (value <= 0)
CloseTalk();
}
2023-12-08 14:16:12 +08:00
private void OpenGrid()
{
_settings.IsOpenGrid = false;
Button_Close_Map.gameObject.SetActive(true);
}
private void CloseGrid()
{
_settings.IsOpenGrid = true;
Button_Close_Map.gameObject.SetActive(false);
}
private void FormatText(TMP_Text tmpText, float value)
{
tmpText.text = Mathf.RoundToInt(value * 100).ToString();
}
2023-12-07 19:58:28 +08:00
private void Save()
{
GameSettingManager.Instance.SaveNewSettings(_settings);
2024-04-30 14:31:46 +08:00
rawImageGaussianBlurMask.texture = CommonUtils.screenTexture;
2023-12-07 19:58:28 +08:00
}
private void Cancel()
{
2023-12-08 14:16:12 +08:00
GameSettingManager.Instance.RevertDefault();
Init();
2023-12-07 19:58:28 +08:00
}
2023-11-06 19:06:05 +08:00
}