Rework CollisionGroups (#7656)
* Replace Mob, Vault, and Small impassable with Mid, High, Low * Remove CollisionGroup.Underplating * Remove CollisionGroup.Passable * Fix constructed APCs not being interactable * Change firelocks to occlude * Make pipe inherit from BaseItem * Clean up pipes * Remove duplicate physics and fixtures from bucket * Rework CollisionGroups on all entities * Add SlipLayer * Remove fixture from delta * Fix maps * Address reviews * Add SubfloorMask * Fix glass collisions for flying mobs * Fix maps * Update new items * Fix bagel again * Fix slug * Fix maps * Touchups * Fix tables blocking high pressure movement * Update StandingState to allow going under flaps * Cleanup * More formatting
This commit is contained in:
@@ -12,6 +12,9 @@ namespace Content.Shared.Standing
|
||||
public sealed class StandingStateSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _gameTiming = default!;
|
||||
|
||||
// If StandingCollisionLayer value is ever changed to more than one layer, the logic needs to be edited.
|
||||
private const int StandingCollisionLayer = (int) CollisionGroup.MidImpassable;
|
||||
|
||||
public bool IsDown(EntityUid uid, StandingStateComponent? standingState = null)
|
||||
{
|
||||
@@ -61,15 +64,16 @@ namespace Content.Shared.Standing
|
||||
// Seemed like the best place to put it
|
||||
appearance?.SetData(RotationVisuals.RotationState, RotationState.Horizontal);
|
||||
|
||||
// Change collision masks to allow going under certain entities like flaps and tables
|
||||
if (TryComp(uid, out FixturesComponent? fixtureComponent))
|
||||
{
|
||||
foreach (var (key, fixture) in fixtureComponent.Fixtures)
|
||||
{
|
||||
if ((fixture.CollisionMask & (int) CollisionGroup.VaultImpassable) == 0)
|
||||
if ((fixture.CollisionMask & StandingCollisionLayer) == 0)
|
||||
continue;
|
||||
|
||||
standingState.VaultImpassableFixtures.Add(key);
|
||||
fixture.CollisionMask &= ~(int) CollisionGroup.VaultImpassable;
|
||||
standingState.ChangedFixtures.Add(key);
|
||||
fixture.CollisionMask &= ~StandingCollisionLayer;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,13 +115,13 @@ namespace Content.Shared.Standing
|
||||
|
||||
if (TryComp(uid, out FixturesComponent? fixtureComponent))
|
||||
{
|
||||
foreach (var key in standingState.VaultImpassableFixtures)
|
||||
foreach (var key in standingState.ChangedFixtures)
|
||||
{
|
||||
if (fixtureComponent.Fixtures.TryGetValue(key, out var fixture))
|
||||
fixture.CollisionMask |= (int) CollisionGroup.VaultImpassable;
|
||||
fixture.CollisionMask |= StandingCollisionLayer;
|
||||
}
|
||||
}
|
||||
standingState.VaultImpassableFixtures.Clear();
|
||||
standingState.ChangedFixtures.Clear();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user