mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-03 18:47:10 +02:00
106 lines
3.0 KiB
C#
106 lines
3.0 KiB
C#
using Robust.Shared.IoC;
|
|
using Robust.Shared.Physics;
|
|
using Robust.Shared.Physics.Dynamics;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Robust.Shared.GameObjects;
|
|
|
|
public abstract partial class SharedPhysicsSystem
|
|
{
|
|
[Dependency] private readonly FixtureSystem _fixtures = default!;
|
|
|
|
#region Collision Masks & Layers
|
|
|
|
public void AddCollisionMask(FixturesComponent component, Fixture fixture, int mask)
|
|
{
|
|
if ((fixture.CollisionMask & mask) == mask) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionMask |= mask;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
public void SetCollisionMask(FixturesComponent component, Fixture fixture, int mask)
|
|
{
|
|
if (fixture.CollisionMask == mask) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionMask = mask;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
public void RemoveCollisionMask(FixturesComponent component, Fixture fixture, int mask)
|
|
{
|
|
if ((fixture.CollisionMask & mask) == 0x0) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionMask &= ~mask;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
public void AddCollisionLayer(FixturesComponent component, Fixture fixture, int layer)
|
|
{
|
|
if ((fixture.CollisionLayer & layer) == layer) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionLayer |= layer;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
public void SetCollisionLayer(FixturesComponent component, Fixture fixture, int layer)
|
|
{
|
|
if (fixture.CollisionLayer == layer) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionLayer = layer;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
public void RemoveCollisionLayer(FixturesComponent component, Fixture fixture, int layer)
|
|
{
|
|
if ((fixture.CollisionLayer & layer) == 0x0) return;
|
|
|
|
DebugTools.Assert(component.Fixtures.ContainsKey(fixture.ID));
|
|
fixture._collisionLayer &= ~layer;
|
|
|
|
if (TryComp<PhysicsComponent>(component.Owner, out var body))
|
|
{
|
|
_fixtures.FixtureUpdate(component, body);
|
|
}
|
|
|
|
_broadphase.Refilter(fixture);
|
|
}
|
|
|
|
#endregion
|
|
}
|