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); } } }