Delta-v/Content.Server/DeltaV/CartridgeLoader/Cartridges/LogProbeCartridgeSystem.Nan...

83 lines
3.1 KiB
C#

using Content.Shared.Audio;
using Content.Shared.CartridgeLoader;
using Content.Shared.DeltaV.CartridgeLoader.Cartridges;
using Content.Shared.DeltaV.NanoChat;
namespace Content.Server.CartridgeLoader.Cartridges;
public sealed partial class LogProbeCartridgeSystem
{
private void InitializeNanoChat()
{
SubscribeLocalEvent<NanoChatRecipientUpdatedEvent>(OnRecipientUpdated);
SubscribeLocalEvent<NanoChatMessageReceivedEvent>(OnMessageReceived);
}
private void OnRecipientUpdated(ref NanoChatRecipientUpdatedEvent args)
{
var query = EntityQueryEnumerator<LogProbeCartridgeComponent, CartridgeComponent>();
while (query.MoveNext(out var uid, out var probe, out var cartridge))
{
if (probe.ScannedNanoChatData == null || GetEntity(probe.ScannedNanoChatData.Value.Card) != args.CardUid)
continue;
if (!TryComp<NanoChatCardComponent>(args.CardUid, out var card))
continue;
probe.ScannedNanoChatData = new NanoChatData(
new Dictionary<uint, NanoChatRecipient>(card.Recipients),
probe.ScannedNanoChatData.Value.Messages,
card.Number,
GetNetEntity(args.CardUid));
if (cartridge.LoaderUid != null)
UpdateUiState((uid, probe), cartridge.LoaderUid.Value);
}
}
private void OnMessageReceived(ref NanoChatMessageReceivedEvent args)
{
var query = EntityQueryEnumerator<LogProbeCartridgeComponent, CartridgeComponent>();
while (query.MoveNext(out var uid, out var probe, out var cartridge))
{
if (probe.ScannedNanoChatData == null || GetEntity(probe.ScannedNanoChatData.Value.Card) != args.CardUid)
continue;
if (!TryComp<NanoChatCardComponent>(args.CardUid, out var card))
continue;
probe.ScannedNanoChatData = new NanoChatData(
probe.ScannedNanoChatData.Value.Recipients,
new Dictionary<uint, List<NanoChatMessage>>(card.Messages),
card.Number,
GetNetEntity(args.CardUid));
if (cartridge.LoaderUid != null)
UpdateUiState((uid, probe), cartridge.LoaderUid.Value);
}
}
private void ScanNanoChatCard(Entity<LogProbeCartridgeComponent> ent,
CartridgeAfterInteractEvent args,
EntityUid target,
NanoChatCardComponent card)
{
_audioSystem.PlayEntity(ent.Comp.SoundScan,
args.InteractEvent.User,
target,
AudioHelpers.WithVariation(0.25f, _random));
_popupSystem.PopupCursor(Loc.GetString("log-probe-scan-nanochat", ("card", target)), args.InteractEvent.User);
ent.Comp.PulledAccessLogs.Clear();
ent.Comp.ScannedNanoChatData = new NanoChatData(
new Dictionary<uint, NanoChatRecipient>(card.Recipients),
new Dictionary<uint, List<NanoChatMessage>>(card.Messages),
card.Number,
GetNetEntity(target)
);
UpdateUiState(ent, args.Loader);
}
}