Player/Immersion/PlayerPostProcessing.cs
using Sandbox;
public sealed class PlayerPostProcessing : Component
{
[Property, Group( "Chromatic Aberration")] public ChromaticAberration CA { get; set; }
[Property, Group( "Chromatic Aberration" )] public float CAScale { get; set; } = 1f;
[Property, Group( "Chromatic Aberration" )] public float CATime { get; set; } = 0.2f;
[Property, Group( "Pixelate" )] public Pixelate Pixelate { get; set; }
[Property, Group( "Pixelate" )] public float PixelateTime { get; set; } = 0.2f;
[Property, Group( "Pixelate" )] public float PixelateScale { get; set; } = 0.05f;
[Property, Group( "Damage Taken Vignette #1" )] public Vignette DamageVignette { get; set; }
[Property, Group( "Damage Taken Vignette #1" )] public float DamageVignetteIntensity { get; set; } = 1f;
[Property, Group( "Damage Taken Vignette #1" )] public float DamageVigneteTime { get; set; } = 0.2f;
[Property, Group( "Damage Taken Vignette #1" )] public Curve DamageVignetteIntensityCurve { get; set; }
[Property, Group( "Throb Vignette" )] public float ThrobIntensity { get; set; } = 1f;
[Property, Group( "Throb Vignette" )] public float ThrobFrequency { get; set; } = 0.2f;
[Property, Group( "Throb Vignette" )] public Curve ThrobCurve { get; set; }
[Property] public Opium.PlayerController Player { get; set; }
protected override void OnUpdate()
{
var timeSinceDamage = Player.TimeSinceLastDamage.Relative;
var chromaticAberrationTime = timeSinceDamage.LerpInverse( CATime, 0.0f, true );
var pixelateTime = timeSinceDamage.LerpInverse( PixelateTime, 0.0f, true );
var damageVignetteTime = timeSinceDamage.LerpInverse( DamageVigneteTime, 0.0f, true );
var damageVignetteCurvedTime = DamageVignetteIntensityCurve.Evaluate( damageVignetteTime );
var now = Time.Now;
var hpDelta = Player.Health.Clamp( 0, 100f ).Remap( 75f, 25f, 0, 1f, true );
var throb = (MathF.Sin( now * ThrobFrequency ) + 1) / 2;
throb = ThrobCurve.Evaluate( throb );
var a = hpDelta * throb;
CA.Scale = chromaticAberrationTime * CAScale;
Pixelate.Scale = pixelateTime * PixelateScale;
DamageVignette.Intensity = damageVignetteCurvedTime * DamageVignetteIntensity;
DamageVignette.Intensity += a * ThrobIntensity;
}
}