Pointkit.cs
using Sandbox;
using System;

public sealed class Pointkit : Component, Component.ITriggerListener
{
	[Property] float PointAmount = 500f;

	HighscoreManager HighscoreManager;

	SceneTraceResult GroundTrace;
	int id = 0;
	Vector3 MittelPunkt;
	float SchwebeDistance = 50;
	float SchwebeFrequenz = 1f;

	protected override void OnStart()
	{
		HighscoreManager = Scene.Get<HighscoreManager>();

		// Checkt ground und setzt Mittelpunkt
		GroundTrace = Scene.Trace
			.Ray( WorldPosition, WorldPosition + Vector3.Down * 10000 )
			.Radius( 1 )
			.IgnoreGameObjectHierarchy( GameObject )
			.WithoutTags( "enemy", "player", "dead" )
			.Run();

		MittelPunkt = GroundTrace.EndPosition + Vector3.Up * 80;

		GameObject.WorldPosition = MittelPunkt;
	}

	protected override void OnFixedUpdate()
	{
		// Rotiert das Kit langsam um die Y-Achse
		// Zeit schiebt Sinusfunktion(Welle) voran, multipliziert mit Frequenz für enge oder weite Wellen, dann mit Distanz multiplizieren und auf MittelPunkt addieren

		Transform transform = new Transform( 
			MittelPunkt + Vector3.Up * (MathF.Sin( Time.Now * SchwebeFrequenz ) * SchwebeDistance),
			Rotation.From( 0, GameObject.WorldRotation.Yaw() + 0.2f, 0 ),
			WorldScale		
		);

		WorldTransform = transform;
	}

	public void OnTriggerEnter( GameObject other )
	{
		if ( !other.Tags.Has( "player" ) ) return;
		id++;
		if ( id > 1 ) return;
		Log.Info( $"Collided with {other.Name}" );

		HighscoreManager.IncreaseScore( PointAmount );
		Sound.Play( "sounds/medikitsound.sound", WorldPosition );

		GameObject.Parent.Destroy();

	}
}