private IEnumerator <IYieldInstruction> TelemtrySpeedFilter()
        {
            float time = 0.0f;

            while (time < (TELEMETRY_UPDATE_RATE + TELEMETRY_SPEED_FILTER_PADDING))
            {
                time += Time.deltaTime;
                yield return(new YieldUntilNextFrame());
            }
            if (this.StateMachine.CurrentState is DefaultForeignAvatarState)
            {
                DefaultForeignAvatarState state = (DefaultForeignAvatarState)this.StateMachine.CurrentState;
                state.SetCurrentAvatarSpeed(0.0f);
            }
        }
        private IEnumerator <IYieldInstruction> DeadReckonTelemetry(Vector3 position, Quaternion rotation)
        {
            float   step = 1.0f / (TELEMETRY_UPDATE_RATE * 1.1f);
            Vector3 lastFixedUpdatePosition;


            for (float time = 0.0f; time < (TELEMETRY_UPDATE_RATE * 1.1f); time += Time.fixedDeltaTime)
            {
                float t = time * step;

                lastFixedUpdatePosition = this.Entity.UnityGameObject.transform.position;

                yield return(new YieldUntilNextFrame());

                this.Entity.UnityGameObject.transform.position = Vector3.Lerp(mLastPosition, position, t);
                this.Entity.UnityGameObject.transform.rotation = Quaternion.Slerp(mLastRotation, rotation, t);

                if (this.StateMachine.CurrentState is DefaultForeignAvatarState)
                {
                    DefaultForeignAvatarState state = (DefaultForeignAvatarState)this.StateMachine.CurrentState;

                    // Add this frame's speed to the list of recent speeds
                    float thisFrameSpeed = (lastFixedUpdatePosition - this.Entity.UnityGameObject.transform.position).magnitude / Time.fixedDeltaTime;

                    mSpeeds.Add(thisFrameSpeed);
                    if (mSpeeds.Count > mSpeedWindow)
                    {
                        mSpeeds.RemoveAt(0);
                    }

                    // Average the speeds
                    float smoothSpeed = 0.0f;
                    foreach (float speed in mSpeeds)
                    {
                        smoothSpeed += speed;
                    }
                    smoothSpeed /= (float)mSpeeds.Count;

                    state.SetCurrentAvatarSpeed(smoothSpeed);
                }

                lastFixedUpdatePosition = this.Entity.UnityGameObject.transform.position;
            }
        }