2025-01-27 22:37:46 -04:00
using Content.Shared.Actions ;
using Content.Shared.Implants ;
using Content.Shared.Implants.Components ;
using Content.Shared.Mindshield.Components ;
2025-01-30 15:14:53 -04:00
using Robust.Shared.Containers ;
2025-01-27 22:37:46 -04:00
namespace Content.Shared.Mindshield.FakeMindShield ;
public sealed class SharedFakeMindShieldImplantSystem : EntitySystem
{
[Dependency] private readonly SharedActionsSystem _actionsSystem = default ! ;
public override void Initialize ( )
{
base . Initialize ( ) ;
SubscribeLocalEvent < SubdermalImplantComponent , FakeMindShieldToggleEvent > ( OnFakeMindShieldToggle ) ;
SubscribeLocalEvent < FakeMindShieldImplantComponent , ImplantImplantedEvent > ( ImplantCheck ) ;
2025-01-30 15:14:53 -04:00
SubscribeLocalEvent < FakeMindShieldImplantComponent , EntGotRemovedFromContainerMessage > ( ImplantDraw ) ;
2025-01-27 22:37:46 -04:00
}
2025-01-30 15:14:53 -04:00
2025-01-27 22:37:46 -04:00
/// <summary>
/// Raise the Action of a Implanted user toggling their implant to the FakeMindshieldComponent on their entity
/// </summary>
private void OnFakeMindShieldToggle ( Entity < SubdermalImplantComponent > entity , ref FakeMindShieldToggleEvent ev )
{
ev . Handled = true ;
if ( entity . Comp . ImplantedEntity is not { } ent )
return ;
if ( ! TryComp < FakeMindShieldComponent > ( ent , out var comp ) )
return ;
_actionsSystem . SetToggled ( ev . Action , ! comp . IsEnabled ) ; // Set it to what the Mindshield component WILL be after this
RaiseLocalEvent ( ent , ev ) ; //this reraises the action event to support an eventual future Changeling Antag which will also be using this component for it's "mindshield" ability
}
private void ImplantCheck ( EntityUid uid , FakeMindShieldImplantComponent component , ref ImplantImplantedEvent ev )
{
if ( ev . Implanted ! = null )
EnsureComp < FakeMindShieldComponent > ( ev . Implanted . Value ) ;
}
2025-01-30 15:14:53 -04:00
private void ImplantDraw ( Entity < FakeMindShieldImplantComponent > ent , ref EntGotRemovedFromContainerMessage ev )
{
RemComp < FakeMindShieldComponent > ( ev . Container . Owner ) ;
}
2025-01-27 22:37:46 -04:00
}