fish-station/Content.Server/Ninja/Systems/ToggleNinjaSuitDrawSystem.cs
2026-01-02 14:17:03 +03:00

60 lines
2.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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