protected override void AfterTick(double delta)
{
_netAccum += delta;
var invRate = 1f / (float)_netConfig.Tickrate;
if (_netAccum >= invRate)
{
while (_netAccum >= invRate)
{
_netAccum -= invRate;
SendClientState();
}
}
#region client lag comp smoothing
//smooth client movement against lag comp.
var thisPlayer = GetPlayer();
if (thisPlayer == null) return;
var playerComp = thisPlayer.GetComponent<PlayerComponent>();
var phyComp = thisPlayer.GetComponent<Physics2dComponent>();
if (phyComp == null || phyComp.Body == null) return;
var d = (phyComp.Body.Position - playerComp.OldPosition).LengthSquared();
if (playerComp.LerpToReal && d < 5f)
{
float t = (float)((NetTime.RealTime - playerComp.LerpStart)
/ (playerComp.LerpEnd - playerComp.LerpStart));
t = Math.Min(t, 1.0f);
t = Math.Max(t, 0.0f);
playerComp.RenderPosition = Vector2.Lerp(playerComp.OldPosition, phyComp.Body.Position, t);
if ((playerComp.OldPosition - phyComp.Body.Position).LengthSquared() <= 0.0001f)
{
playerComp.LerpToReal = false;
}
}
else
{
playerComp.LerpToReal = false;
playerComp.OldPosition = phyComp.Body.Position;
playerComp.RenderPosition = phyComp.Body.Position;
playerComp.RenderRotation = phyComp.Body.Rotation;
}
#endregion
}