using UnityEngine;
|
using UnityEngine.UI;
|
|
public class SystemSetWin : UIBase
|
{
|
[SerializeField] Slider musicSlider;
|
[SerializeField] Slider soundEffectSlider;
|
|
// 静音音乐
|
[SerializeField] Toggle muteMusic;
|
|
// 静音音效
|
[SerializeField] Toggle muteSoundEffect;
|
|
|
// 主线战斗
|
[SerializeField] Toggle toggleStory;
|
// 非主线战斗
|
[SerializeField] Toggle toggleNonStory;
|
|
// 伤害飘字
|
[SerializeField] Toggle toggleDamageTips;
|
// 非伤害飘字
|
[SerializeField] Toggle toggleNonDamageTips;
|
// buff飘字
|
[SerializeField] Toggle toggleBuffFloatingTips;
|
// buff图标显示
|
[SerializeField] Toggle toggleBuffIconShow;
|
|
private BattlePerformSwitch currentSwitch;
|
|
protected override void InitComponent()
|
{
|
base.InitComponent();
|
}
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
|
// 音量滑块
|
musicSlider.onValueChanged.RemoveListener(OnSliderBgMusic);
|
musicSlider.onValueChanged.AddListener(OnSliderBgMusic);
|
soundEffectSlider.onValueChanged.RemoveListener(OnSliderSoundEffect);
|
soundEffectSlider.onValueChanged.AddListener(OnSliderSoundEffect);
|
|
musicSlider.value = SystemSetting.Instance.GetSoundVolume();
|
soundEffectSlider.value = SystemSetting.Instance.GetSoundEffect();
|
|
// 静音开关
|
muteMusic.onValueChanged.RemoveListener(OnMuteMusicChanged);
|
muteMusic.onValueChanged.AddListener(OnMuteMusicChanged);
|
muteSoundEffect.onValueChanged.RemoveListener(OnMuteSoundEffectChanged);
|
muteSoundEffect.onValueChanged.AddListener(OnMuteSoundEffectChanged);
|
|
muteMusic.isOn = SystemSetting.Instance.GetMuteMusic();
|
muteSoundEffect.isOn = SystemSetting.Instance.GetMuteSoundEffect();
|
|
// 应用静音状态
|
SoundPlayer.Instance.musicAudioSource.mute = muteMusic.isOn;
|
|
// 战斗类型切换(互斥)
|
toggleStory.onValueChanged.RemoveListener(OnToggleStoryChanged);
|
toggleStory.onValueChanged.AddListener(OnToggleStoryChanged);
|
toggleNonStory.onValueChanged.RemoveListener(OnToggleNonStoryChanged);
|
toggleNonStory.onValueChanged.AddListener(OnToggleNonStoryChanged);
|
|
// 默认选中主线战斗
|
toggleStory.isOn = true;
|
toggleNonStory.isOn = false;
|
currentSwitch = BattleSwitch.storySwitch;
|
|
// 战斗表现开关
|
toggleDamageTips.onValueChanged.RemoveListener(OnToggleDamageTipsChanged);
|
toggleDamageTips.onValueChanged.AddListener(OnToggleDamageTipsChanged);
|
toggleNonDamageTips.onValueChanged.RemoveListener(OnToggleNonDamageTipsChanged);
|
toggleNonDamageTips.onValueChanged.AddListener(OnToggleNonDamageTipsChanged);
|
toggleBuffFloatingTips.onValueChanged.RemoveListener(OnToggleBuffFloatingTipsChanged);
|
toggleBuffFloatingTips.onValueChanged.AddListener(OnToggleBuffFloatingTipsChanged);
|
toggleBuffIconShow.onValueChanged.RemoveListener(OnToggleBuffIconShowChanged);
|
toggleBuffIconShow.onValueChanged.AddListener(OnToggleBuffIconShowChanged);
|
|
// 初始化战斗表现开关的状态
|
RefreshBattlePerformToggles();
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
}
|
|
private void OnSliderSoundEffect(float arg0)
|
{
|
SystemSetting.Instance.SetSoundEffect(arg0);
|
}
|
|
private void OnSliderBgMusic(float arg0)
|
{
|
SystemSetting.Instance.SetSoundVolume(arg0);
|
}
|
|
private void OnMuteMusicChanged(bool value)
|
{
|
SystemSetting.Instance.SetMuteMusic(value);
|
SoundPlayer.Instance.musicAudioSource.mute = value;
|
}
|
|
private void OnMuteSoundEffectChanged(bool value)
|
{
|
SystemSetting.Instance.SetMuteSoundEffect(value);
|
// 音效静音可以通过控制音量实现,但不影响slider的值
|
// 这里需要控制所有音效源,可以使用SoundPlayer的全局控制
|
}
|
|
private void OnToggleStoryChanged(bool value)
|
{
|
if (value)
|
{
|
// ToggleGroup 会自动处理互斥,不需要手动设置另一个为 false
|
currentSwitch = BattleSwitch.storySwitch;
|
RefreshBattlePerformToggles();
|
}
|
}
|
|
private void OnToggleNonStoryChanged(bool value)
|
{
|
if (value)
|
{
|
// ToggleGroup 会自动处理互斥,不需要手动设置另一个为 false
|
currentSwitch = BattleSwitch.nonStorySwitch;
|
RefreshBattlePerformToggles();
|
}
|
}
|
|
private void RefreshBattlePerformToggles()
|
{
|
if (currentSwitch == null)
|
return;
|
|
// 临时移除监听器以避免循环触发
|
toggleDamageTips.onValueChanged.RemoveListener(OnToggleDamageTipsChanged);
|
toggleNonDamageTips.onValueChanged.RemoveListener(OnToggleNonDamageTipsChanged);
|
toggleBuffFloatingTips.onValueChanged.RemoveListener(OnToggleBuffFloatingTipsChanged);
|
toggleBuffIconShow.onValueChanged.RemoveListener(OnToggleBuffIconShowChanged);
|
|
// 更新UI状态
|
toggleDamageTips.isOn = currentSwitch.DamageTips;
|
toggleNonDamageTips.isOn = currentSwitch.NonDamageTips;
|
toggleBuffFloatingTips.isOn = currentSwitch.BuffAction;
|
toggleBuffIconShow.isOn = currentSwitch.BuffIcon;
|
|
// 重新添加监听器
|
toggleDamageTips.onValueChanged.AddListener(OnToggleDamageTipsChanged);
|
toggleNonDamageTips.onValueChanged.AddListener(OnToggleNonDamageTipsChanged);
|
toggleBuffFloatingTips.onValueChanged.AddListener(OnToggleBuffFloatingTipsChanged);
|
toggleBuffIconShow.onValueChanged.AddListener(OnToggleBuffIconShowChanged);
|
}
|
|
private void OnToggleDamageTipsChanged(bool value)
|
{
|
if (currentSwitch != null)
|
{
|
currentSwitch.DamageTips = value;
|
}
|
}
|
|
private void OnToggleNonDamageTipsChanged(bool value)
|
{
|
if (currentSwitch != null)
|
{
|
currentSwitch.NonDamageTips = value;
|
}
|
}
|
|
private void OnToggleBuffFloatingTipsChanged(bool value)
|
{
|
if (currentSwitch != null)
|
{
|
currentSwitch.BuffAction = value;
|
}
|
}
|
|
private void OnToggleBuffIconShowChanged(bool value)
|
{
|
if (currentSwitch != null)
|
{
|
currentSwitch.BuffIcon = value;
|
}
|
}
|
}
|