Code/Components/KnockOnContact.cs
using Sandbox;
public sealed class KnockOnContact : Component, Component.ICollisionListener
{
[Property] public float Strength { get; set; } = 10f;
[Property] public Rigidbody Rigidbody { get; set; }
public void OnCollisionStart( Collision collision )
{
if ( !collision.Other.Collider.IsValid() )
return;
if ( collision.Other.Collider.Static )
return;
var direction = -collision.Contact.Normal;
direction = direction.LerpTo( Vector3.Up, 0.8f ).Normal;
var force = direction * Strength;
Rigidbody.ApplyImpulse( force );
}
public void OnCollisionStop( CollisionStop collision )
{
}
public void OnCollisionUpdate( Collision collision )
{
}
}