using Content.Shared.Access.Components;
using Content.Shared.Shuttles.Components;
using Content.Shared.Popups;
using Robust.Shared.Timing;
using Content.Shared.Examine;
using Robust.Shared.Audio.Systems;
namespace Content.Shared.Shuttles.Systems;
///
/// System that handles locking and unlocking shuttle consoles based on shuttle deeds.
///
public abstract class SharedShuttleConsoleLockSystem : EntitySystem
{
[Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
[Dependency] protected readonly SharedPopupSystem Popup = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] protected readonly IGameTiming Timing = default!;
///
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent(OnExamined);
SubscribeLocalEvent(OnStartup);
}
private void OnStartup(EntityUid uid, ShuttleConsoleLockComponent component, ComponentStartup args)
{
UpdateAppearance(uid, component);
}
private void OnExamined(EntityUid uid, ShuttleConsoleLockComponent component, ExaminedEvent args)
{
if (component.Locked)
{
args.PushMarkup(Loc.GetString("shuttle-console-locked-examine"));
}
else
{
args.PushMarkup(Loc.GetString("shuttle-console-unlocked-examine"));
}
}
protected void UpdateAppearance(EntityUid uid, ShuttleConsoleLockComponent? component = null)
{
if (!Resolve(uid, ref component))
return;
if (!TryComp(uid, out var appearance))
return;
Appearance.SetData(uid, ShuttleConsoleLockVisuals.Locked, component.Locked, appearance);
}
///
/// Attempts to unlock a console with the given ID card
///
public virtual bool TryUnlock(EntityUid console, EntityUid idCard, ShuttleConsoleLockComponent? lockComp = null, IdCardComponent? idComp = null, EntityUid? user = null)
{
// Implemented in client and server separately
return false;
}
}