Predicted movement opening lockers (#24937)
Relay wasn't really networked properly and this annoys me. EntityStorage is still pretty skrunkly but this fixes the main issue I think.
This commit is contained in:
@@ -17,6 +17,7 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem
|
|||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<EntityStorageComponent, EntityUnpausedEvent>(OnEntityUnpausedEvent);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
|
SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
|
SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
|
SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem
|
|||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
/* CompRef things */
|
/* CompRef things */
|
||||||
|
SubscribeLocalEvent<EntityStorageComponent, EntityUnpausedEvent>(OnEntityUnpausedEvent);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
|
SubscribeLocalEvent<EntityStorageComponent, ComponentInit>(OnComponentInit);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
|
SubscribeLocalEvent<EntityStorageComponent, ComponentStartup>(OnComponentStartup);
|
||||||
SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
|
SubscribeLocalEvent<EntityStorageComponent, ActivateInWorldEvent>(OnInteract, after: new[] { typeof(LockSystem) });
|
||||||
|
|||||||
@@ -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 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 static readonly TimeSpan InternalOpenAttemptDelay = TimeSpan.FromSeconds(0.5);
|
||||||
public TimeSpan LastInternalOpenAttempt;
|
public TimeSpan NextInternalOpenAttempt;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Collision masks that get removed when the storage gets opened.
|
/// Collision masks that get removed when the storage gets opened.
|
||||||
@@ -139,13 +139,16 @@ public sealed class EntityStorageComponentState : ComponentState
|
|||||||
|
|
||||||
public float EnteringRange;
|
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;
|
Open = open;
|
||||||
Capacity = capacity;
|
Capacity = capacity;
|
||||||
IsCollidableWhenOpen = isCollidableWhenOpen;
|
IsCollidableWhenOpen = isCollidableWhenOpen;
|
||||||
OpenOnMove = openOnMove;
|
OpenOnMove = openOnMove;
|
||||||
EnteringRange = enteringRange;
|
EnteringRange = enteringRange;
|
||||||
|
NextInternalOpenAttempt = nextInternalOpenAttempt;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -48,13 +48,19 @@ public abstract class SharedEntityStorageSystem : EntitySystem
|
|||||||
|
|
||||||
public const string ContainerName = "entity_storage";
|
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)
|
protected void OnGetState(EntityUid uid, SharedEntityStorageComponent component, ref ComponentGetState args)
|
||||||
{
|
{
|
||||||
args.State = new EntityStorageComponentState(component.Open,
|
args.State = new EntityStorageComponentState(component.Open,
|
||||||
component.Capacity,
|
component.Capacity,
|
||||||
component.IsCollidableWhenOpen,
|
component.IsCollidableWhenOpen,
|
||||||
component.OpenOnMove,
|
component.OpenOnMove,
|
||||||
component.EnteringRange);
|
component.EnteringRange,
|
||||||
|
component.NextInternalOpenAttempt);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void OnHandleState(EntityUid uid, SharedEntityStorageComponent component, ref ComponentHandleState args)
|
protected void OnHandleState(EntityUid uid, SharedEntityStorageComponent component, ref ComponentHandleState args)
|
||||||
@@ -66,6 +72,7 @@ public abstract class SharedEntityStorageSystem : EntitySystem
|
|||||||
component.IsCollidableWhenOpen = state.IsCollidableWhenOpen;
|
component.IsCollidableWhenOpen = state.IsCollidableWhenOpen;
|
||||||
component.OpenOnMove = state.OpenOnMove;
|
component.OpenOnMove = state.OpenOnMove;
|
||||||
component.EnteringRange = state.EnteringRange;
|
component.EnteringRange = state.EnteringRange;
|
||||||
|
component.NextInternalOpenAttempt = state.NextInternalOpenAttempt;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnComponentInit(EntityUid uid, SharedEntityStorageComponent component, ComponentInit args)
|
protected virtual void OnComponentInit(EntityUid uid, SharedEntityStorageComponent component, ComponentInit args)
|
||||||
@@ -123,10 +130,12 @@ public abstract class SharedEntityStorageSystem : EntitySystem
|
|||||||
if (!HasComp<HandsComponent>(args.Entity))
|
if (!HasComp<HandsComponent>(args.Entity))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_timing.CurTime < component.LastInternalOpenAttempt + SharedEntityStorageComponent.InternalOpenAttemptDelay)
|
if (_timing.CurTime < component.NextInternalOpenAttempt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
component.LastInternalOpenAttempt = _timing.CurTime;
|
component.NextInternalOpenAttempt = _timing.CurTime + SharedEntityStorageComponent.InternalOpenAttemptDelay;
|
||||||
|
Dirty(uid, component);
|
||||||
|
|
||||||
if (component.OpenOnMove)
|
if (component.OpenOnMove)
|
||||||
{
|
{
|
||||||
TryOpenStorage(args.Entity, uid);
|
TryOpenStorage(args.Entity, uid);
|
||||||
@@ -259,7 +268,7 @@ public abstract class SharedEntityStorageSystem : EntitySystem
|
|||||||
ModifyComponents(uid, component);
|
ModifyComponents(uid, component);
|
||||||
if (_net.IsClient && _timing.IsFirstTimePredicted)
|
if (_net.IsClient && _timing.IsFirstTimePredicted)
|
||||||
_audio.PlayPvs(component.CloseSound, uid);
|
_audio.PlayPvs(component.CloseSound, uid);
|
||||||
component.LastInternalOpenAttempt = default;
|
|
||||||
var afterev = new StorageAfterCloseEvent();
|
var afterev = new StorageAfterCloseEvent();
|
||||||
RaiseLocalEvent(uid, ref afterev);
|
RaiseLocalEvent(uid, ref afterev);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user