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

304 lines
9.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Cysharp.Threading.Tasks;
using Gameplay;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using Button = UnityEngine.UI.Button;
using Image = UnityEngine.UI.Image;
using Slider = UnityEngine.UI.Slider;
public class UI_SettingController : UIWindow
{
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;
public TMP_Text Text_PlayerID;
/// <summary>
/// 打开设置界面
/// </summary>
/// <returns></returns>
public static async UniTask<UIWindow> Open()
{
await CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Setting);
}
/// <summary>
/// 高斯模糊遮罩
/// </summary>
private RawImage rawImageGaussianBlurMask;
private GameSettingData _settings;
public override void OnInit()
{
UI_SettingBinder.GetComponents(this);
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
BindButton(Button_Close, () => CloseWindow());
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);
BindButton(Button_Open_Map, OpenGrid);
BindButton(Button_Close_Map, CloseGrid);
BindButton(Button_Cancel, Cancel);
BindButton(Button_Save, Save);
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();
}
public void OnEnable()
{
Init();
}
private void Init()
{
_settings = new GameSettingData(GameSettingManager.Instance.SettingData);
Text_PlayerID.text = $"账号ID{Gameplay.Net.Actor.Instance.Login.AccountID}";
InitSlider();
if (_settings.PerformanceID > 1)
HighQuality();
else
LowQuality();
if (_settings.FrameRate.Equals(30))
Set30FrameRate();
else
Set60FrameRate();
if (_settings.IsOpenGrid)
CloseGrid();
else
OpenGrid();
}
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();
}
private void HighQuality()
{
if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
_settings.PerformanceID = 2;
else
_settings.PerformanceID = 2;
Button_LowQ1.gameObject.SetActive(false);
Button_LowQ2.gameObject.SetActive(true);
Button_HighQ1.gameObject.SetActive(true);
Button_HighQ2.gameObject.SetActive(false);
}
private void LowQuality()
{
_settings.PerformanceID = 1;
Button_LowQ1.gameObject.SetActive(true);
Button_LowQ2.gameObject.SetActive(false);
Button_HighQ1.gameObject.SetActive(false);
Button_HighQ2.gameObject.SetActive(true);
}
private void Set60FrameRate()
{
_settings.FrameRate = 60;
Image_BPot_60.gameObject.SetActive(false);
Image_BPot_30.gameObject.SetActive(true);
}
private void Set30FrameRate()
{
_settings.FrameRate = 30;
Image_BPot_60.gameObject.SetActive(true);
Image_BPot_30.gameObject.SetActive(false);
}
private void CloseBGM()
{
_settings.BGMValue = 0;
Button_Open_BGM.gameObject.SetActive(true);
Slider_NoVoice_BGM.gameObject.SetActive(true);
Slider_HaveVoice_BGM.gameObject.SetActive(false);
}
private void CloseEffect()
{
_settings.EffectValue = 0;
Button_Open_Effect.gameObject.SetActive(true);
Slider_NoVoice_Effect.gameObject.SetActive(true);
Slider_HaveVoice_Effect.gameObject.SetActive(false);
}
private void CloseTalk()
{
_settings.TalkValue = 0;
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;
_settings.BGMValue = Slider_HaveVoice_BGM.value;
}
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;
_settings.EffectValue = Slider_HaveVoice_Effect.value;
}
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;
_settings.TalkValue = Slider_HaveVoice_Talk.value;
}
private void OnValueChangedBGM(float value)
{
_settings.BGMValue = value;
FormatText(Text_Rate_BGM, value);
Slider_NoVoice_BGM.value = Slider_HaveVoice_BGM.value;
if (value <= 0)
CloseBGM();
}
private void OnValueChangedEffect(float value)
{
_settings.EffectValue = value;
FormatText(Text_Rate_Effect, value);
Slider_NoVoice_Effect.value = Slider_HaveVoice_Effect.value;
if (value <= 0)
CloseEffect();
}
private void OnValueChangedTalk(float value)
{
_settings.TalkValue = value;
FormatText(Text_Rate_Talk, value);
Slider_NoVoice_Talk.value = Slider_HaveVoice_Effect.value;
if (value <= 0)
CloseTalk();
}
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();
}
private void Save()
{
GameSettingManager.Instance.SaveNewSettings(_settings);
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
}
private void Cancel()
{
GameSettingManager.Instance.RevertDefault();
Init();
}
}