Files
ichni_Official/Assets/Scripts/Game/GameElements/GeneralEffects/BloomEffect.cs
2026-07-23 14:52:15 +08:00

71 lines
1.9 KiB
C#

using Ichni.RhythmGame.Beatmap;
using SLSUtilities.Rendering.PostProcessing;
using UnityEngine;
using UnityEngine.Rendering.Universal;
namespace Ichni.RhythmGame
{
public class BloomEffect : EffectBase
{
#region [] Effect Parameters
public float peak;
public AnimationCurve intensityCurve;
private AnimeBloom _bloom;
private static float _bloomBasicValue = -1;
#endregion
#region [] Initialization
public BloomEffect(float effectTime, float peak, AnimationCurve intensityCurve)
: base(effectTime) // 激活时间线
{
this.effectTime = effectTime;
this.peak = peak;
this.intensityCurve = intensityCurve;
}
private void PrepareEffectHandle()
{
if (_bloom == null && PostProcessingManager.GlobalVolume != null)
{
PostProcessingManager.GlobalVolume.profile.TryGet(out _bloom);
}
if (_bloomBasicValue < 0 && _bloom != null)
{
_bloomBasicValue = _bloom.intensity.value;
}
}
#endregion
#region [] Effect Pattern Overrides
public override void PreExecute()
{
PrepareEffectHandle();
}
public override void Execute()
{
if (_bloom != null)
{
float currentIntensity = intensityCurve.Evaluate(effectProgressPercent) * peak;
_bloom.intensity.value = _bloomBasicValue + currentIntensity;
}
}
public override void Adjust() { ResetEffect(); }
public override void Recover() { ResetEffect(); }
public override void Disrupt() { ResetEffect(); }
private void ResetEffect()
{
if (_bloom != null) _bloom.intensity.value = _bloomBasicValue;
}
#endregion
}
}