2024-11-29 01:31:42 +03:00
|
|
|
using Content.Shared._CP14.ModularCraft.Components;
|
|
|
|
|
using Content.Shared.DoAfter;
|
2025-01-08 23:22:58 +03:00
|
|
|
using Content.Shared.Examine;
|
2024-11-29 01:31:42 +03:00
|
|
|
using Content.Shared.Interaction;
|
2025-01-08 23:22:58 +03:00
|
|
|
using Content.Shared.Labels.EntitySystems;
|
2024-11-29 01:31:42 +03:00
|
|
|
using Robust.Shared.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace Content.Shared._CP14.ModularCraft;
|
|
|
|
|
|
|
|
|
|
public abstract class CP14SharedModularCraftSystem : EntitySystem
|
|
|
|
|
{
|
|
|
|
|
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
|
2025-04-30 20:50:03 +03:00
|
|
|
[Dependency] private readonly LabelSystem _label = default!;
|
2025-01-08 23:22:58 +03:00
|
|
|
[Dependency] private readonly MetaDataSystem _meta = default!;
|
2024-11-29 01:31:42 +03:00
|
|
|
|
|
|
|
|
public override void Initialize()
|
|
|
|
|
{
|
|
|
|
|
base.Initialize();
|
|
|
|
|
|
2025-01-22 23:53:36 +03:00
|
|
|
SubscribeLocalEvent<CP14ModularCraftStartPointComponent, AfterInteractEvent>(OnAfterInteractStart);
|
2024-11-29 01:31:42 +03:00
|
|
|
SubscribeLocalEvent<CP14ModularCraftPartComponent, AfterInteractEvent>(OnAfterInteractPart);
|
2025-01-08 23:22:58 +03:00
|
|
|
SubscribeLocalEvent<CP14LabeledRenamingComponent, CP14LabeledEvent>(OnLabelRenaming);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnLabelRenaming(Entity<CP14LabeledRenamingComponent> ent, ref CP14LabeledEvent args)
|
|
|
|
|
{
|
|
|
|
|
if (args.Text is null)
|
|
|
|
|
return;
|
|
|
|
|
_meta.SetEntityName(ent, args.Text);
|
|
|
|
|
_label.Label(ent, null);
|
2024-11-29 01:31:42 +03:00
|
|
|
}
|
|
|
|
|
|
2025-01-22 23:53:36 +03:00
|
|
|
private void OnAfterInteractStart(Entity<CP14ModularCraftStartPointComponent> start, ref AfterInteractEvent args)
|
2024-11-29 01:31:42 +03:00
|
|
|
{
|
|
|
|
|
if (args.Handled || args.Target is null)
|
|
|
|
|
return;
|
|
|
|
|
|
2025-01-22 23:53:36 +03:00
|
|
|
if (!TryComp<CP14ModularCraftPartComponent>(args.Target, out var part))
|
2024-11-29 01:31:42 +03:00
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
var xform = Transform(args.Target.Value);
|
|
|
|
|
if (xform.GridUid != xform.ParentUid)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
|
|
|
|
|
args.User,
|
2025-01-22 23:53:36 +03:00
|
|
|
part.DoAfter,
|
2024-11-29 01:31:42 +03:00
|
|
|
new CP14ModularCraftAddPartDoAfter(),
|
|
|
|
|
args.Target,
|
|
|
|
|
args.Target,
|
|
|
|
|
start)
|
|
|
|
|
{
|
|
|
|
|
BreakOnDamage = true,
|
|
|
|
|
BreakOnMove = true,
|
|
|
|
|
BreakOnDropItem = true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
args.Handled = true;
|
|
|
|
|
}
|
2025-01-22 23:53:36 +03:00
|
|
|
|
|
|
|
|
private void OnAfterInteractPart(Entity<CP14ModularCraftPartComponent> part, ref AfterInteractEvent args)
|
|
|
|
|
{
|
|
|
|
|
if (args.Handled || args.Target is null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (!HasComp<CP14ModularCraftStartPointComponent>(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;
|
|
|
|
|
}
|
2024-11-29 01:31:42 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable, NetSerializable]
|
|
|
|
|
public sealed partial class CP14ModularCraftAddPartDoAfter : SimpleDoAfterEvent
|
|
|
|
|
{
|
|
|
|
|
}
|