diff --git a/src/AcDream.Core/Physics/PhysicsEngine.cs b/src/AcDream.Core/Physics/PhysicsEngine.cs index 4f2b8dd..f36b704 100644 --- a/src/AcDream.Core/Physics/PhysicsEngine.cs +++ b/src/AcDream.Core/Physics/PhysicsEngine.cs @@ -128,24 +128,21 @@ public sealed class PhysicsEngine targetZ = terrainZ; targetCellId = physics.Terrain.ComputeOutdoorCellId(localCandX, localCandY); } - else if (!currentlyIndoor && bestCellZ is not null - && MathF.Abs(bestCellZ.Value - currentPos.Z) < stepUpHeight + 2f - && bestCellZ.Value < terrainZ - 1f) +#pragma warning disable CS0162 + else if (false) // Phase B.2 MVP: outdoor→indoor transition DISABLED. { - // Walked into an indoor cell from outdoor — transition to indoor. - // The extra guard `bestCellZ < terrainZ - 1` prevents transitioning - // into cells whose floor is AT or ABOVE terrain level — those are - // typically roofs, upper floors, or building footprints that overlap - // the outdoor terrain. A genuine indoor transition is into a cell - // whose floor is BELOW the terrain surface (basements, ground floors - // of buildings that sit on elevated terrain). Without this guard, - // standing near any building with a floor polygon covering the - // player's XY triggers an indoor transition and snaps Z to the - // cell's floor — which for multi-story buildings can be 30+ units - // below the outdoor terrain. - targetZ = bestCellZ.Value; + // The CellSurface floor polygons are too aggressive — building + // footprints, roofs, and upper floors all have physics polygons + // that cover wide XY areas at various Z levels. Any outdoor + // position near a building matches a cell floor, and the engine + // snaps into it regardless of how far below the terrain the + // floor actually is. Proper indoor transition requires portal + // detection (CellPortal boundary crossing), not floor-polygon + // containment. Disabled until Phase E implements that. + targetZ = bestCellZ!.Value; targetCellId = bestCell!.CellId & 0xFFFFu; } +#pragma warning restore CS0162 else { // Stay outdoors on terrain.