yyl
2 天以前 1ffebec3376d225a8b791f27594e51d3237f9b85
125 战斗相关开关设置
4个文件已添加
9个文件已修改
422 ■■■■■ 已修改文件
Main/Component/UI/Core/ToggleEx.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BuffMountAction.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BuffUnmountAction.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/StoryBattleField.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleHUDWin.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattlePerformSwitch.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattlePerformSwitch.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattleSwitch.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattleSwitch.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/BattleHeroInfoBar.cs 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/PlayerProfile/SystemSetWin.cs 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/SystemSetting/SystemSetting.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Core/ToggleEx.cs
@@ -12,9 +12,39 @@
        set { this.m_Audio = value; }
    }
    public GameObject activates;
    public GameObject deactivates;
    protected override void OnEnable()
    {
        base.OnEnable();
        onValueChanged.AddListener(CustomChanged);
    }
    protected override void OnDisable()
    {
        base.OnDisable();
        onValueChanged.RemoveListener(CustomChanged);
    }
    protected void CustomChanged(bool isOn)
    {
        // 使用 CanvasGroup 控制显隐,避免 SetActive 触发 Canvas 重建
        if (activates != null)
        {
            var canvasGroup = activates.AddMissingComponent<CanvasGroup>();
            canvasGroup.alpha = isOn ? 1f : 0f;
            canvasGroup.interactable = isOn;
            canvasGroup.blocksRaycasts = isOn;
        }
        if (deactivates != null)
        {
            var canvasGroup = deactivates.AddMissingComponent<CanvasGroup>();
            canvasGroup.alpha = isOn ? 0f : 1f;
            canvasGroup.interactable = !isOn;
            canvasGroup.blocksRaycasts = !isOn;
        }
    }
    public override void OnPointerClick(PointerEventData eventData)
Main/System/Battle/BattleField/BattleField.cs
@@ -77,6 +77,8 @@
    public BattleSoundManager soundManager;
    public BattlePerformSwitch battleSwitch;
#if UNITY_EDITOR
    public static Dictionary<string, string> battleHpRecorder = new Dictionary<string, string>();
#endif
@@ -273,6 +275,11 @@
        {
            BattleHeroInfoBar.largestPackUIDAllObjectsMaxHp.Remove(guid);
        }
        BattleMapConfig battleMapConfig = BattleMapConfig.Get(MapID);
        //  主线MapID == 1
        battleSwitch = MapID == 1 ? BattleSwitch.storySwitch : BattleSwitch.nonStorySwitch;
    }
    protected void PreloadResources(List<TeamBase> redTeamList, List<TeamBase> blueTeamLis)
@@ -933,13 +940,20 @@
        return isFocus;
    }
    public virtual void PlayBuffAction(RecordAction buffAction, bool insert)
    public void PlayBuffAction(RecordAction buffAction, bool insert)
    {
        var targetPlayer = PackageRegeditEx.GetTargetRecordPlayer(this);
        if (insert)
            targetPlayer.ImmediatelyPlay(buffAction);
        if (battleSwitch.BuffAction)
        {
            var targetPlayer = PackageRegeditEx.GetTargetRecordPlayer(this);
            if (insert)
                targetPlayer.ImmediatelyPlay(buffAction);
            else
                targetPlayer.PlayRecord(buffAction);
        }
        else
            targetPlayer.PlayRecord(buffAction);
        {
            buffAction.ForceFinish();
        }
    }
Main/System/Battle/BattleField/RecordActions/BuffMountAction.cs
@@ -66,6 +66,9 @@
            return;
        }
        //  加buff(onComplete写了)
        onComplete?.Invoke();
        //  1帧就结束了 不管
        base.ForceFinish();
    }
Main/System/Battle/BattleField/RecordActions/BuffUnmountAction.cs
@@ -43,6 +43,8 @@
        {
            return;
        }
        onComplete?.Invoke();
        //  1帧就结束了 不管
        base.ForceFinish();
Main/System/Battle/BattleField/StoryBattleField.cs
@@ -370,8 +370,4 @@
        return true;
    }
    public override void PlayBuffAction(RecordAction buffAction, bool insert)
    {
        buffAction.ForceFinish();
    }
}
Main/System/Battle/BattleHUDWin.cs
@@ -121,8 +121,14 @@
    private void OnDamageTaken(BattleDmgInfo damageInfo)
    {
        SetTargetDamage(damageInfo);
        SetSelfDamage(damageInfo);
        if (battleField != null)
        {
            if (battleField.battleSwitch.DamageTips)
            {
                SetTargetDamage(damageInfo);
                SetSelfDamage(damageInfo);
            }
        }
    }
    private void OnSpeedRatioChange(float newSpeedRatio)
Main/System/Battle/Define/BattlePerformSwitch.cs
New file
@@ -0,0 +1,94 @@
using System;
[Serializable]
public class BattlePerformSwitch
{
    private bool _buffAction = true;
    private bool _buffIcon = true;
    private bool _nonDamageTips = true;
    private bool _damageTips = true;
// 1·buff动画:buff飘字过程
// battleField.PlayBuffAction
    public bool BuffAction
    {
        get => _buffAction;
        set
        {
            if (_buffAction != value)
            {
                _buffAction = value;
                Save();
            }
        }
    }
// 2·buff图标:头顶buff图标(不包含命格)
// heroInfoBar.RefreshBuff
    public bool BuffIcon
    {
        get => _buffIcon;
        set
        {
            if (_buffIcon != value)
            {
                _buffIcon = value;
                Save();
            }
        }
    }
// 3·非伤害飘字:过滤掉伤害之外的所有飘字
// battleObject.ShowTips
//     HeroBattleObject.ShowTips
//         heroInfoBar.ShowTips(2个)
//             heroInfoBar.PopUpTipsDirectly
    public bool NonDamageTips
    {
        get => _nonDamageTips;
        set
        {
            if (_nonDamageTips != value)
            {
                _nonDamageTips = value;
                Save();
            }
        }
    }
// 4·伤害飘字:仅伤害飘字
//     BattleHUDWin.OnDamageTaken
    public bool DamageTips
    {
        get => _damageTips;
        set
        {
            if (_damageTips != value)
            {
                _damageTips = value;
                Save();
            }
        }
    }
    // 是否为主线 非主线就是其他全部
    public bool IsStory = true;
    public void Load()
    {
        string prefix = IsStory ? "StoryPerform_" : "NonStoryPerform_";
        _buffAction = LocalSave.GetBool(prefix + "BuffAction", true);
        _buffIcon = LocalSave.GetBool(prefix + "BuffIcon", true);
        _nonDamageTips = LocalSave.GetBool(prefix + "NonDamageTips", true);
        _damageTips = LocalSave.GetBool(prefix + "DamageTips", true);
    }
    public void Save()
    {
        string prefix = IsStory ? "StoryPerform_" : "NonStoryPerform_";
        LocalSave.SetBool(prefix + "BuffAction", BuffAction);
        LocalSave.SetBool(prefix + "BuffIcon", BuffIcon);
        LocalSave.SetBool(prefix + "NonDamageTips", NonDamageTips);
        LocalSave.SetBool(prefix + "DamageTips", DamageTips);
    }
}
Main/System/Battle/Define/BattlePerformSwitch.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d9741c9e2ae13c14da895355d99da907
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Battle/Define/BattleSwitch.cs
New file
@@ -0,0 +1,16 @@
public static class BattleSwitch
{
    static BattleSwitch()
    {
        storySwitch = new BattlePerformSwitch() { IsStory = true };
        nonStorySwitch = new BattlePerformSwitch() { IsStory = false };
        storySwitch.Load();
        nonStorySwitch.Load();
    }
    public static readonly BattlePerformSwitch storySwitch;
    public static readonly BattlePerformSwitch nonStorySwitch;
}
Main/System/Battle/Define/BattleSwitch.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5d5180c1d4f068c49973dffa5f35a843
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -137,18 +137,7 @@
    
    public void RefreshBuff(List<HB428_tagSCBuffRefresh> datas)
    {
        if (battleObject.battleField is StoryBattleField)
        {
            return;
        }
        if (buffCells == null)
        {
            for (int i = 0; i < buffCells.Count; i++)
            {
                buffCells[i].SetActive(false);
            }
        }
        else
        if (battleObject.battleField.battleSwitch.BuffIcon && datas != null && datas.Count > 0)
        {
            for (int i = 0; i < buffCells.Count; i++)
            {
@@ -166,6 +155,13 @@
                {
                    buffCells[i].SetActive(false);
                }
            }
        }
        else
        {
            for (int i = 0; i < buffCells.Count; i++)
            {
                buffCells[i].SetActive(false);
            }
        }
@@ -197,26 +193,33 @@
        // Debug.LogError($"[BattleHeroInfoBar.RefreshBuff] 设置护盾 - curHp: {curHp}, shieldValue: {shieldValue}, maxHp: {maxHp}, shield1前: {oldShield1Value}, shield1后: {shield1Value}, shield2前: {oldShield2Value}, shield2后: {shield2Value}");
    }
    
    /// <summary>
    /// 添加飘字到队列
    /// 添加飘字到队列(非伤害飘字)
    /// </summary>
    public void ShowTips(string message, bool useArtText = false, bool followCharacter = true, float scaleRatio = 1f)
    {
        messages.Add(new TipsInfo
        if (battleObject.battleField.battleSwitch.NonDamageTips)
        {
            message = message,
            useArtText = useArtText,
            followCharacter = followCharacter,
            scaleRatio = scaleRatio
        });
            messages.Add(new TipsInfo
            {
                message = message,
                useArtText = useArtText,
                followCharacter = followCharacter,
                scaleRatio = scaleRatio
            });
        }
    }
    /// <summary>
    /// 添加自定义飘字配置到队列
    /// 添加自定义飘字配置到队列(非伤害飘字)
    /// </summary>
    public void ShowTips(TipsInfo tipsInfo)
    {
        messages.Add(tipsInfo);
        if (battleObject.battleField.battleSwitch.NonDamageTips)
        {
            messages.Add(tipsInfo);
        }
    }
    
    /// <summary>
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;
        }
    }
}
Main/System/SystemSetting/SystemSetting.cs
@@ -13,6 +13,8 @@
    const string QUALITY_LEVEL_KEY = "GameQualityLevel";
    const string SOUND_VOLUME_KEY = "MusicKey";  //音乐
    const string SOUND_EFFECT_KEY = "SoundEffectKey"; //音效
    const string MUTE_MUSIC_KEY = "MuteMusicKey"; //静音音乐
    const string MUTE_SOUND_EFFECT_KEY = "MuteSoundEffectKey"; //静音音效
    const string GAMEFRAME_KEY = "GameFrameSetting";//垂直同步率
    public Dictionary<SystemSwitch, bool> systemSettings = new Dictionary<SystemSwitch, bool>();
@@ -56,6 +58,26 @@
        return LocalSave.GetFloat(SOUND_EFFECT_KEY, 0.6f);
    }
    public void SetMuteMusic(bool _mute)
    {
        LocalSave.SetBool(MUTE_MUSIC_KEY, _mute);
    }
    public bool GetMuteMusic()
    {
        return LocalSave.GetBool(MUTE_MUSIC_KEY, false);
    }
    public void SetMuteSoundEffect(bool _mute)
    {
        LocalSave.SetBool(MUTE_SOUND_EFFECT_KEY, _mute);
    }
    public bool GetMuteSoundEffect()
    {
        return LocalSave.GetBool(MUTE_SOUND_EFFECT_KEY, false);
    }
    public void SetGameFps(GameFps _frame)
    {
        LocalSave.SetInt(GAMEFRAME_KEY, (int)_frame);