304 lines
9.0 KiB
C#
304 lines
9.0 KiB
C#
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();
|
||
}
|
||
} |