Components/LookAtTargetComponent.cs
using Andicraft.SecondOrderDynamics;
using Sandbox;
namespace Andicraft.SecondOrderDynamics.Components;
[Title( "Second Order Dynamics - Look At Target" ), Category("Second Order Dynamics")]
public class LookAtTargetComponent : Component
{
[Property] private GameObject LookAtTarget { get; set; }
[Property] private DynamicsParameters Parameters { get; set; } = new(1, 1.5f, .25f);
private RotationDynamics _rotationDynamics;
protected override void OnStart()
{
_rotationDynamics = new RotationDynamics( Parameters, WorldRotation );
}
protected override void OnUpdate()
{
if ( LookAtTarget == null ) return;
var targetRot = Rotation.LookAt( (LookAtTarget.WorldPosition - WorldPosition).Normal );
WorldRotation = _rotationDynamics.Update( Time.Delta, targetRot );
}
}