using Content.Shared.Actions.Components; using Content.Shared.Hands; using Robust.Shared.GameObjects; using System; namespace Content.Shared.Actions { /// /// Evicts action states with expired cooldowns. /// public class SharedActionSystem : EntitySystem { private const float CooldownCheckIntervalSeconds = 10; private float _timeSinceCooldownCheck; public override void Initialize() { base.Initialize(); UpdatesOutsidePrediction = true; SubscribeLocalEvent(OnHandUnequipped); SubscribeLocalEvent(OnHandEquipped); } private void OnHandEquipped(EntityUid uid, ItemActionsComponent component, EquippedHandEvent args) { component.EquippedHand(args.User, args.Hand); } private void OnHandUnequipped(EntityUid uid, ItemActionsComponent component, UnequippedHandEvent args) { component.UnequippedHand(); } public override void Update(float frameTime) { base.Update(frameTime); _timeSinceCooldownCheck += frameTime; if (_timeSinceCooldownCheck < CooldownCheckIntervalSeconds) return; foreach (var comp in EntityManager.EntityQuery(false)) { comp.ExpireCooldowns(); } _timeSinceCooldownCheck -= CooldownCheckIntervalSeconds; } } }