Utilty/TemporaryNavBlocker.cs
namespace Opium.AI;
public partial class TemporaryNavBlocker : Component
{
float lifetime;
[Property] public float Lifetime
{
get => lifetime;
set
{
lifetime = value;
if ( value > 0f )
{
GameObject.DestroyAsync( Lifetime );
}
}
}
[Property] public Vector3 Scale { get; set; }
[Property] public Vector3 Center { get; set; }
protected override void OnEnabled()
{
var collider = GameObject.Components.Create<BoxCollider>();
collider.Scale = Scale;
collider.Center = Center;
Scene.NavMesh.SetDirty();
}
protected override void OnDestroy()
{
Scene.NavMesh.SetDirty();
}
static TimeSince TimeSinceUpdate = 0;
protected override void OnUpdate()
{
if ( TimeSinceUpdate > 1 )
{
TimeSinceUpdate = 0;
Scene.NavMesh.SetDirty();
}
}
/// <summary>
/// Creates a temporary nav blocker.
/// </summary>
/// <param name="pos"></param>
/// <param name="size"></param>
/// <param name="lifetime"></param>
/// <returns></returns>
public static TemporaryNavBlocker Create( Vector3 pos, Vector3 size, float lifetime = 10 )
{
var obj = Game.ActiveScene.CreateObject();
obj.Name = "Nav Blocker";
var blocker = obj.Components.Create<TemporaryNavBlocker>();
blocker.Scale = size;
blocker.Lifetime = lifetime;
obj.Transform.Position = pos;
return blocker;
}
}