Example #1
0
        public static Quaternion ExtrapolateQuaternion(Quaternion cquat, Quaternion rquat, int recievedFrame, int entityFrame, PropertyExtrapolationSettings settings)
        {
            var   r = rquat * Quaternion.Inverse(cquat);
            float d = System.Math.Min(settings.MaxFrames, (entityFrame + 1) - recievedFrame);
            float t = d / (float)System.Math.Max(1, settings.MaxFrames);

            float   r_angle;
            Vector3 r_axis;

            r.ToAngleAxis(out r_angle, out r_axis);

            if (float.IsInfinity(r_axis.x) || float.IsNaN(r_axis.x))
            {
                r_angle = 0;
                r_axis  = Vector3.right;
            }
            else
            {
                if (r_angle > 180)
                {
                    r_angle -= 360;
                }
            }

            return(Quaternion.AngleAxis((r_angle * t) % 360f, r_axis) * cquat);
        }
Example #2
0
 public void Settings_Extrapolation(PropertyExtrapolationSettings extrapolation)
 {
     Extrapolation = extrapolation;
 }
Example #3
0
        public static Vector3 ExtrapolateVector(Vector3 cpos, Vector3 rpos, Vector3 rvel, int recievedFrame, int entityFrame, PropertyExtrapolationSettings settings, ref bool snapped)
        {
            rvel *= AscensionNetwork.FrameDeltaTime;

            float d = System.Math.Min(settings.MaxFrames, (entityFrame + 1) - recievedFrame);
            float t = d / System.Math.Max(1, settings.MaxFrames);

            Vector3 p0 = cpos + (rvel);
            Vector3 p1 = rpos + (rvel * d);

            float sqrMag = (p1 - p0).sqrMagnitude;

            if ((settings.SnapMagnitude > 0) && sqrMag > (settings.SnapMagnitude * settings.SnapMagnitude))
            {
                snapped = true;
                return(p1);
            }
            else
            {
                //TODO: implement error tolerance
                //if (rvel.sqrMagnitude < sqrMag) {
                //  return p0;
                //}

                return(Vector3.Lerp(p0, p1, t));
            }
        }