]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Predicted movement opening lockers (#24937)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 4 Feb 2024 02:23:16 +0000 (13:23 +1100)
committerGitHub <noreply@github.com>
Sun, 4 Feb 2024 02:23:16 +0000 (13:23 +1100)
Relay wasn't really networked properly and this annoys me.

EntityStorage is still pretty skrunkly but this fixes the main issue I think.

Content.Client/Storage/Systems/EntityStorageSystem.cs
Content.Server/Storage/EntitySystems/EntityStorageSystem.cs
Content.Shared/Storage/Components/SharedEntityStorageComponent.cs
Content.Shared/Storage/EntitySystems/SharedEntityStorageSystem.cs

index 6d37beb07817732411193607805a56f5109ee8d7..dd3f8d386052c8e4182ee505a51c8936b4f373cf 100644 (file)
@@ -17,6 +17,7 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem
     public override void Initialize()
     {
         base.Initialize();
+        SubscribeLocalEvent<EntityStorageComponent, EntityUnpausedEvent>(OnEntityUnpausedEvent);
         SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
         SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
         SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
index 176fd9b9ed21a7711369fc9f9e3814f5f75366c8..8b31f598d0de409cfa75621fb0dd534676537631 100644 (file)
@@ -33,6 +33,7 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem
         base.Initialize();
 
         /* CompRef things */
+        SubscribeLocalEvent<EntityStorageComponent, EntityUnpausedEvent>(OnEntityUnpausedEvent);
         SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
         SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
         SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
index b4cd18f4d5c62c7eba05b48b1c2b623c9ee9b563..b02c97db711eabe560f4a7c2833187317e6306bc 100644 (file)
@@ -14,7 +14,7 @@ public abstract partial class SharedEntityStorageComponent : Component
     public readonly float MaxSize = 1.0f; // maximum width or height of an entity allowed inside the storage.
 
     public static readonly TimeSpan InternalOpenAttemptDelay = TimeSpan.FromSeconds(0.5);
-    public TimeSpan LastInternalOpenAttempt;
+    public TimeSpan NextInternalOpenAttempt;
 
     /// <summary>
     ///     Collision masks that get removed when the storage gets opened.
@@ -139,13 +139,16 @@ public sealed class EntityStorageComponentState : ComponentState
 
     public float EnteringRange;
 
-    public EntityStorageComponentState(bool open, int capacity, bool isCollidableWhenOpen, bool openOnMove, float enteringRange)
+    public TimeSpan NextInternalOpenAttempt;
+
+    public EntityStorageComponentState(bool open, int capacity, bool isCollidableWhenOpen, bool openOnMove, float enteringRange, TimeSpan nextInternalOpenAttempt)
     {
         Open = open;
         Capacity = capacity;
         IsCollidableWhenOpen = isCollidableWhenOpen;
         OpenOnMove = openOnMove;
         EnteringRange = enteringRange;
+        NextInternalOpenAttempt = nextInternalOpenAttempt;
     }
 }
 
index 8f8707ccde8892a352d88ca60ddf32f6edf194ac..636c603834809769e519d8fd5c45c194e9a3c02d 100644 (file)
@@ -48,13 +48,19 @@ public abstract class SharedEntityStorageSystem : EntitySystem
 
     public const string ContainerName = "entity_storage";
 
+    protected void OnEntityUnpausedEvent(EntityUid uid, SharedEntityStorageComponent component, EntityUnpausedEvent args)
+    {
+        component.NextInternalOpenAttempt += args.PausedTime;
+    }
+
     protected void OnGetState(EntityUid uid, SharedEntityStorageComponent component, ref ComponentGetState args)
     {
         args.State = new EntityStorageComponentState(component.Open,
             component.Capacity,
             component.IsCollidableWhenOpen,
             component.OpenOnMove,
-            component.EnteringRange);
+            component.EnteringRange,
+            component.NextInternalOpenAttempt);
     }
 
     protected void OnHandleState(EntityUid uid, SharedEntityStorageComponent component, ref ComponentHandleState args)
@@ -66,6 +72,7 @@ public abstract class SharedEntityStorageSystem : EntitySystem
         component.IsCollidableWhenOpen = state.IsCollidableWhenOpen;
         component.OpenOnMove = state.OpenOnMove;
         component.EnteringRange = state.EnteringRange;
+        component.NextInternalOpenAttempt = state.NextInternalOpenAttempt;
     }
 
     protected virtual void OnComponentInit(EntityUid uid, SharedEntityStorageComponent component, ComponentInit args)
@@ -123,10 +130,12 @@ public abstract class SharedEntityStorageSystem : EntitySystem
         if (!HasComp<HandsComponent>(args.Entity))
             return;
 
-        if (_timing.CurTime < component.LastInternalOpenAttempt + SharedEntityStorageComponent.InternalOpenAttemptDelay)
+        if (_timing.CurTime < component.NextInternalOpenAttempt)
             return;
 
-        component.LastInternalOpenAttempt = _timing.CurTime;
+        component.NextInternalOpenAttempt = _timing.CurTime + SharedEntityStorageComponent.InternalOpenAttemptDelay;
+        Dirty(uid, component);
+
         if (component.OpenOnMove)
         {
             TryOpenStorage(args.Entity, uid);
@@ -259,7 +268,7 @@ public abstract class SharedEntityStorageSystem : EntitySystem
         ModifyComponents(uid, component);
         if (_net.IsClient && _timing.IsFirstTimePredicted)
             _audio.PlayPvs(component.CloseSound, uid);
-        component.LastInternalOpenAttempt = default;
+
         var afterev = new StorageAfterCloseEvent();
         RaiseLocalEvent(uid, ref afterev);
     }