using System; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Timing; namespace Robust.Client.Physics { [UsedImplicitly] public class PhysicsSystem : SharedPhysicsSystem { [Dependency] private readonly IGameTiming _gameTiming = default!; private TimeSpan _lastRem; public override void Update(float frameTime) { _lastRem = _gameTiming.CurTime; SimulateWorld(frameTime, !_gameTiming.InSimulation || !_gameTiming.IsFirstTimePredicted); } public override void FrameUpdate(float frameTime) { if (_lastRem > _gameTiming.TickRemainder) { _lastRem = TimeSpan.Zero; } var diff = _gameTiming.TickRemainder - _lastRem; _lastRem = _gameTiming.TickRemainder; SimulateWorld((float) diff.TotalSeconds, true); } } }