28 lines
812 B
C#
28 lines
812 B
C#
using OpenTK.Mathematics;
|
|
|
|
namespace DoomDeathmatch.Component.Physics.Collision;
|
|
|
|
public class ColliderForceFieldComponent : Engine.Scene.Component.Component
|
|
{
|
|
private AABBColliderComponent _collider = null!;
|
|
|
|
public override void Awake()
|
|
{
|
|
_collider = GameObject.GetComponent<AABBColliderComponent>()!;
|
|
_collider.OnCollision += OnCollision;
|
|
}
|
|
|
|
private void OnCollision(AABBColliderComponent parCollider)
|
|
{
|
|
var rigidbody = parCollider.GameObject.GetComponent<RigidbodyComponent>();
|
|
if (rigidbody == null)
|
|
return;
|
|
|
|
var normal = _collider.Collider.GetCollisionNormal(parCollider.Collider);
|
|
var speedAlongNormal = Vector3.Dot(rigidbody.Velocity, normal);
|
|
if (speedAlongNormal > 0)
|
|
return;
|
|
|
|
rigidbody.AddVelocity(-normal * (speedAlongNormal * 1.75f));
|
|
}
|
|
} |