Files
crystall-punk-14/Content.Shared/MobState/State/SharedDeadMobState.cs

48 lines
1.6 KiB
C#
Raw Normal View History

using Content.Shared.Hands;
using Content.Shared.Standing;
using Robust.Shared.GameObjects;
2021-06-09 22:19:39 +02:00
namespace Content.Shared.MobState.State
{
public abstract class SharedDeadMobState : BaseMobState
{
protected override DamageState DamageState => DamageState.Dead;
2021-11-09 12:15:12 +01:00
public override void EnterState(EntityUid uid, IEntityManager entityManager)
{
2021-11-09 12:15:12 +01:00
base.EnterState(uid, entityManager);
var wake = entityManager.EnsureComponent<CollisionWakeComponent>(uid);
wake.Enabled = true;
var standingState = EntitySystem.Get<StandingStateSystem>();
2021-11-09 12:15:12 +01:00
standingState.Down(uid);
2021-11-09 12:15:12 +01:00
if (standingState.IsDown(uid) && entityManager.TryGetComponent(uid, out PhysicsComponent? physics))
{
physics.CanCollide = false;
}
if (entityManager.TryGetComponent(uid, out AppearanceComponent? appearance))
{
appearance.SetData(DamageStateVisuals.State, DamageState.Dead);
}
}
2021-11-09 12:15:12 +01:00
public override void ExitState(EntityUid uid, IEntityManager entityManager)
{
2021-11-09 12:15:12 +01:00
base.ExitState(uid, entityManager);
if (entityManager.HasComponent<CollisionWakeComponent>(uid))
{
2021-11-09 12:15:12 +01:00
entityManager.RemoveComponent<CollisionWakeComponent>(uid);
}
var standingState = EntitySystem.Get<StandingStateSystem>();
2021-11-09 12:15:12 +01:00
standingState.Stand(uid);
2021-11-09 12:15:12 +01:00
if (!standingState.IsDown(uid) && entityManager.TryGetComponent(uid, out PhysicsComponent? physics))
{
physics.CanCollide = true;
}
}
}
}