Extension methods that create and register tweens for various post-processing components (FilmGrain, Bloom, Blur, ChromaticAberration, ColorAdjustments, Vignette, DepthOfField, Sharpen, Pixelate). Each method checks component validity, captures the start value on tween start, and linearly interpolates the property to the target over duration via TweenManager and BaseTween.
using Sandbox;
using System;
namespace SbTween;
public static class PostProcessingExtensions
{
// FilmGrain
public static BaseTween TweenIntensity( this FilmGrain pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Intensity;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Intensity )
.OnUpdate( p => pp.Intensity = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenResponse( this FilmGrain pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Response;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Response )
.OnUpdate( p => pp.Response = MathX.Lerp( start, target, p ) ) );
}
// Bloom
public static BaseTween TweenStrength( this Bloom pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Strength;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Strength )
.OnUpdate( p => pp.Strength = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenThreshold( this Bloom pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Threshold;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Threshold )
.OnUpdate( p => pp.Threshold = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenGamma( this Bloom pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Gamma;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Gamma )
.OnUpdate( p => pp.Gamma = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenTint( this Bloom pp, Color target, float duration )
{
if ( !pp.IsValid() ) return null;
Color start = pp.Tint;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Tint )
.OnUpdate( p => pp.Tint = Color.Lerp( start, target, p ) ) );
}
// Blur
public static BaseTween TweenSize( this Blur pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Size;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Size )
.OnUpdate( p => pp.Size = MathX.Lerp( start, target, p ) ) );
}
// ChromaticAberration
public static BaseTween TweenScale( this ChromaticAberration pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Scale;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Scale )
.OnUpdate( p => pp.Scale = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenOffset( this ChromaticAberration pp, Vector3 target, float duration )
{
if ( !pp.IsValid() ) return null;
Vector3 start = pp.Offset;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Offset )
.OnUpdate( p => pp.Offset = Vector3.Lerp( start, target, p ) ) );
}
// ColorAdjustments
public static BaseTween TweenBlend( this ColorAdjustments pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Blend;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Blend )
.OnUpdate( p => pp.Blend = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenSaturation( this ColorAdjustments pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Saturation;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Saturation )
.OnUpdate( p => pp.Saturation = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenHueRotate( this ColorAdjustments pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.HueRotate;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.HueRotate )
.OnUpdate( p => pp.HueRotate = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenBrightness( this ColorAdjustments pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Brightness;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Brightness )
.OnUpdate( p => pp.Brightness = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenContrast( this ColorAdjustments pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Contrast;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Contrast )
.OnUpdate( p => pp.Contrast = MathX.Lerp( start, target, p ) ) );
}
// Vignette
public static BaseTween TweenIntensity( this Vignette pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Intensity;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Intensity )
.OnUpdate( p => pp.Intensity = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenSmoothness( this Vignette pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Smoothness;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Smoothness )
.OnUpdate( p => pp.Smoothness = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenRoundness( this Vignette pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Roundness;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Roundness )
.OnUpdate( p => pp.Roundness = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenColor( this Vignette pp, Color target, float duration )
{
if ( !pp.IsValid() ) return null;
Color start = pp.Color;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Color )
.OnUpdate( p => pp.Color = Color.Lerp( start, target, p ) ) );
}
public static BaseTween TweenCenter( this Vignette pp, Vector2 target, float duration )
{
if ( !pp.IsValid() ) return null;
Vector2 start = pp.Center;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Center )
.OnUpdate( p => pp.Center = Vector2.Lerp( start, target, p ) ) );
}
// DepthOfField
public static BaseTween TweenBlurSize( this DepthOfField pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.BlurSize;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.BlurSize )
.OnUpdate( p => pp.BlurSize = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenFocalDistance( this DepthOfField pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.FocalDistance;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.FocalDistance )
.OnUpdate( p => pp.FocalDistance = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenFocusRange( this DepthOfField pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.FocusRange;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.FocusRange )
.OnUpdate( p => pp.FocusRange = MathX.Lerp( start, target, p ) ) );
}
// Sharpen
public static BaseTween TweenSharpen( this Sharpen pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Scale;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Scale )
.OnUpdate( p => pp.Scale = MathX.Lerp( start, target, p ) ) );
}
public static BaseTween TweenTexelSize( this Sharpen pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.TexelSize;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.TexelSize )
.OnUpdate( p => pp.TexelSize = MathX.Lerp( start, target, p ) ) );
}
// Pixelate
public static BaseTween TweenScale( this Pixelate pp, float target, float duration )
{
if ( !pp.IsValid() ) return null;
float start = pp.Scale;
return TweenManager.Instance.AddTween( new BaseTween( duration )
.OnStart( () => start = pp.Scale )
.OnUpdate( p => pp.Scale = MathX.Lerp( start, target, p ) ) );
}
}