Files
tbd-station-14/Content.Shared/Revenant/EntitySystems/SharedCorporealSystem.cs
metalgearsloth 1782eb6ad7 Fix even more warnings (#11968)
Also more instances of someone using TryComp instead of HasComp

Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
2022-10-16 08:49:22 -07:00

64 lines
2.5 KiB
C#

using Content.Shared.Physics;
using Robust.Shared.Physics;
using System.Linq;
using Content.Shared.Movement.Systems;
using Content.Shared.Revenant.Components;
using Robust.Shared.Physics.Systems;
namespace Content.Shared.Revenant.EntitySystems;
/// <summary>
/// Makes the revenant solid when the component is applied.
/// Additionally applies a few visual effects.
/// Used for status effect.
/// </summary>
public abstract class SharedCorporealSystem : EntitySystem
{
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<CorporealComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<CorporealComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<CorporealComponent, RefreshMovementSpeedModifiersEvent>(OnRefresh);
}
private void OnRefresh(EntityUid uid, CorporealComponent component, RefreshMovementSpeedModifiersEvent args)
{
args.ModifySpeed(component.MovementSpeedDebuff, component.MovementSpeedDebuff);
}
public virtual void OnStartup(EntityUid uid, CorporealComponent component, ComponentStartup args)
{
_appearance.SetData(uid, RevenantVisuals.Corporeal, true);
if (TryComp<FixturesComponent>(uid, out var fixtures) && fixtures.FixtureCount >= 1)
{
var fixture = fixtures.Fixtures.Values.First();
_physics.SetCollisionMask(fixture, (int) (CollisionGroup.SmallMobMask | CollisionGroup.GhostImpassable));
_physics.SetCollisionLayer(fixture, (int) CollisionGroup.SmallMobLayer);
}
_movement.RefreshMovementSpeedModifiers(uid);
}
public virtual void OnShutdown(EntityUid uid, CorporealComponent component, ComponentShutdown args)
{
_appearance.SetData(uid, RevenantVisuals.Corporeal, false);
if (TryComp<FixturesComponent>(uid, out var fixtures) && fixtures.FixtureCount >= 1)
{
var fixture = fixtures.Fixtures.Values.First();
_physics.SetCollisionMask(fixture, (int) CollisionGroup.GhostImpassable);
_physics.SetCollisionLayer(fixture, 0);
}
component.MovementSpeedDebuff = 1; //just so we can avoid annoying code elsewhere
_movement.RefreshMovementSpeedModifiers(uid);
}
}