mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-01 17:47:24 +02:00
* Add Enabled property to CollisionWake component. * Set property in HandleComponentState
44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using Robust.Shared.Physics;
|
|
|
|
namespace Robust.Shared.GameObjects
|
|
{
|
|
public class CollisionWakeSystem : EntitySystem
|
|
{
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
SubscribeLocalEvent<PhysicsWakeMessage>(HandleWake);
|
|
SubscribeLocalEvent<PhysicsSleepMessage>(HandleSleep);
|
|
SubscribeLocalEvent<CollisionWakeComponent, CollisionWakeStateMessage>(HandleCollisionWakeState);
|
|
}
|
|
|
|
public override void Shutdown()
|
|
{
|
|
base.Shutdown();
|
|
UnsubscribeLocalEvent<PhysicsWakeMessage>();
|
|
UnsubscribeLocalEvent<PhysicsSleepMessage>();
|
|
UnsubscribeLocalEvent<CollisionWakeComponent, CollisionWakeStateMessage>(HandleCollisionWakeState);
|
|
}
|
|
|
|
private void HandleWake(PhysicsWakeMessage message)
|
|
{
|
|
if (!message.Body.Owner.TryGetComponent<CollisionWakeComponent>(out var comp) || !comp.Enabled) return;
|
|
message.Body.CanCollide = true;
|
|
}
|
|
|
|
private void HandleSleep(PhysicsSleepMessage message)
|
|
{
|
|
if (!message.Body.Owner.TryGetComponent<CollisionWakeComponent>(out var comp) || !comp.Enabled) return;
|
|
message.Body.CanCollide = false;
|
|
}
|
|
|
|
private void HandleCollisionWakeState(EntityUid uid, CollisionWakeComponent component, CollisionWakeStateMessage args)
|
|
{
|
|
if(ComponentManager.TryGetComponent<IPhysBody>(uid, out var body))
|
|
body.CanCollide = !component.Enabled || body.Awake;
|
|
}
|
|
}
|
|
|
|
public sealed class CollisionWakeStateMessage : EntityEventArgs { }
|
|
}
|