ExampleComponents/PlayerUse.cs
public sealed class PlayerUse : Component
{
CameraComponent camera { get; set; }
[Property] SoundEvent useSound { get; set; }
protected override void OnStart()
{
base.OnStart();
if ( IsProxy ) return;
camera = Scene.Camera;
}
protected override void OnUpdate()
{
if ( IsProxy ) return;
if ( !camera.IsValid() ) return;
if ( Input.Pressed( "use" ) )
{
Use();
}
}
void Use()
{
var tr = Scene.Trace.Ray( camera.WorldPosition, camera.WorldPosition + camera.WorldRotation.Forward * 100 )
.IgnoreGameObject( GameObject )
.Run();
if ( tr.Hit )
{
Sound.Play( useSound );
if ( tr.GameObject.Components.Get<BaseInteractor>() is BaseInteractor interactable )
{
interactable.OnUsed();
}
}
}
}