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
{
}