using System; using Sirenix.OdinInspector; using SLSUtilities.Feedback; using UnityEngine; namespace Cielonos.MainGame.Effects.Feedback { /// /// 黑白闪反馈动作,通过 StrobeFlashShakeEvent 触发 StrobeFlashShaker。 /// [Serializable] [FeedbackActionColor(1.0f, 0.9f, 0.3f)] public class StrobeFlashAction : PostprocessingActionBase { public override string DisplayName => "Strobe Flash"; // ─── Frequency ─── [TitleGroup("频率设置")] [LabelText("频率模式")] public StrobeFrequencyMode frequencyMode = StrobeFrequencyMode.Constant; [TitleGroup("频率设置")] [ShowIf("@frequencyMode == StrobeFrequencyMode.Constant")] [LabelText("固定频率")] [Range(0f, 100f)] public float constantFrequency = 15f; [TitleGroup("频率设置")] [ShowIf("@frequencyMode == StrobeFrequencyMode.Curve")] [LabelText("频率曲线")] public FloatCurveChannel frequencyCurve = FloatCurveChannel.CreateDefault(remapMax: 30f); [TitleGroup("频率设置")] [ShowIf("@frequencyMode == StrobeFrequencyMode.Manual")] [LabelText("手动曲线(Y >= 1 时翻转)")] public AnimationCurve manualCurve = AnimationCurve.Constant(0f, 1f, 0f); // ─── Color High ─── [TitleGroup("颜色设置")] [LabelText("修改高颜色")] public bool modifyColorHigh; [TitleGroup("颜色设置")] [ShowIf("modifyColorHigh")] [LabelText("使用渐变色")] public bool useColorHighGradient; [TitleGroup("颜色设置")] [ShowIf("@modifyColorHigh && !useColorHighGradient")] [LabelText("高颜色")] public Color colorHighConstant = Color.white; [TitleGroup("颜色设置")] [ShowIf("@modifyColorHigh && useColorHighGradient")] [LabelText("高颜色渐变")] public ColorCurveChannel colorHighCurve = ColorCurveChannel.CreateDefault(); // ─── Color Low ─── [TitleGroup("颜色设置")] [LabelText("修改低颜色")] public bool modifyColorLow; [TitleGroup("颜色设置")] [ShowIf("modifyColorLow")] [LabelText("使用渐变色")] public bool useColorLowGradient; [TitleGroup("颜色设置")] [ShowIf("@modifyColorLow && !useColorLowGradient")] [LabelText("低颜色")] public Color colorLowConstant = Color.black; [TitleGroup("颜色设置")] [ShowIf("@modifyColorLow && useColorLowGradient")] [LabelText("低颜色渐变")] public ColorCurveChannel colorLowCurve = ColorCurveChannel.CreateDefault(); protected override void TriggerEvent(FeedbackContext context) { StrobeFlashShakeEvent.Trigger( context, frequencyMode, constantFrequency, frequencyCurve, manualCurve, modifyColorHigh, useColorHighGradient, colorHighConstant, colorHighCurve, modifyColorLow, useColorLowGradient, colorLowConstant, colorLowCurve ); } protected override void StopEvent(FeedbackContext context) { StrobeFlashShakeEvent.Trigger(context, stop: true); } public override bool Validate(out string error) { error = null; return true; } } }