Skip to content

Commit 2c9485f

Browse files
committed
Fixed players "lagging" while moving (guess what happens when you don't tell players that they can move fast)
1 parent 96f1167 commit 2c9485f

24 files changed

Lines changed: 195 additions & 222 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ LabExtended.sln.DotSettings.user
1010
global.json
1111
/LabExtended.ImageConvertor/obj
1212
/LabExtended.ImageConvertor/bin/Debug/net9.0
13+
/LabExtended.ImageConvertor/bin/Release/net9.0
14+
/LabExtended.ImageConvertor/Properties/PublishProfiles
15+
/LabExtended.ImageConvertor/LabExtended.ImageConvertor.csproj.user

LabExtended/API/Collections/Updateable/UpdateableList.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,14 @@ public class UpdateableList<T> : UnsafeList<T>, IDisposable
4343
/// <returns></returns>
4444
public UpdateableList<T> Initialize()
4545
{
46-
PlayerUpdateHelper.OnUpdate += Update;
46+
PlayerUpdateHelper.Component.OnUpdate += Update;
4747
return this;
4848
}
4949

5050
/// <inheritdoc cref="IDisposable.Dispose"/>
5151
public void Dispose()
5252
{
53-
PlayerUpdateHelper.OnUpdate -= Update;
53+
PlayerUpdateHelper.Component.OnUpdate -= Update;
5454
}
5555

5656
private void Update()

LabExtended/API/Custom/Effects/CustomTickingEffect.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ public virtual void Tick() { }
2727
public override void Start()
2828
{
2929
base.Start();
30-
PlayerUpdateHelper.OnUpdate += OnUpdate;
30+
PlayerUpdateHelper.Component.OnUpdate += OnUpdate;
3131
}
3232

3333
/// <inheritdoc cref="CustomPlayerEffect.Stop"/>
3434
public override void Stop()
3535
{
3636
base.Stop();
37-
PlayerUpdateHelper.OnUpdate -= OnUpdate;
37+
PlayerUpdateHelper.Component.OnUpdate -= OnUpdate;
3838
}
3939

4040
private void OnUpdate()

LabExtended/API/Custom/Voice/Threading/VoiceThread.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public VoiceThread(VoiceController controller)
9797
onPacketProcessed = ProcessPitched;
9898

9999
ExServerEvents.Quitting += Dispose;
100-
PlayerUpdateHelper.OnUpdate += UpdateOutputQueue;
100+
PlayerUpdateHelper.Component.OnUpdate += UpdateOutputQueue;
101101

102102
Task.Run(UpdateInputQueueAsync);
103103
}
@@ -108,7 +108,7 @@ public void Dispose()
108108
if (isDisposed)
109109
return;
110110

111-
PlayerUpdateHelper.OnUpdate -= UpdateOutputQueue;
111+
PlayerUpdateHelper.Component.OnUpdate -= UpdateOutputQueue;
112112
ExServerEvents.Quitting -= Dispose;
113113

114114
isDisposed = true;

LabExtended/API/Custom/Voice/VoiceController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ internal VoiceController(ExPlayer player)
9292
sessionPackets = DictionaryPool<long, VoiceMessage>.Shared.Rent();
9393
profiles = DictionaryPool<Type, VoiceProfile>.Shared.Rent();
9494

95-
PlayerUpdateHelper.OnUpdate += UpdateSpeaking;
95+
PlayerUpdateHelper.Component.OnUpdate += UpdateSpeaking;
9696
PlayerEvents.ChangedRole += HandleRoleChange;
9797

9898
OnJoined.InvokeSafe(this);
@@ -278,7 +278,7 @@ public void RemoveProfiles()
278278
/// <inheritdoc cref="IDisposable.Dispose"/>
279279
public void Dispose()
280280
{
281-
PlayerUpdateHelper.OnUpdate -= UpdateSpeaking;
281+
PlayerUpdateHelper.Component.OnUpdate -= UpdateSpeaking;
282282
PlayerEvents.ChangedRole -= HandleRoleChange;
283283

284284
Thread?.Dispose();

LabExtended/API/CustomTeams/CustomTeamTimer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public virtual void Start()
138138
InternalEvents.OnRoundStarted += OnStarted;
139139
InternalEvents.OnRoundEnded += OnEnding;
140140

141-
PlayerUpdateHelper.OnUpdate += Update;
141+
PlayerUpdateHelper.Component.OnUpdate += Update;
142142
}
143143

144144
/// <inheritdoc cref="IDisposable.Dispose"/>
@@ -147,7 +147,7 @@ public virtual void Dispose()
147147
InternalEvents.OnRoundStarted -= OnStarted;
148148
InternalEvents.OnRoundEnded -= OnEnding;
149149

150-
PlayerUpdateHelper.OnUpdate -= Update;
150+
PlayerUpdateHelper.Component.OnUpdate -= Update;
151151

152152
SpawnedWaves.Clear();
153153
}

LabExtended/API/ExPlayer.cs

Lines changed: 38 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CentralAuth;
2+
23
using CommandSystem;
34

45
using Footprinting;
@@ -12,10 +13,12 @@
1213

1314
using LabApi.Features.Wrappers;
1415

15-
using LabExtended.API.Enums;
1616
using LabExtended.API.Containers;
17+
1718
using LabExtended.API.Custom.Voice;
1819

20+
using LabExtended.API.Enums;
21+
1922
using LabExtended.API.Hints;
2023
using LabExtended.API.Hints.Elements.Personal;
2124

@@ -29,11 +32,13 @@
2932
using LabExtended.Core.Pooling.Pools;
3033

3134
using LabExtended.Events;
35+
using LabExtended.Events.Player;
36+
3237
using LabExtended.Extensions;
3338

3439
using LabExtended.Utilities;
3540
using LabExtended.Utilities.FileStorage;
36-
41+
using LabExtended.Utilities.Update;
3742
using LiteNetLib;
3843

3944
using Mirror;
@@ -44,8 +49,8 @@
4449
using NorthwoodLib.Pools;
4550

4651
using PlayerRoles;
47-
using PlayerRoles.Spectating;
4852
using PlayerRoles.FirstPersonControl;
53+
using PlayerRoles.Spectating;
4954

5055
using RemoteAdmin;
5156
using RemoteAdmin.Communication;
@@ -57,8 +62,6 @@
5762
using UserSettings.ServerSpecific;
5863

5964
using VoiceChat;
60-
using LabExtended.Utilities.Update;
61-
using LabExtended.Events.Player;
6265

6366
#pragma warning disable CS8602 // Dereference of a possibly null reference.
6467
#pragma warning disable CS8604 // Possible null reference argument.
@@ -71,6 +74,8 @@ namespace LabExtended.API;
7174
[CommandPropertyAlias("player")]
7275
public class ExPlayer : Player, IDisposable
7376
{
77+
internal static PlayerUpdateComponent playerUpdate = PlayerUpdateComponent.Create();
78+
7479
internal static Dictionary<string, string> preauthData = new(byte.MaxValue);
7580
internal static ExPlayer? host;
7681

@@ -586,7 +591,7 @@ public ExPlayer(ReferenceHub referenceHub, SwitchContainer toggles) : base(refer
586591
Toggles.IsVisibleInRemoteAdmin = false;
587592
}
588593

589-
PlayerUpdateHelper.OnUpdate += Internal_Update;
594+
playerUpdate.OnUpdate += RefreshModifiers;
590595

591596
InternalEvents.HandlePlayerJoin(this);
592597
}
@@ -1387,7 +1392,7 @@ public string ToLogString()
13871392
/// <inheritdoc cref="IDisposable.Dispose"/>
13881393
public void Dispose()
13891394
{
1390-
PlayerUpdateHelper.OnUpdate -= Internal_Update;
1395+
playerUpdate.OnUpdate -= RefreshModifiers;
13911396

13921397
if (host != null && host == this)
13931398
host = null;
@@ -1493,59 +1498,44 @@ public void Dispose()
14931498
Rotation = null!;
14941499
}
14951500

1496-
private void Internal_Update()
1501+
private void RefreshModifiers()
14971502
{
1498-
if (ReferenceHub != null)
1499-
{
1500-
Internal_RefreshModifiers(this);
1501-
}
1502-
else
1503-
{
1504-
PlayerUpdateHelper.OnUpdate -= Internal_Update;
1505-
}
1506-
}
1503+
var inventory = ReferenceHub.inventory;
15071504

1508-
private static void Internal_RefreshModifiers(ExPlayer player)
1509-
{
1510-
var inventory = player.ReferenceHub.inventory;
1505+
inventory._staminaModifier = 1f;
15111506

1512-
if (inventory != null)
1513-
{
1514-
inventory._staminaModifier = 1f;
1507+
inventory._movementMultiplier = 1f;
1508+
inventory._movementLimiter = float.MaxValue;
15151509

1516-
inventory._movementMultiplier = 1f;
1517-
inventory._movementLimiter = float.MaxValue;
1510+
inventory._sprintingDisabled = false;
15181511

1519-
inventory._sprintingDisabled = false;
1512+
foreach (var pair in inventory.UserInventory.Items)
1513+
{
1514+
var mobilityController = pair.Value.GetMobilityController();
15201515

1521-
foreach (var pair in inventory.UserInventory.Items)
1516+
if (mobilityController is IStaminaModifier staminaModifier
1517+
&& staminaModifier.StaminaModifierActive)
15221518
{
1523-
var mobilityController = pair.Value.GetMobilityController();
1524-
1525-
if (mobilityController is IStaminaModifier staminaModifier
1526-
&& staminaModifier.StaminaModifierActive)
1527-
{
1528-
inventory._staminaModifier *= staminaModifier.StaminaUsageMultiplier;
1529-
inventory._sprintingDisabled |= staminaModifier.SprintingDisabled;
1530-
}
1519+
inventory._staminaModifier *= staminaModifier.StaminaUsageMultiplier;
1520+
inventory._sprintingDisabled |= staminaModifier.SprintingDisabled;
1521+
}
15311522

1532-
if (mobilityController is IMovementSpeedModifier movementSpeedModifier
1533-
&& movementSpeedModifier.MovementModifierActive)
1534-
{
1535-
inventory._movementLimiter = Mathf.Min(inventory._movementLimiter, movementSpeedModifier.MovementSpeedLimit);
1536-
inventory._movementMultiplier *= movementSpeedModifier.MovementSpeedMultiplier;
1537-
}
1523+
if (mobilityController is IMovementSpeedModifier movementSpeedModifier
1524+
&& movementSpeedModifier.MovementModifierActive)
1525+
{
1526+
inventory._movementLimiter = Mathf.Min(inventory._movementLimiter, movementSpeedModifier.MovementSpeedLimit);
1527+
inventory._movementMultiplier *= movementSpeedModifier.MovementSpeedMultiplier;
15381528
}
1529+
}
15391530

1540-
var refreshingEventArgs = new PlayerRefreshingModifiersEventArgs(player, inventory._staminaModifier, inventory._movementMultiplier,
1541-
inventory._movementLimiter);
1531+
var refreshingEventArgs = new PlayerRefreshingModifiersEventArgs(this, inventory._staminaModifier, inventory._movementMultiplier,
1532+
inventory._movementLimiter);
15421533

1543-
ExPlayerEvents.OnRefreshingModifiers(refreshingEventArgs);
1534+
ExPlayerEvents.OnRefreshingModifiers(refreshingEventArgs);
15441535

1545-
inventory._staminaModifier = refreshingEventArgs.StaminaUsageMultiplier;
1546-
inventory._movementMultiplier = refreshingEventArgs.MovementSpeedMultiplier;
1547-
inventory._movementLimiter = refreshingEventArgs.MovementSpeedLimiter;
1548-
}
1536+
inventory.Network_syncStaminaModifier = refreshingEventArgs.StaminaUsageMultiplier;
1537+
inventory.Network_syncMovementMultiplier = refreshingEventArgs.MovementSpeedMultiplier;
1538+
inventory.Network_syncMovementLimiter = refreshingEventArgs.MovementSpeedLimiter;
15491539
}
15501540

15511541
private static ReferenceHub SpawnHiddenDummy(string nick)

LabExtended/API/ExTeslaGate.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ internal static void Internal_Init()
457457
TeslaGate.OnAdded += OnTeslaSpawned;
458458
TeslaGate.OnRemoved += OnTeslaDestroyed;
459459

460-
PlayerUpdateHelper.OnUpdate += OnUpdate;
460+
PlayerUpdateHelper.Component.OnUpdate += OnUpdate;
461461

462462
InternalEvents.OnRoundRestart += Lookup.Clear;
463463
InternalEvents.OnRoundRestart += Gates.Clear;

LabExtended/API/Hints/HintController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -922,5 +922,5 @@ private static void Update()
922922
}
923923

924924
internal static void Internal_Init()
925-
=> PlayerUpdateHelper.OnUpdate += Update;
925+
=> PlayerUpdateHelper.Component.OnUpdate += Update;
926926
}

LabExtended/API/Images/Playback/PlaybackBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public PlaybackBase(IPlaybackDisplay display)
7171

7272
Display = display;
7373

74-
PlayerUpdateHelper.OnUpdate += Update;
74+
PlayerUpdateHelper.Component.OnUpdate += Update;
7575
}
7676

7777
/// <summary>
@@ -170,7 +170,7 @@ public virtual void Dispose()
170170
{
171171
if (State != PlaybackState.Disposed)
172172
{
173-
PlayerUpdateHelper.OnUpdate -= Update;
173+
PlayerUpdateHelper.Component.OnUpdate -= Update;
174174

175175
Stop();
176176
}

0 commit comments

Comments
 (0)