Bombable.cs
using Sandbox;

namespace Facepunch.BombRoyale;

[Title( "Bombable" )]
[Category( "Bomb Royale" )]
public class Bombable : Component
{
	[Sync] public bool IsHidden { get; set; }

	[Property] public ModelRenderer Renderer { get; set; }
	[Property] public float SpawnPickupChance { get; set; } = 0.35f;
	
	public bool IsSpaceOccupied()
	{
		if ( !IsHidden ) return true;

		var bounds = Renderer.Bounds;
		
		var trace = Scene.Trace.Ray( bounds.Center, bounds.Center )
			.Radius( 8f )
			.WithAnyTags( "solid", "pickup", "player", "bomb" )
			.HitTriggers()
			.Run();

		return trace.Hit;
	}

	public void TrySpawnPickup()
	{
		if ( Game.Random.Float() < SpawnPickupChance )
		{
			Pickup.CreateRandom( Renderer.Bounds.Center );
		}
	}

	[Rpc.Broadcast( NetFlags.HostOnly )]
	public void Break()
	{
		BlockBreakEffect.Create( Scene, Renderer.Bounds.Center );
	}

	[Rpc.Broadcast( NetFlags.HostOnly )]
	public void Hide()
	{
		Renderer.Enabled = false;
		Tags.Add( "destroyed" );
		Tags.Add( "passable" );
		IsHidden = true;
	}
	
	protected override void OnAwake()
	{
		Tags.Add( "solid" );
		base.OnAwake();
	}
	
}