Weapons/Base/Effects/GetUpEffect.cs
using Sandbox.Utility;
namespace Opium;
public partial class GetUpEffect : WeaponEffect
{
[Property] public float Speed = 1.0f;
[Property] public float Size = 1.0f;
[Property] public Angles WindupAngles { get; set; }
[Property] public Curve WindupCurve { get; set; }
[Property] public Curve FOVCurve { get; set; }
[Property] public float FOVOffset { get; set; } = 10;
[Property] public Vector3 PositionOffset { get; set; }
[Property] public float PositionOffsetTime { get; set; }
[Property] public Curve PositionOffsetCurve { get; set; }
[Property] public float RandomTime { get; set; } = 0.5f;
public TimeUntil TimeUntilRandomStopped { get; set; }
TimeUntil TimeUntilPositionOffset { get; set; }
public bool Ping { get; set; }
protected override void OnEnabled()
{
base.OnEnabled();
TimeUntilPositionOffset = PositionOffsetTime;
TimeUntilRandomStopped = RandomTime;
}
protected override void OnDisabled()
{
base.OnDisabled();
Log.Info( "disabled" );
}
public override bool TickEffect()
{
Player.ExtraCamOffset = PositionOffset * PositionOffsetCurve.Evaluate( TimeUntilPositionOffset.Fraction );
var delta = TimeUntilRandomStopped.Fraction;
delta = Easing.EaseOut( delta );
Vector3 rand = Vector3.Random;
rand.z = 0;
rand = rand.Normal;
var rotation = Player.MainCamera.Transform.Rotation;
Player.CameraPositionOffset += (rotation.Right * rand.x + rotation.Up * rand.y) * (1 - delta) * Size;
var windupDelta = WindupCurve.Evaluate( Delta );
Player.CameraRotationOffset *= Rotation.From( WindupAngles.pitch * windupDelta, WindupAngles.yaw * windupDelta, WindupAngles.roll * windupDelta ); ;
Player.FieldOfViewOffset += FOVCurve.Evaluate( Delta ) * FOVOffset;
return base.TickEffect();
}
}