yyl
3 天以前 1ffebec3376d225a8b791f27594e51d3237f9b85
Main/System/PlayerProfile/SystemSetWin.cs
@@ -6,6 +6,29 @@
    [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();
@@ -14,6 +37,8 @@
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        // 音量滑块
        musicSlider.onValueChanged.RemoveListener(OnSliderBgMusic);
        musicSlider.onValueChanged.AddListener(OnSliderBgMusic);
        soundEffectSlider.onValueChanged.RemoveListener(OnSliderSoundEffect);
@@ -21,6 +46,42 @@
        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()
@@ -37,4 +98,93 @@
    {
        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;
        }
    }
}