using UnityEngine; namespace AibisDream.MiniGame.HuoShan { /// /// 波形配置 /// 定义各个模块的波形类型和视觉参数 /// [CreateAssetMenu(fileName = "WaveformConfig", menuName = AibisAssetMenus.HuoShanWaveform)] public class WaveformConfig : ScriptableObject { [Header("情绪模块波形 - 悲伤/焦虑/恐惧")] [Tooltip("低频、缓慢起伏、通过谐波叠加表达情绪")] public WaveformSettings emotionWaveform = new WaveformSettings { waveformId = "emotion", displayName = "情绪模块", waveType = WaveformType.Emotion, primaryColor = new Color(0.3f, 0.4f, 0.8f, 1f), // 深蓝色(悲伤) secondaryColor = new Color(0.5f, 0.3f, 0.7f, 1f), // 紫色(焦虑) waveHeight = 0.8f, waveSpeed = 0.8f, // 慢速,沉重感 frequency = 1f, // 谐波配置:基波为主,二次/三次谐波辅助 harmonicA1 = 0.55f, harmonicA2 = 0.28f, harmonicA3 = 0.12f, harmonicPhase2 = 0.3f, harmonicPhase3 = 0.5f, verticalOffset = -0.08f }; [Header("逻辑模块波形 - 简单方波(低幅度)")] [Tooltip("规则、简单、清晰的方波,幅度很低")] public WaveformSettings logicWaveform = new WaveformSettings { waveformId = "logic", displayName = "逻辑模块", waveType = WaveformType.Logic, primaryColor = new Color(0.2f, 0.8f, 0.4f, 1f), // 绿色 secondaryColor = new Color(0.3f, 0.9f, 0.5f, 1f), waveHeight = 0.25f, // 低幅度,方便被笑话"淹没"但形状可见 waveSpeed = 1.5f, frequency = 1f // 低频率,清晰的方波 }; [Header("被修改后的情绪 - 笑话/亢奋(高幅度尖锐)")] [Tooltip("高频、尖锐、快速起伏,幅度很高")] public WaveformSettings jokeWaveform = new WaveformSettings { waveformId = "joke", displayName = "笑话信号", waveType = WaveformType.Joke, primaryColor = new Color(1f, 0.6f, 0.2f, 1f), // 橙色(亢奋) secondaryColor = new Color(1f, 0.4f, 0.4f, 1f), // 红橙色 waveHeight = 1.0f, // 高幅度,尖锐的笑话信号 waveSpeed = 3f, frequency = 4f // 高频,快速变化 }; [Header("滤波器输出 - 真正的合成波形")] [Tooltip("逻辑 + 笑话波形的真实相加叠加")] public WaveformSettings filterOutputWaveform = new WaveformSettings { waveformId = "filter_output", displayName = "滤波器输出", waveType = WaveformType.FilterOutput, primaryColor = new Color(1f, 0.5f, 0.3f, 1f), secondaryColor = new Color(0.8f, 0.6f, 0.3f, 1f), waveHeight = 1.0f, waveSpeed = 2f, frequency = 2f // 使用中等频率,让合成效果更明显 }; [Header("合成参数")] [Tooltip("逻辑波形在合成中的权重(建议0.2-0.4,低但可见)")] [Range(0.1f, 1f)] public float logicSynthWeight = 0.3f; [Tooltip("笑话波形在合成中的权重(建议0.7-1.0,占主导)")] [Range(0.1f, 1f)] public float jokeSynthWeight = 0.85f; [Header("正常的滤波器输出")] [Tooltip("逻辑 + 正常情绪的混合(修复后)")] public WaveformSettings normalOutputWaveform = new WaveformSettings { waveformId = "normal_output", displayName = "滤波器输出(正常)", waveType = WaveformType.NormalOutput, primaryColor = new Color(0.4f, 0.7f, 0.8f, 1f), // 青色 secondaryColor = new Color(0.5f, 0.8f, 0.6f, 1f), waveHeight = 0.8f, waveSpeed = 1.5f, frequency = 1.5f }; /// /// 根据ID获取波形配置 /// public WaveformSettings GetWaveformById(string waveformId) { switch (waveformId) { case "emotion": case "emotion_sine": // 兼容旧ID return emotionWaveform; case "logic": case "logic_square": // 兼容旧ID return logicWaveform; case "joke": return jokeWaveform; case "filter_output": case "filter_sawtooth": // 兼容旧ID return filterOutputWaveform; case "normal_output": case "filter_normal": // 兼容旧ID return normalOutputWaveform; default: Debug.LogWarning($"未找到波形配置: {waveformId}"); return emotionWaveform; } } } /// /// 波形设置 /// [System.Serializable] public class WaveformSettings { [Tooltip("波形ID,用于在Yarn脚本中引用")] public string waveformId; [Tooltip("显示名称")] public string displayName; [Tooltip("波形类型")] public WaveformType waveType; [Tooltip("主颜色")] public Color primaryColor = Color.cyan; [Tooltip("次要颜色(用于渐变)")] public Color secondaryColor = Color.blue; [Tooltip("波形高度")] [Range(0.1f, 2f)] public float waveHeight = 1f; [Tooltip("波形速度")] [Range(0.1f, 10f)] public float waveSpeed = 2f; [Tooltip("波形频率")] [Range(0.5f, 10f)] public float frequency = 1f; [Header("谐波配置(用于情绪波形的傅里叶合成)")] [Tooltip("基波振幅(主导波形)")] [Range(0.1f, 1f)] public float harmonicA1 = 0.55f; [Tooltip("二次谐波振幅")] [Range(0f, 0.5f)] public float harmonicA2 = 0.28f; [Tooltip("三次谐波振幅")] [Range(0f, 0.3f)] public float harmonicA3 = 0.12f; [Tooltip("二次谐波相位偏移")] [Range(0f, 1f)] public float harmonicPhase2 = 0.3f; [Tooltip("三次谐波相位偏移")] [Range(0f, 1f)] public float harmonicPhase3 = 0.5f; [Tooltip("整体偏移(负值表示下沉,用于表达压抑感)")] [Range(-0.3f, 0.3f)] public float verticalOffset = -0.08f; } /// /// 波形类型 /// public enum WaveformType { /// 情绪模块 - 悲伤/焦虑/恐惧(低频、沉重、颤抖) Emotion, /// 逻辑模块 - 简单方波 Logic, /// 被修改后的情绪 - 笑话/亢奋(高频、尖锐) Joke, /// 滤波器输出 - 逻辑 + 笑话的混合(异常状态) FilterOutput, /// 滤波器输出 - 逻辑 + 正常情绪的混合(正常状态) NormalOutput, /// 波形变换中间态 Transforming } }