Adds Handheld Radio/Listener system (#1457)
* re-do of old PR that got fuckied upp * simplify foreach as suggested * pass distance to PassSpeechData for a check, remove GetListenRange() * adds RadioQuery instead of subscribing/unsubscribing * change SpreadMessage to accept owner rather than component * change RadioQuery to EntityQuery * remove declared EntityQuery (oops, didn't know what shadowcommander meant) * refactor ListeningSystem & refactor added chat logic into listen sys * IGNORE the oopsie STOP LOOKING
This commit is contained in:
49
Content.Server/GameObjects/EntitySystems/RadioSystem.cs
Normal file
49
Content.Server/GameObjects/EntitySystems/RadioSystem.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using Content.Server.GameObjects.Components.Interactable;
|
||||
using JetBrains.Annotations;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.GameObjects.Systems;
|
||||
using Robust.Shared.Interfaces.GameObjects;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Content.Server.GameObjects.EntitySystems
|
||||
{
|
||||
class RadioSystem : EntitySystem
|
||||
{
|
||||
private List<string> _messages;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
EntityQuery = new TypeEntityQuery(typeof(RadioComponent));
|
||||
_messages = new List<string>();
|
||||
}
|
||||
|
||||
public void SpreadMessage(IEntity source, string message)
|
||||
{
|
||||
if (_messages.Contains(message))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_messages.Add(message);
|
||||
|
||||
foreach (var radioEntity in RelevantEntities)
|
||||
{
|
||||
var radio = radioEntity.GetComponent<RadioComponent>();
|
||||
if (radioEntity == source || !radio.RadioOn)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
radio.Speaker(message);
|
||||
}
|
||||
|
||||
_messages.Remove(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user