using Content.Shared._CP14.ModularCraft.Components; using Content.Shared.DoAfter; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Labels.EntitySystems; using Robust.Shared.Serialization; namespace Content.Shared._CP14.ModularCraft; public abstract class CP14SharedModularCraftSystem : EntitySystem { [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly LabelSystem _label = default!; [Dependency] private readonly MetaDataSystem _meta = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnAfterInteractStart); SubscribeLocalEvent(OnAfterInteractPart); SubscribeLocalEvent(OnLabelRenaming); } private void OnLabelRenaming(Entity ent, ref CP14LabeledEvent args) { if (args.Text is null) return; _meta.SetEntityName(ent, args.Text); _label.Label(ent, null); } private void OnAfterInteractStart(Entity start, ref AfterInteractEvent args) { if (args.Handled || args.Target is null) return; if (!TryComp(args.Target, out var part)) return; var xform = Transform(args.Target.Value); if (xform.GridUid != xform.ParentUid) return; _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, part.DoAfter, new CP14ModularCraftAddPartDoAfter(), args.Target, args.Target, start) { BreakOnDamage = true, BreakOnMove = true, BreakOnDropItem = true, }); args.Handled = true; } private void OnAfterInteractPart(Entity part, ref AfterInteractEvent args) { if (args.Handled || args.Target is null) return; if (!HasComp(args.Target)) return; var xform = Transform(args.Target.Value); if (xform.GridUid != xform.ParentUid) return; _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, part.Comp.DoAfter, new CP14ModularCraftAddPartDoAfter(), args.Target, args.Target, part) { BreakOnDamage = true, BreakOnMove = true, BreakOnDropItem = true, }); args.Handled = true; } } [Serializable, NetSerializable] public sealed partial class CP14ModularCraftAddPartDoAfter : SimpleDoAfterEvent { }