Utility/CameraNoise/Shake.cs
using Sandbox.Utility;
namespace Sandbox.CameraNoise;
class Shake : BaseCameraNoise
{
float lifeTime;
float deathTime;
float amount = 0.0f;
public Shake( float amount, float time )
{
this.amount = amount * GamePreferences.Screenshake;
deathTime = time;
lifeTime = time;
}
public override bool IsDone => deathTime <= 0;
Vector3.SpringDamped damping;
public override void Update()
{
deathTime -= Time.Delta;
damping.Update( Time.Delta );
}
public override void ModifyCamera( CameraComponent cc )
{
var x = Noise.Perlin( Time.Now * 1000.0f, 2345 );
var y = Noise.Perlin( Time.Now * 1000.0f, 21 );
var z = Noise.Perlin( Time.Now * 1000.0f, 865 );
var delta = MathX.Remap( deathTime, 0, lifeTime, 0, 1 );
cc.WorldRotation *= new Angles( x, y, z ) * delta * amount;
}
}