From b90fc2adf1575a5c2ca30f4ab3fd72a777659672 Mon Sep 17 00:00:00 2001 From: ThereDrD <88589686+ThereDrD0@users.noreply.github.com> Date: Wed, 7 Jan 2026 14:22:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20=D0=B4=D0=B2?= =?UTF-8?q?=D0=BE=D0=B9=D0=BD=D1=8B=D1=85=20=D1=88=D0=BB=D1=8E=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=20(#3602)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Doors/Systems/SharedDoorSystem.cs | 48 +++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 922989e744..8892e56fe4 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -57,7 +57,14 @@ public abstract partial class SharedDoorSystem : EntitySystem /// private readonly HashSet> _activeDoors = new(); - private readonly HashSet> _doorIntersecting = new(); + // Sunrise edit start - для двойных шлюзов пришлось поменять на просто EntityUid + // Так как метода с Entity нет + private readonly HashSet _doorIntersecting = new(); + // Sunrise edit end + + // Sunrise added start - фикс двойных шлюзов + private EntityQuery _physicsQuery; + // Sunrise added end public override void Initialize() { @@ -80,6 +87,10 @@ public abstract partial class SharedDoorSystem : EntitySystem SubscribeLocalEvent(OnWeldChanged); SubscribeLocalEvent(OnPryTimeModifier); SubscribeLocalEvent(OnEmagged); + + // Sunrise added start - фикс двойных шлюзов + _physicsQuery = GetEntityQuery(); + // Sunrise added end } protected virtual void OnComponentInit(Entity ent, ref ComponentInit args) @@ -589,44 +600,53 @@ public abstract partial class SharedDoorSystem : EntitySystem var tileRef = _mapSystem.GetTileRef(xform.GridUid.Value, mapGridComp, xform.Coordinates); _doorIntersecting.Clear(); - _entityLookup.GetLocalEntitiesIntersecting(xform.GridUid.Value, - tileRef.GridIndices, + + // Sunrise edit start - фикс двойных шлюзов + var aabb = _entityLookup.GetWorldAABB(uid); + _entityLookup.GetEntitiesIntersecting(xform.GridUid.Value, + aabb, _doorIntersecting, - gridComp: mapGridComp, flags: (LookupFlags.All & ~LookupFlags.Sensors)); + // Sunrise edit end // TODO SLOTH fix electro's code. // ReSharper disable once InconsistentNaming + // Sunrise edit start - фикс двойных шлюзов + // Просто методя с Entity нет, поэтому пришлось тут все менять foreach (var otherPhysics in _doorIntersecting) { - if (otherPhysics.Comp == physics) + if (!_physicsQuery.TryComp(otherPhysics, out var physicsComp)) continue; - if (!otherPhysics.Comp.CanCollide) + if (physicsComp == physics) + continue; + + if (!physicsComp.CanCollide) continue; //TODO: Make only shutters ignore these objects upon colliding instead of all airlocks // Excludes Glasslayer for windows, GlassAirlockLayer for windoors, TableLayer for tables - if (otherPhysics.Comp.CollisionLayer == (int)CollisionGroup.GlassLayer || - otherPhysics.Comp.CollisionLayer == (int)CollisionGroup.GlassAirlockLayer || - otherPhysics.Comp.CollisionLayer == (int)CollisionGroup.TableLayer) + if (physicsComp.CollisionLayer == (int)CollisionGroup.GlassLayer || + physicsComp.CollisionLayer == (int)CollisionGroup.GlassAirlockLayer || + physicsComp.CollisionLayer == (int)CollisionGroup.TableLayer) continue; // Ignore low-passable entities. - if ((otherPhysics.Comp.CollisionMask & (int)CollisionGroup.LowImpassable) == 0) + if ((physicsComp.CollisionMask & (int)CollisionGroup.LowImpassable) == 0) continue; //For when doors need to close over conveyor belts - if (otherPhysics.Comp.CollisionLayer == (int)CollisionGroup.ConveyorMask) + if (physicsComp.CollisionLayer == (int)CollisionGroup.ConveyorMask) continue; - if ((physics.CollisionMask & otherPhysics.Comp.CollisionLayer) == 0 && - (otherPhysics.Comp.CollisionMask & physics.CollisionLayer) == 0) + if ((physics.CollisionMask & physicsComp.CollisionLayer) == 0 && + (physicsComp.CollisionMask & physics.CollisionLayer) == 0) continue; - yield return otherPhysics.Owner; + yield return otherPhysics; } + // Sunrise edit end } private void PreventCollision(EntityUid uid, DoorComponent component, ref PreventCollideEvent args)