using Content.Server.NPC.Components;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Combat;
public sealed partial class JukeOperator : HTNOperator, IHtnConditionalShutdown
{
[Dependency] private readonly IEntityManager _entManager = default!;
[DataField]
public JukeType JukeType = JukeType.AdjacentTile;
[DataField]
public HTNPlanState ShutdownState { get; private set; } = HTNPlanState.PlanFinished;
///
/// Controls how long(in seconds) the NPC will move while juking.
///
[DataField]
public float JukeDuration = 0.5f;
///
/// Controls how often (in seconds) an NPC will try to juke.
///
[DataField]
public float JukeCooldown = 3f;
public override void Startup(NPCBlackboard blackboard)
{
base.Startup(blackboard);
var juke = _entManager.EnsureComponent(blackboard.GetValue(NPCBlackboard.Owner));
juke.JukeType = JukeType;
juke.JukeDuration = JukeDuration;
juke.JukeCooldown = JukeCooldown;
}
public override HTNOperatorStatus Update(NPCBlackboard blackboard, float frameTime)
{
return HTNOperatorStatus.Finished;
}
public void ConditionalShutdown(NPCBlackboard blackboard)
{
_entManager.RemoveComponent(blackboard.GetValue(NPCBlackboard.Owner));
}
}