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:
Jacob Tong
2022-05-10 17:57:20 -07:00
committed by GitHub
parent 6617310ffa
commit 8c853476fb
141 changed files with 750 additions and 1533 deletions

View File

@@ -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;
}