KickCollider.cs
using Sandbox;
[Title( "Kick Collider" )]
[Category( "AI" )]
public sealed class KickCollider : Component, Component.ITriggerListener
{
[Property] public float TriggerRadius { get; set; } = 50f;
private bool _triggered = false;
protected override void OnStart()
{
var collider = Components.GetOrCreate<SphereCollider>();
collider.Radius = TriggerRadius;
collider.IsTrigger = true;
}
public void OnTriggerEnter( Collider other )
{
if ( _triggered ) return;
var player = other.GameObject.Components.Get<PlayerController>( FindMode.EverythingInSelfAndAncestors );
if ( player is null ) return;
_triggered = true;
if ( Networking.IsActive )
{
DisconnectPlayer( player.Network.Owner );
}
else
{
Game.Close();
}
}
[Rpc.Broadcast]
private void DisconnectPlayer( Connection target )
{
if ( Connection.Local != target ) return;
Game.Disconnect();
}
public void OnTriggerExit( Collider other ) { }
public void OnTriggerEnter( GameObject go ) { }
public void OnTriggerExit( GameObject go ) { }
protected override void DrawGizmos()
{
Gizmo.Draw.Color = Color.Red.WithAlpha( 0.2f );
Gizmo.Draw.LineSphere( Vector3.Zero, TriggerRadius );
}
}