Weapons/ToolGun/Modes/RemoverTool.cs
[Icon( "🧨" )]
[Title( "#tool.name.remover" )]
[ClassName( "remover" )]
[Group( "#tool.group.tools" )]
public sealed class RemoverTool : ToolMode
{
	public override bool TraceHitboxes => true;
	public override string Description => "#tool.hint.remover.description";

	protected override void OnStart()
	{
		base.OnStart();

		RegisterAction( ToolInput.Primary, () => "#tool.hint.remover.remove", OnRemove );
	}

	bool CanDestroy( GameObject go )
	{
		if ( !go.IsValid() ) return false;
		if ( !go.Tags.Contains( "removable" ) ) return false;

		return true;
	}

	void OnRemove()
	{
		var select = TraceSelect();
		if ( !select.IsValid() ) return;

		var target = select.GameObject?.Network?.RootGameObject;
		if ( !target.IsValid() ) return;
		if ( !CanDestroy( target ) ) return;

		Remove( target );
		ShootEffects( select );
	}

	[Rpc.Host]
	public void Remove( GameObject go )
	{
		go = go?.Network?.RootGameObject;

		if ( !CanDestroy( go ) ) return;
		if ( go.IsProxy ) return;

		go.Destroy();
	}

}