Revolutionaries (#18477)
Co-authored-by: coolmankid12345 <coolmankid12345@users.noreply.github.com> Co-authored-by: EmoGarbage404 <retron404@gmail.com>
This commit is contained in:
32
Content.Client/Antag/AntagStatusIconSystem.cs
Normal file
32
Content.Client/Antag/AntagStatusIconSystem.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using Content.Shared.StatusIcon;
|
||||
using Content.Shared.StatusIcon.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Content.Shared.Ghost;
|
||||
using Robust.Client.Player;
|
||||
|
||||
namespace Content.Client.Antag;
|
||||
|
||||
/// <summary>
|
||||
/// Used for assigning specified icons for antags.
|
||||
/// </summary>
|
||||
public abstract class AntagStatusIconSystem<T> : SharedStatusIconSystem
|
||||
where T : Component
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IPlayerManager _player = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Will check if the local player has the same component as the one who called it and give the status icon.
|
||||
/// </summary>
|
||||
/// <param name="antagStatusIcon">The status icon that your antag uses</param>
|
||||
/// <param name="args">The GetStatusIcon event.</param>
|
||||
protected virtual void GetStatusIcon(string antagStatusIcon, ref GetStatusIconsEvent args)
|
||||
{
|
||||
var ent = _player.LocalPlayer?.ControlledEntity;
|
||||
|
||||
if (!HasComp<T>(ent) && !HasComp<GhostComponent>(ent))
|
||||
return;
|
||||
|
||||
args.StatusIcons.Add(_prototype.Index<StatusIconPrototype>(antagStatusIcon));
|
||||
}
|
||||
}
|
||||
35
Content.Client/Revolutionary/RevolutionarySystem.cs
Normal file
35
Content.Client/Revolutionary/RevolutionarySystem.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using Content.Shared.Revolutionary.Components;
|
||||
using Content.Client.Antag;
|
||||
using Content.Shared.StatusIcon.Components;
|
||||
|
||||
namespace Content.Client.Revolutionary;
|
||||
|
||||
/// <summary>
|
||||
/// Used for the client to get status icons from other revs.
|
||||
/// </summary>
|
||||
public sealed class RevolutionarySystem : AntagStatusIconSystem<RevolutionaryComponent>
|
||||
{
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<RevolutionaryComponent, GetStatusIconsEvent>(GetRevIcon);
|
||||
SubscribeLocalEvent<HeadRevolutionaryComponent, GetStatusIconsEvent>(GetHeadRevIcon);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the person who triggers the GetStatusIcon event is also a Rev or a HeadRev.
|
||||
/// </summary>
|
||||
private void GetRevIcon(EntityUid uid, RevolutionaryComponent comp, ref GetStatusIconsEvent args)
|
||||
{
|
||||
if (!HasComp<HeadRevolutionaryComponent>(uid))
|
||||
{
|
||||
GetStatusIcon(comp.RevStatusIcon, ref args);
|
||||
}
|
||||
}
|
||||
|
||||
private void GetHeadRevIcon(EntityUid uid, HeadRevolutionaryComponent comp, ref GetStatusIconsEvent args)
|
||||
{
|
||||
GetStatusIcon(comp.HeadRevStatusIcon, ref args);
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,14 @@
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using Content.Client.Antag;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.StatusIcon;
|
||||
using Content.Shared.StatusIcon.Components;
|
||||
using Content.Shared.Zombies;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client.Zombies;
|
||||
|
||||
public sealed class ZombieSystem : SharedZombieSystem
|
||||
public sealed class ZombieSystem : AntagStatusIconSystem<ZombieComponent>
|
||||
{
|
||||
[Dependency] private readonly IPlayerManager _player = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -38,9 +34,6 @@ public sealed class ZombieSystem : SharedZombieSystem
|
||||
|
||||
private void OnGetStatusIcon(EntityUid uid, ZombieComponent component, ref GetStatusIconsEvent args)
|
||||
{
|
||||
if (!HasComp<ZombieComponent>(_player.LocalPlayer?.ControlledEntity))
|
||||
return;
|
||||
|
||||
args.StatusIcons.Add(_prototype.Index<StatusIconPrototype>(component.ZombieStatusIcon));
|
||||
GetStatusIcon(component.ZombieStatusIcon, ref args);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user