diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs
index 90eb8ac7f0..f4fcac686c 100644
--- a/Content.Client/Entry/IgnoredComponents.cs
+++ b/Content.Client/Entry/IgnoredComponents.cs
@@ -23,6 +23,7 @@ namespace Content.Client.Entry
"EmitSoundOnLand",
"EmitSoundOnTrigger",
"EmitSoundOnActivate",
+ "EmitSoundOnUIOpen",
"NameIdentifier",
"HeatResistance",
"EntityStorage",
diff --git a/Content.Server/Research/Components/ResearchConsoleComponent.cs b/Content.Server/Research/Components/ResearchConsoleComponent.cs
index 0849e27d3a..d16de2d2ec 100644
--- a/Content.Server/Research/Components/ResearchConsoleComponent.cs
+++ b/Content.Server/Research/Components/ResearchConsoleComponent.cs
@@ -17,9 +17,6 @@ namespace Content.Server.Research.Components
[Dependency] private readonly IEntityManager _entMan = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
- [DataField("sound")]
- private SoundSpecifier _soundCollectionName = new SoundCollectionSpecifier("keyboard");
-
[ViewVariables] private bool Powered => !_entMan.TryGetComponent(Owner, out ApcPowerReceiverComponent? receiver) || receiver.Powered;
[ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(ResearchConsoleUiKey.Key);
@@ -92,19 +89,5 @@ namespace Content.Server.Research.Components
return new ResearchConsoleBoundInterfaceState(points, pointsPerSecond);
}
-
- ///
- /// Open the user interface on a certain player session.
- ///
- /// Session where the UI will be shown
- public void OpenUserInterface(IPlayerSession session)
- {
- UserInterface?.Open(session);
- }
-
- public void PlayKeyboardSound()
- {
- SoundSystem.Play(Filter.Pvs(Owner), _soundCollectionName.GetSound(), Owner, AudioParams.Default);
- }
}
}
diff --git a/Content.Server/Research/ResearchSystem.cs b/Content.Server/Research/ResearchSystem.cs
index 343fb7fc46..bef59d439c 100644
--- a/Content.Server/Research/ResearchSystem.cs
+++ b/Content.Server/Research/ResearchSystem.cs
@@ -1,8 +1,6 @@
-using Content.Server.UserInterface;
using Content.Server.Research.Components;
using JetBrains.Annotations;
-
namespace Content.Server.Research
{
[UsedImplicitly]
@@ -17,12 +15,6 @@ namespace Content.Server.Research
public override void Initialize()
{
base.Initialize();
- SubscribeLocalEvent(OnAfterUIOpen);
- }
-
- private void OnAfterUIOpen(EntityUid uid, ResearchConsoleComponent component, AfterActivatableUIOpenEvent args)
- {
- component.PlayKeyboardSound();
}
public bool RegisterServer(ResearchServerComponent server)
diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs
new file mode 100644
index 0000000000..654ba96415
--- /dev/null
+++ b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs
@@ -0,0 +1,10 @@
+namespace Content.Server.Sound.Components
+{
+ ///
+ /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent
+ ///
+ [RegisterComponent]
+ public sealed class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent
+ {
+ }
+}
diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs
index f4a1b610de..8562a99bf8 100644
--- a/Content.Server/Sound/EmitSoundSystem.cs
+++ b/Content.Server/Sound/EmitSoundSystem.cs
@@ -2,6 +2,7 @@ using Content.Server.Explosion.EntitySystems;
using Content.Server.Interaction.Components;
using Content.Server.Sound.Components;
using Content.Server.Throwing;
+using Content.Server.UserInterface;
using Content.Shared.Interaction;
using Content.Shared.Interaction.Events;
using Content.Shared.Throwing;
@@ -29,6 +30,7 @@ namespace Content.Server.Sound
SubscribeLocalEvent(HandleEmitSoundOnThrown);
SubscribeLocalEvent(HandleEmitSoundOnActivateInWorld);
SubscribeLocalEvent(HandleEmitSoundOnTrigger);
+ SubscribeLocalEvent(HandleEmitSoundOnUIOpen);
}
private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args)
@@ -64,6 +66,11 @@ namespace Content.Server.Sound
arg.Handled = true;
}
+ private void HandleEmitSoundOnUIOpen(EntityUid eUI, BaseEmitSoundComponent component, AfterActivatableUIOpenEvent arg)
+ {
+ TryEmitSound(component);
+ }
+
private void TryEmitSound(BaseEmitSoundComponent component)
{
var audioParams = component.AudioParams.WithPitchScale((float) _random.NextGaussian(1, component.PitchVariation));
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml
index 0a7e968183..69c555d729 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml
@@ -41,3 +41,6 @@
autoRot: true
offset: "0, 0.4" # shine from the top, not bottom of the computer
castShadows: false
+ - type: EmitSoundOnUIOpen
+ sound:
+ collection: Keyboard
diff --git a/Resources/Prototypes/SoundCollections/keyboard.yml b/Resources/Prototypes/SoundCollections/keyboard.yml
index be077bc8fd..46e82d84a1 100644
--- a/Resources/Prototypes/SoundCollections/keyboard.yml
+++ b/Resources/Prototypes/SoundCollections/keyboard.yml
@@ -1,5 +1,5 @@
- type: soundCollection
- id: keyboard
+ id: Keyboard
files:
- /Audio/Machines/Keyboard/keyboard1.ogg
- /Audio/Machines/Keyboard/keyboard2.ogg