using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; namespace Content.Server.Ninja.Systems; /// /// Handles events to integrate NinjaSuitDraw with ItemToggle /// public sealed class ToggleNinjaSuitDrawSystem : EntitySystem { [Dependency] private readonly ItemToggleSystem _toggle = default!; [Dependency] private readonly NinjaSuitDrawSystem _suitDraw = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnActivateAttempt); SubscribeLocalEvent(OnToggled); } private void OnMapInit(Entity ent, ref MapInitEvent args) { if (!TryComp(ent, out var draw)) { // Если тут будет стоять еррор, то AllComponentsToOneDeleteTest насрет, что все плохо. Log.Warning($"Found entity {ToPrettyString(ent)} with {nameof(ToggleNinjaSuitDrawComponent)} but without {nameof(NinjaSuitDrawComponent)}! Toggle component will be removed"); RemComp(ent); return; } _suitDraw.SetEnabled((ent, draw), _toggle.IsActivated(ent.Owner)); } private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) { if (!_suitDraw.CanDrawPower((ent.Owner, Comp(ent.Owner))) || !_suitDraw.CanUse((ent.Owner, Comp(ent.Owner)))) args.Cancelled = true; } private void OnToggled(Entity ent, ref ItemToggledEvent args) { var uid = ent.Owner; var draw = Comp(uid); _suitDraw.SetEnabled((uid, draw), args.Activated); } } /// /// Component that integrates NinjaSuitDraw with ItemToggle functionality. /// [RegisterComponent] public sealed partial class ToggleNinjaSuitDrawComponent : Component { }