Camera/DeathCameraEffect.cs
using Sandbox.Utility;

namespace Opium;

public partial class DeathCameraEffect : WeaponEffect
{
	public TimeUntil TimeUntilHitFloor { get; set; } = 0.5f;
	public TimeUntil TimeUntilRotated { get; set; } = 1.5f;

	[Property] public Curve HitFloorCurve { get; set; }
	[Property] public Curve RotationCurve { get; set; }

	[Property] public Vector3 PositionOffset { get; set; }
	[Property] public Angles Angles { get; set; }

	protected override void OnEnabled()
	{
		TimeUntilHitFloor = 0.5f;
		TimeUntilRotated = 1.5f;
	}

	public override bool TickEffect()
	{
		if ( Player is not null )
		{
			Player.CameraPositionOffset = PositionOffset * HitFloorCurve.Evaluate( TimeUntilHitFloor.Fraction.Clamp( 0, 1 ) );
			Player.CameraRotationOffset *= Rotation.From( Angles * RotationCurve.Evaluate( TimeUntilRotated.Fraction.Clamp( 0, 1 ) ) );
		}

		return false;
	}
}