using Content.Shared.Actions;
using Content.Shared.Mobs.Components;
namespace Content.Shared.Mobs.Systems;
///
/// Adds and removes defined actions when a mob's changes.
///
public sealed class MobStateActionsSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actions = default!;
///
public override void Initialize()
{
SubscribeLocalEvent(OnMobStateChanged);
}
private void OnMobStateChanged(EntityUid uid, MobStateActionsComponent component, MobStateChangedEvent args)
{
if (!TryComp(uid, out var action))
return;
foreach (var act in component.GrantedActions)
{
Del(act);
}
component.GrantedActions.Clear();
if (!component.Actions.TryGetValue(args.NewMobState, out var toGrant))
return;
foreach (var id in toGrant)
{
EntityUid? act = null;
if (_actions.AddAction(uid, ref act, id, uid, action))
component.GrantedActions.Add(act.Value);
}
}
}