Weapons/Base/Effects/MeleeHitEffect.cs
using Sandbox.Utility;
namespace Opium;
public partial class MeleeHitEffect : WeaponEffect
{
[Property] public float Speed = 1.0f;
[Property] public float Size = 1.0f;
bool HasPassedDelay = false;
[Property] public float Delay { get; set; } = 0f;
async void AsyncDelay()
{
await GameTask.DelaySeconds( Delay );
HasPassedDelay = true;
TimeUntilDestroy = DestroyTime;
}
protected override void OnEnabled()
{
base.OnEnabled();
if ( Delay > 0f )
{
AsyncDelay();
}
}
public override bool TickEffect()
{
var delta = Delta;
delta = Easing.EaseOut( delta );
Vector3 rand = Vector3.Random;
rand.z = 0;
rand = rand.Normal;
if ( Player is not null )
{
var rotation = Player.MainCamera.Transform.Rotation;
Player.CameraPositionOffset += (rotation.Right * rand.x + rotation.Up * rand.y) * (1 - delta) * Size;
}
if ( Delay > 0f && !HasPassedDelay )
{
return false;
}
return base.TickEffect();
}
}