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

@@ -48,9 +48,9 @@ namespace Content.Server.AI.Pathfinding
public const int TrackedCollisionLayers = (int)
(CollisionGroup.Impassable |
CollisionGroup.MobImpassable |
CollisionGroup.SmallImpassable |
CollisionGroup.VaultImpassable);
CollisionGroup.MidImpassable |
CollisionGroup.LowImpassable |
CollisionGroup.HighImpassable);
/// <summary>
/// Ask for the pathfinder to gimme somethin

View File

@@ -60,7 +60,7 @@ namespace Content.Server.Atmos.EntitySystems
{
foreach (var (_, fixture) in fixtures.Fixtures)
{
_physics.AddCollisionMask(fixtures, fixture, (int) CollisionGroup.VaultImpassable);
_physics.AddCollisionMask(fixtures, fixture, (int) CollisionGroup.TableLayer);
}
}
}
@@ -79,7 +79,7 @@ namespace Content.Server.Atmos.EntitySystems
foreach (var fixture in fixtures.Fixtures.Values)
{
_physics.RemoveCollisionMask(fixtures, fixture, (int) CollisionGroup.VaultImpassable);
_physics.RemoveCollisionMask(fixtures, fixture, (int) CollisionGroup.TableLayer);
}
// TODO: Make them dynamic type? Ehh but they still want movement so uhh make it non-predicted like weightless?

View File

@@ -35,7 +35,7 @@ public sealed class ClimbSystem : SharedClimbSystem
[Dependency] private readonly StunSystem _stunSystem = default!;
private const string ClimbingFixtureName = "climb";
private const int ClimbingCollisionGroup = (int) CollisionGroup.VaultImpassable;
private const int ClimbingCollisionGroup = (int) CollisionGroup.TableLayer;
private readonly Dictionary<EntityUid, List<Fixture>> _fixtureRemoveQueue = new();

View File

@@ -62,7 +62,7 @@ public sealed partial class TriggerSystem
_fixtures.TryCreateFixture(body, new Fixture(body, component.Shape)
{
// TODO: Should probably have these settable via datafield but I'm lazy and it's a pain
CollisionLayer = (int) (CollisionGroup.MobImpassable | CollisionGroup.SmallImpassable | CollisionGroup.VaultImpassable), Hard = false, ID = TriggerOnProximityComponent.FixtureID
CollisionLayer = (int) (CollisionGroup.MidImpassable | CollisionGroup.LowImpassable | CollisionGroup.HighImpassable), Hard = false, ID = TriggerOnProximityComponent.FixtureID
});
}

View File

@@ -26,6 +26,8 @@ namespace Content.Server.Morgue.Components
{
[Dependency] private readonly IEntityManager _entMan = default!;
private const CollisionGroup TrayCanOpenMask = CollisionGroup.Impassable | CollisionGroup.MidImpassable;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("trayPrototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
private string? _trayPrototypeId;
@@ -69,7 +71,7 @@ namespace Content.Server.Morgue.Components
{
if (!EntitySystem.Get<SharedInteractionSystem>().InRangeUnobstructed(Owner,
_entMan.GetComponent<TransformComponent>(Owner).Coordinates.Offset(_entMan.GetComponent<TransformComponent>(Owner).LocalRotation.GetCardinalDir()),
collisionMask: CollisionGroup.Impassable | CollisionGroup.VaultImpassable
collisionMask: TrayCanOpenMask
))
{
if (!silent)

View File

@@ -271,7 +271,7 @@ namespace Content.Server.Shuttles.EntitySystems
{
ID = BurnFixture,
Hard = false,
CollisionLayer = (int) CollisionGroup.MobImpassable
CollisionLayer = (int) CollisionGroup.FullTileMask
};
_fixtureSystem.TryCreateFixture(physicsComponent, fixture);

View File

@@ -42,9 +42,9 @@ namespace Content.Server.Storage.Components
/// Collision masks that get removed when the storage gets opened.
/// </summary>
private const int MasksToRemove = (int) (
CollisionGroup.MobImpassable |
CollisionGroup.VaultImpassable |
CollisionGroup.SmallImpassable);
CollisionGroup.MidImpassable |
CollisionGroup.HighImpassable |
CollisionGroup.LowImpassable);
/// <summary>
/// Collision masks that were removed from ANY layer when the storage was opened;