Deep Space Com

This commit is contained in:
keslik
2025-03-05 11:30:37 +03:00
parent 5ae1b526ed
commit bc5583a128
11 changed files with 361 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ using Content.Server.Popups;
using Content.Server.Power.Components;
using Content.Server.Power.EntitySystems;
using Content.Server.Radio.Components;
using Content.Shared._White.DeepSpaceCom; // WD
using Content.Server.Speech;
using Content.Server.Speech.Components;
using Content.Shared.UserInterface;
@@ -51,6 +52,11 @@ public sealed class RadioDeviceSystem : EntitySystem
SubscribeLocalEvent<IntercomComponent, ToggleIntercomMicMessage>(OnToggleIntercomMic);
SubscribeLocalEvent<IntercomComponent, ToggleIntercomSpeakerMessage>(OnToggleIntercomSpeaker);
SubscribeLocalEvent<IntercomComponent, SelectIntercomChannelMessage>(OnSelectIntercomChannel);
SubscribeLocalEvent<DeepSpaceComComponent, BeforeActivatableUIOpenEvent>(OnBeforeDeepSpaceComUiOpen); // WD start
SubscribeLocalEvent<DeepSpaceComComponent, ToggleDeepSpaceComMicrophoneMessage>(OnToggleDeepSpaceComMic);
SubscribeLocalEvent<DeepSpaceComComponent, ToggleDeepSpaceComSpeakerMessage>(OnToggleDeepSpaceComSpeaker);
SubscribeLocalEvent<DeepSpaceComComponent, SelectDeepSpaceComChannelMessage>(OnSelectDeepSpaceComChannel); // WD end
}
public override void Update(float frameTime)
@@ -264,4 +270,55 @@ public sealed class RadioDeviceSystem : EntitySystem
var state = new IntercomBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
_ui.SetUiState(uid, IntercomUiKey.Key, state);
}
private void OnBeforeDeepSpaceComUiOpen(EntityUid uid, DeepSpaceComComponent component, BeforeActivatableUIOpenEvent args) // WD start
{
UpdateDeepSpaceComUi(uid, component);
}
private void OnToggleDeepSpaceComMic(EntityUid uid, DeepSpaceComComponent component, ToggleDeepSpaceComMicrophoneMessage args)
{
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
return;
SetMicrophoneEnabled(uid, args.Actor, args.Enabled, true);
UpdateDeepSpaceComUi(uid, component);
}
private void OnToggleDeepSpaceComSpeaker(EntityUid uid, DeepSpaceComComponent component, ToggleDeepSpaceComSpeakerMessage args)
{
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
return;
SetSpeakerEnabled(uid, args.Actor, args.Enabled, true);
UpdateDeepSpaceComUi(uid, component);
}
private void OnSelectDeepSpaceComChannel(EntityUid uid, DeepSpaceComComponent component, SelectDeepSpaceComChannelMessage args)
{
if (component.RequiresPower && !this.IsPowered(uid, EntityManager))
return;
if (!_protoMan.TryIndex<RadioChannelPrototype>(args.Channel, out _) || !component.SupportedChannels.Contains(args.Channel))
return;
if (TryComp<RadioMicrophoneComponent>(uid, out var mic))
mic.BroadcastChannel = args.Channel;
if (TryComp<RadioSpeakerComponent>(uid, out var speaker))
speaker.Channels = new(){ args.Channel };
UpdateDeepSpaceComUi(uid, component);
}
private void UpdateDeepSpaceComUi(EntityUid uid, DeepSpaceComComponent component)
{
var micComp = CompOrNull<RadioMicrophoneComponent>(uid);
var speakerComp = CompOrNull<RadioSpeakerComponent>(uid);
var micEnabled = micComp?.Enabled ?? false;
var speakerEnabled = speakerComp?.Enabled ?? false;
var availableChannels = component.SupportedChannels;
var selectedChannel = micComp?.BroadcastChannel ?? SharedChatSystem.CommonChannel;
var state = new DeepSpaceComBoundUIState(micEnabled, speakerEnabled, availableChannels, selectedChannel);
_ui.SetUiState(uid, DeepSpaceComUiKey.Key, state);
} // WD end
}

View File

@@ -3,6 +3,7 @@ using Content.Server.Chat.Systems;
using Content.Server.Power.Components;
using Content.Server.Radio.Components;
using Content.Server.VoiceMask;
using Content.Shared._White.DeepSpaceCom; // WD
using Content.Shared.Chat;
using Content.Shared.Database;
using Content.Shared.Radio;
@@ -127,12 +128,13 @@ public sealed class RadioSystem : EntitySystem
var radioQuery = EntityQueryEnumerator<ActiveRadioComponent, TransformComponent>();
while (canSend && radioQuery.MoveNext(out var receiver, out var radio, out var transform))
{
if (!radio.ReceiveAllChannels)
if (!radio.ReceiveAllChannels) // WD start
{
if (!radio.Channels.Contains(channel.ID) || (TryComp<IntercomComponent>(receiver, out var intercom) &&
!intercom.SupportedChannels.Contains(channel.ID)))
if (!radio.Channels.Contains(channel.ID) ||
(TryComp<DeepSpaceComComponent>(receiver, out var deepSpaceCom) && !deepSpaceCom.SupportedChannels.Contains(channel.ID)) ||
(TryComp<IntercomComponent>(receiver, out var intercom) && !intercom.SupportedChannels.Contains(channel.ID)))
continue;
}
} // WD end
if (!channel.LongRange && transform.MapID != sourceMapId && !radio.GlobalReceive)
continue;