CatStation/Content.Shared/Revolutionary/RevolutionarySystem.cs
KeTuFaisPiKiNut ea2dd83e77
Mindshield Refactor + Changeling Fake Mindshield (#43864)
* the great mindshield rework

* it just works :D

* glory to nyanotransen, I said with my very obviously fake mindshield.

* work on things to remove manual mindshield queries

* very wip impl

* yeah there we go apc destroyed mission accomplished

* some comments

* textures!

* i will stab the person who decided to spell it differently.

* rename things since i am crazy (i was also crazy once)

* minor spelling mistake :(

* Revert "minor spelling mistake :("

This reverts commit ece1f1c3509063d1c43b7f136509ed4df2cd62e7.

* Revert "rename things since i am crazy (i was also crazy once)"

This reverts commit e75411d4bb84e819ca525b9fa0fe1792b6ace0b6.

* Revert "i will stab the person who decided to spell it differently."

This reverts commit 696ffdc062094cc9e4cf382f1e39b4ae4e3d781d.

* fixed things + better texs

* aaaa

* INSANITY RAHHHHH

* e

* changing things a bit.

* testifying things actually no insanity

* cleaning

* only doing this cuz of heseintests failing

* cleanup

* Update Content.Server/Revolutionary/RevolutionarySystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Apply suggestions from code review

fucking suggestions WHY IS THE BUTTON THERE EVEN WHEN ITS DISABLED!!!!

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* half of things for scarky0

* event merging stub / beginning

* big rewrite

* there ya go scar

* e

* NETWORK YOU PRICK

* Update Content.Shared/Mindshield/SharedMindShieldSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Mindshield/SharedMindShieldSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Server/Revolutionary/RevolutionarySystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Mindshield/FakeMindshieldSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* e

* RAHHHH

* cleaning

* Update changeling.yml

* Update meta.json

* slarti 1/3

* slarti things 2

* le real fix

* commit & push

* Update Content.Client/Overlays/ShowMindShieldIconsSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Server/Implants/MindshieldImplantSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Mindshield/SharedMindShieldSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Mindshield/FakeMindshieldSystem.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* Update Content.Shared/Mindshield/Components/MindShieldStatusComponent.cs

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* scarky0

* dirty

* fml

* robust thyself now

* minor fix

* stub

* Revert "stub"

This reverts commit c1204b88d3ae1bbdca2deeb075a9dd0d6c529326.

* s

* jrwebiwerhweir

* shrimple fix

* Apply suggestions from code review

Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>

* yeeeuuuwhqeheueuuu

* rweifohgeterwt

* cleaning, compiling

* container bs and icons

* werewrewr

* fix

* crisis averted

* howd i forget this

* leave me ALONE

---------

Co-authored-by: nomdéraisonnablementlong <you@example.com>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com>
2026-07-30 22:39:13 +00:00

105 lines
3.7 KiB
C#

using Content.Shared.Revolutionary.Components;
using Robust.Shared.GameStates;
using Robust.Shared.Player;
using Content.Shared.Antag;
using Content.Shared.StatusIcon.Components;
namespace Content.Shared.Revolutionary;
public sealed partial class RevolutionarySystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<RevolutionaryComponent, ComponentStartup>(DirtyRevComps);
SubscribeLocalEvent<HeadRevolutionaryComponent, ComponentStartup>(DirtyRevComps);
SubscribeLocalEvent<ShowAntagIconsComponent, ComponentStartup>(DirtyRevComps);
}
/// <summary>
/// Determines if a HeadRev component should be sent to the client.
/// </summary>
[SubscribeLocalEvent]
private void OnRevCompGetStateAttempt(EntityUid uid, HeadRevolutionaryComponent comp, ref ComponentGetStateAttemptEvent args)
{
args.Cancelled = !CanGetState(args.Player);
}
/// <summary>
/// Determines if a Rev component should be sent to the client.
/// </summary>
[SubscribeLocalEvent]
private void OnRevCompGetStateAttempt(EntityUid uid, RevolutionaryComponent comp, ref ComponentGetStateAttemptEvent args)
{
args.Cancelled = !CanGetState(args.Player);
}
/// <summary>
/// The criteria that determine whether a Rev/HeadRev component should be sent to a client.
/// </summary>
/// <param name="player"> The Player the component will be sent to.</param>
/// <returns></returns>
private bool CanGetState(ICommonSession? player)
{
//Apparently this can be null in replays so I am just returning true.
if (player?.AttachedEntity is not {} uid)
return true;
if (HasComp<RevolutionaryComponent>(uid) || HasComp<HeadRevolutionaryComponent>(uid))
return true;
return HasComp<ShowAntagIconsComponent>(uid);
}
/// <summary>
/// Dirties all the Rev components so they are sent to clients.
///
/// We need to do this because if a rev component was not earlier sent to a client and for example the client
/// becomes a rev then we need to send all the components to it. To my knowledge there is no way to do this on a
/// per client basis so we are just dirtying all the components.
/// </summary>
private void DirtyRevComps<T>(EntityUid someUid, T someComp, ComponentStartup ev)
{
var revComps = AllEntityQuery<RevolutionaryComponent>();
while (revComps.MoveNext(out var uid, out var comp))
{
Dirty(uid, comp);
}
var headRevComps = AllEntityQuery<HeadRevolutionaryComponent>();
while (headRevComps.MoveNext(out var uid, out var comp))
{
Dirty(uid, comp);
}
}
[SubscribeLocalEvent]
private void OnAttemptConvert(Entity<RevolutionaryComponent> ent, ref AttemptConvertRevolutionaryEvent args)
{
args.Cancelled = true;
}
[SubscribeLocalEvent]
private void OnAttemptConvertImmune(Entity<RevolutionaryImmuneComponent> ent, ref AttemptConvertRevolutionaryEvent args)
{
args.Cancelled = true;
}
[SubscribeLocalEvent]
private void GetRevIcon(Entity<RevolutionaryComponent> ent, ref GetStatusIconsEvent args)
{
if (HasComp<HeadRevolutionaryComponent>(ent))
return;
if (ProtoMan.Resolve(ent.Comp.StatusIcon, out var iconPrototype))
args.StatusIcons.Add(iconPrototype);
}
[SubscribeLocalEvent]
private void GetHeadRevIcon(Entity<HeadRevolutionaryComponent> ent, ref GetStatusIconsEvent args)
{
if (ProtoMan.Resolve(ent.Comp.StatusIcon, out var iconPrototype))
args.StatusIcons.Add(iconPrototype);
}
}