Files
Cielonos/Assets/Scripts/MainGame/Effects/Feedbacks/Actions/Postprocessing/StrobeFlashAction.cs

106 lines
3.5 KiB
C#
Raw Normal View History

2026-04-18 13:57:19 -04:00
using System;
using Sirenix.OdinInspector;
using SLSUtilities.Feedback;
using UnityEngine;
namespace Cielonos.MainGame.Effects.Feedback
{
/// <summary>
/// 黑白闪反馈动作,通过 StrobeFlashShakeEvent 触发 StrobeFlashShaker。
/// </summary>
[Serializable]
[FeedbackActionColor(1.0f, 0.9f, 0.3f)]
public class StrobeFlashAction : PostprocessingActionBase
{
public override string DisplayName => "Strobe Flash";
2026-04-30 07:06:38 -04:00
// ─── 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")]
2026-04-18 13:57:19 -04:00
[LabelText("频率曲线")]
2026-04-30 07:06:38 -04:00
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;
2026-04-18 13:57:19 -04:00
2026-04-30 07:06:38 -04:00
[TitleGroup("颜色设置")]
[ShowIf("@modifyColorHigh && !useColorHighGradient")]
2026-04-18 13:57:19 -04:00
[LabelText("高颜色")]
2026-04-30 07:06:38 -04:00
public Color colorHighConstant = Color.white;
2026-04-18 13:57:19 -04:00
2026-04-30 07:06:38 -04:00
[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")]
2026-04-18 13:57:19 -04:00
[LabelText("低颜色")]
2026-04-30 07:06:38 -04:00
public Color colorLowConstant = Color.black;
[TitleGroup("颜色设置")]
[ShowIf("@modifyColorLow && useColorLowGradient")]
[LabelText("低颜色渐变")]
public ColorCurveChannel colorLowCurve = ColorCurveChannel.CreateDefault();
2026-04-18 13:57:19 -04:00
protected override void TriggerEvent(FeedbackContext context)
{
StrobeFlashShakeEvent.Trigger(
context,
2026-04-30 07:06:38 -04:00
frequencyMode,
constantFrequency,
2026-04-18 13:57:19 -04:00
frequencyCurve,
2026-04-30 07:06:38 -04:00
manualCurve,
modifyColorHigh, useColorHighGradient, colorHighConstant, colorHighCurve,
modifyColorLow, useColorLowGradient, colorLowConstant, colorLowCurve
2026-04-18 13:57:19 -04:00
);
}
protected override void StopEvent(FeedbackContext context)
{
2026-04-30 07:06:38 -04:00
StrobeFlashShakeEvent.Trigger(context, stop: true);
2026-04-18 13:57:19 -04:00
}
public override bool Validate(out string error)
{
error = null;
return true;
}
}
}