11using NebulaAPI ;
22using NebulaModel ;
3- using NebulaModel . DataStructures ;
43using NebulaModel . Logger ;
54using NebulaModel . Networking ;
65using NebulaModel . Packets ;
76using NebulaModel . Packets . GameStates ;
87using NebulaWorld ;
8+ using NebulaWorld . GameStates ;
99using System ;
1010using UnityEngine ;
1111
@@ -14,9 +14,13 @@ namespace NebulaNetwork.PacketProcessors.GameStates
1414 [ RegisterPacketProcessor ]
1515 public class GameStateUpdateProcessor : PacketProcessor < GameStateUpdate >
1616 {
17+ public float MaxUPS = 120f ;
18+ public float MinUPS = 30f ;
19+ public float BUFFERING_TIME = 30f ;
20+ public float BUFFERING_TICK = 60f ;
21+
1722 private int averageRTT ;
1823 private float avaerageUPS = 60f ;
19- private const float BUFFERING_TIME = 20f ;
2024 private bool hasChanged ;
2125
2226 public override void ProcessPacket ( GameStateUpdate packet , NebulaConnection conn )
@@ -64,23 +68,23 @@ public override void ProcessPacket(GameStateUpdate packet, NebulaConnection conn
6468 // Adjust client's UPS to match game tick with server, range 30~120 UPS
6569 float UPS = diff / 1f + avaerageUPS ;
6670 long skipTick = 0 ;
67- if ( UPS > 120f )
71+ if ( UPS > MaxUPS )
6872 {
6973 // Try to disturbute game tick difference into BUFFERING_TIME (seconds)
70- if ( diff / BUFFERING_TIME + avaerageUPS > 120f )
74+ if ( diff / BUFFERING_TIME + avaerageUPS > MaxUPS )
7175 {
7276 // The difference is too large, need to skip ticks to catch up
73- skipTick = ( long ) ( UPS - 120f ) ;
77+ skipTick = ( long ) ( UPS - MaxUPS ) ;
7478 }
75- UPS = 120f ;
79+ UPS = MaxUPS ;
7680 }
77- else if ( UPS < 30f )
81+ else if ( UPS < MinUPS )
7882 {
79- if ( diff / BUFFERING_TIME + avaerageUPS < 30f )
83+ if ( diff + avaerageUPS - MinUPS < - BUFFERING_TICK )
8084 {
81- skipTick = ( long ) ( UPS - 30f ) ;
85+ skipTick = ( long ) ( UPS - MinUPS ) ;
8286 }
83- UPS = 30f ;
87+ UPS = MinUPS ;
8488 }
8589 if ( skipTick != 0 )
8690 {
@@ -89,6 +93,8 @@ public override void ProcessPacket(GameStateUpdate packet, NebulaConnection conn
8993 }
9094 FPSController . SetFixUPS ( UPS ) ;
9195 hasChanged = true ;
96+ // Tick difference in the next second. Expose for other mods
97+ GameStatesManager . NotifyTickDifference ( ( diff / 1f + avaerageUPS ) - UPS ) ;
9298 }
9399 }
94100}
0 commit comments