Asgard.Client.AsgardClient.AfterTick C# (CSharp) Method

AfterTick() protected method

protected AfterTick ( double delta ) : void
delta double
return void
        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
        }