using Content.Shared.Actions; using Content.Shared.DoAfter; using Content.Shared.Interaction.Events; using Content.Shared.Popups; using Robust.Shared.Audio.Systems; using Robust.Shared.Network; namespace Content.Shared._White.Wizard.ScrollSystem; public abstract class SharedScrollSystem : EntitySystem { #region Dependencies [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; #endregion #region Init public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnScrollUse); SubscribeLocalEvent(OnScrollDoAfter); } #endregion #region Handlers private void OnScrollUse(EntityUid uid, ScrollComponent component, UseInHandEvent args) { if (args.Handled) return; var doAfterEventArgs = new DoAfterArgs(EntityManager, args.User, component.LearnTime, new ScrollDoAfterEvent(), uid, target: uid) { BreakOnMove = true, BreakOnDamage = true, NeedHand = true }; if (_net.IsServer) { _audioSystem.PlayPvs(component.UseSound, args.User); } _popupSystem.PopupClient( Loc.GetString("scroll-component-start", ("subject", Loc.GetString(component.LearnPopup))), args.User, args.User, PopupType.Medium); _doAfterSystem.TryStartDoAfter(doAfterEventArgs); args.Handled = true; } private void OnScrollDoAfter(EntityUid uid, ScrollComponent component, ScrollDoAfterEvent args) { if (args.Handled || args.Cancelled) return; _actionsSystem.AddAction(args.User, component.ActionId); if (_net.IsServer) { _audioSystem.PlayEntity(component.AfterUseSound, args.User, args.User); } _popupSystem.PopupClient( Loc.GetString("scroll-component-end", ("subject", Loc.GetString(component.LearnPopup))), args.User, args.User, PopupType.Medium); BurnScroll(uid); args.Handled = true; } #endregion #region Helpers protected virtual void BurnScroll(EntityUid uid) { } #endregion }