using Content.Shared.Inventory.Events; using Content.Shared.Ninja.Components; namespace Content.Shared.Ninja.Systems; /// /// System for katana binding and dash events. Recalling is handled by the suit. /// public sealed class EnergyKatanaSystem : EntitySystem { [Dependency] private readonly SharedSpaceNinjaSystem _ninja = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnEquipped); SubscribeLocalEvent(OnAddDashAction); SubscribeLocalEvent(OnDashAttempt); } /// /// When equipped by a ninja, try to bind it. /// private void OnEquipped(EntityUid uid, EnergyKatanaComponent comp, GotEquippedEvent args) { // check if user isnt a ninja or already has a katana bound var user = args.Equipee; if (!TryComp(user, out var ninja) || ninja.Katana != null) return; // bind it since its unbound _ninja.BindKatana(user, uid, ninja); } private void OnAddDashAction(EntityUid uid, EnergyKatanaComponent comp, AddDashActionEvent args) { if (!HasComp(args.User)) args.Cancel(); } private void OnDashAttempt(EntityUid uid, EnergyKatanaComponent comp, DashAttemptEvent args) { if (!TryComp(args.User, out var ninja) || ninja.Katana != uid) args.Cancel(); } }