* feat: now when research is unlocked in console, approver of reasearch is radio-ed too * refactor: now most of events that require actor name to be radio-ed or logged use TryGetIdentityShortInfoEvent which is subscibed by id-card system and borg system (to work for both carbon and synthetic life-forms) * refactor: moved TryGetIdentityShortInfoEvent on id card system to shared, fixed cargo cent-com-originated orders * remove unused check * refactor: decoupled systems from IdCardSystem (those that are not dependent on it anymore) * refactor: removed unuseed usings * feat: emagged cargo/research consoles wont radio messages on buy/research confirm anymore --------- Co-authored-by: pa.pecherskij <pa.pecherskij@interfax.ru>
128 lines
4.6 KiB
C#
128 lines
4.6 KiB
C#
using Content.Shared.Containers.ItemSlots;
|
|
using Content.Shared.IdentityManagement;
|
|
using Content.Shared.Item.ItemToggle;
|
|
using Content.Shared.Movement.Components;
|
|
using Content.Shared.Movement.Systems;
|
|
using Content.Shared.Popups;
|
|
using Content.Shared.PowerCell.Components;
|
|
using Content.Shared.Silicons.Borgs.Components;
|
|
using Content.Shared.UserInterface;
|
|
using Content.Shared.Wires;
|
|
using Robust.Shared.Containers;
|
|
|
|
namespace Content.Shared.Silicons.Borgs;
|
|
|
|
/// <summary>
|
|
/// This handles logic, interactions, and UI related to <see cref="BorgChassisComponent"/> and other related components.
|
|
/// </summary>
|
|
public abstract partial class SharedBorgSystem : EntitySystem
|
|
{
|
|
[Dependency] protected readonly SharedContainerSystem Container = default!;
|
|
[Dependency] protected readonly ItemSlotsSystem ItemSlots = default!;
|
|
[Dependency] protected readonly ItemToggleSystem Toggle = default!;
|
|
[Dependency] protected readonly SharedPopupSystem Popup = default!;
|
|
|
|
/// <inheritdoc/>
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<BorgChassisComponent, ComponentStartup>(OnStartup);
|
|
SubscribeLocalEvent<BorgChassisComponent, ItemSlotInsertAttemptEvent>(OnItemSlotInsertAttempt);
|
|
SubscribeLocalEvent<BorgChassisComponent, ItemSlotEjectAttemptEvent>(OnItemSlotEjectAttempt);
|
|
SubscribeLocalEvent<BorgChassisComponent, EntInsertedIntoContainerMessage>(OnInserted);
|
|
SubscribeLocalEvent<BorgChassisComponent, EntRemovedFromContainerMessage>(OnRemoved);
|
|
SubscribeLocalEvent<BorgChassisComponent, RefreshMovementSpeedModifiersEvent>(OnRefreshMovementSpeedModifiers);
|
|
SubscribeLocalEvent<BorgChassisComponent, ActivatableUIOpenAttemptEvent>(OnUIOpenAttempt);
|
|
SubscribeLocalEvent<TryGetIdentityShortInfoEvent>(OnTryGetIdentityShortInfo);
|
|
|
|
InitializeRelay();
|
|
}
|
|
|
|
private void OnTryGetIdentityShortInfo(TryGetIdentityShortInfoEvent args)
|
|
{
|
|
if (args.Handled)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!HasComp<BorgChassisComponent>(args.ForActor))
|
|
{
|
|
return;
|
|
}
|
|
|
|
args.Title = Name(args.ForActor).Trim();
|
|
args.Handled = true;
|
|
}
|
|
|
|
private void OnItemSlotInsertAttempt(EntityUid uid, BorgChassisComponent component, ref ItemSlotInsertAttemptEvent args)
|
|
{
|
|
if (args.Cancelled)
|
|
return;
|
|
|
|
if (!TryComp<PowerCellSlotComponent>(uid, out var cellSlotComp) ||
|
|
!TryComp<WiresPanelComponent>(uid, out var panel))
|
|
return;
|
|
|
|
if (!ItemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) || cellSlot != args.Slot)
|
|
return;
|
|
|
|
if (!panel.Open || args.User == uid)
|
|
args.Cancelled = true;
|
|
}
|
|
|
|
private void OnItemSlotEjectAttempt(EntityUid uid, BorgChassisComponent component, ref ItemSlotEjectAttemptEvent args)
|
|
{
|
|
if (args.Cancelled)
|
|
return;
|
|
|
|
if (!TryComp<PowerCellSlotComponent>(uid, out var cellSlotComp) ||
|
|
!TryComp<WiresPanelComponent>(uid, out var panel))
|
|
return;
|
|
|
|
if (!ItemSlots.TryGetSlot(uid, cellSlotComp.CellSlotId, out var cellSlot) || cellSlot != args.Slot)
|
|
return;
|
|
|
|
if (!panel.Open || args.User == uid)
|
|
args.Cancelled = true;
|
|
}
|
|
|
|
private void OnStartup(EntityUid uid, BorgChassisComponent component, ComponentStartup args)
|
|
{
|
|
if (!TryComp<ContainerManagerComponent>(uid, out var containerManager))
|
|
return;
|
|
|
|
component.BrainContainer = Container.EnsureContainer<ContainerSlot>(uid, component.BrainContainerId, containerManager);
|
|
component.ModuleContainer = Container.EnsureContainer<Container>(uid, component.ModuleContainerId, containerManager);
|
|
}
|
|
|
|
private void OnUIOpenAttempt(EntityUid uid, BorgChassisComponent component, ActivatableUIOpenAttemptEvent args)
|
|
{
|
|
// borgs can't view their own ui
|
|
if (args.User == uid)
|
|
args.Cancel();
|
|
}
|
|
|
|
protected virtual void OnInserted(EntityUid uid, BorgChassisComponent component, EntInsertedIntoContainerMessage args)
|
|
{
|
|
|
|
}
|
|
|
|
protected virtual void OnRemoved(EntityUid uid, BorgChassisComponent component, EntRemovedFromContainerMessage args)
|
|
{
|
|
|
|
}
|
|
|
|
private void OnRefreshMovementSpeedModifiers(EntityUid uid, BorgChassisComponent component, RefreshMovementSpeedModifiersEvent args)
|
|
{
|
|
if (Toggle.IsActivated(uid))
|
|
return;
|
|
|
|
if (!TryComp<MovementSpeedModifierComponent>(uid, out var movement))
|
|
return;
|
|
|
|
var sprintDif = movement.BaseWalkSpeed / movement.BaseSprintSpeed;
|
|
args.ModifySpeed(1f, sprintDif);
|
|
}
|
|
}
|