Ammokit.cs
using Sandbox;
using System;
public sealed class Ammokit : Component, Component.ITriggerListener
{
[Property] float RocketAmount = 5f;
SceneTraceResult GroundTrace;
int id = 0;
Vector3 MittelPunkt;
float SchwebeDistance = 50;
float SchwebeFrequenz = 1f;
protected override void OnStart()
{
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}" );
other.GetComponentInParent<GunControl>().CurrentRockets += RocketAmount;
Sound.Play( "sounds/medikitsound.sound", WorldPosition );
GameObject.Parent.Destroy();
}
}