Пример #1
0
        public static float InterpolateFloat(ListExtended <NetworkStorage> frames, int offset, int frame, bool angle)
        {
            var f0 = frames.First;
            var p0 = f0.Values[offset].Float1;

            if ((frames.Count == 1) || (f0.Frame >= frame))
            {
                return(p0);
            }
            else
            {
                var f1 = frames.Next(f0);
                var p1 = f1.Values[offset].Float1;

                NetAssert.True(f1.Frame > f0.Frame);
                NetAssert.True(f1.Frame > frame);

                int f0Frame = f0.Frame;
                if (f0Frame < (f1.Frame - Core.RemoteSendRate * 2))
                {
                    f0Frame = f1.Frame - Core.RemoteSendRate * 2;
                }

                float t = f1.Frame - f0Frame;
                float d = frame - f0Frame;

                return(angle ? Mathf.LerpAngle(p0, p1, d / t) : Mathf.Lerp(p0, p1, d / t));
            }
        }
Пример #2
0
        public static Quaternion InterpolateQuaternion(ListExtended <NetworkStorage> frames, int offset, int frame)
        {
            var f0 = frames.First;
            var p0 = f0.Values[offset].Quaternion;

            if (p0 == default(Quaternion))
            {
                p0 = Quaternion.identity;
            }

            if ((frames.Count == 1) || (f0.Frame >= frame))
            {
                return(p0);
            }
            else
            {
                var f1 = frames.Next(f0);
                var p1 = f1.Values[offset].Quaternion;

                if (p1 == default(Quaternion))
                {
                    p1 = Quaternion.identity;
                }

                NetAssert.True(f1.Frame > f0.Frame);
                NetAssert.True(f1.Frame > frame);

                int f0Frame = f0.Frame;
                if (f0Frame < (f1.Frame - Core.RemoteSendRate * 2))
                {
                    f0Frame = f1.Frame - Core.RemoteSendRate * 2;
                }

                float t = f1.Frame - f0Frame;
                float d = frame - f0Frame;

                return(Quaternion.Lerp(p0, p1, d / t));
            }
        }
Пример #3
0
        public static Vector3 InterpolateVector(ListExtended <NetworkStorage> frames, int offset, int frame, float snapLimit, ref bool snapped)
        {
            var f0 = frames.First;
            var p0 = f0.Values[offset].Vector3;

            if ((frames.Count == 1) || (f0.Frame >= frame))
            {
                return(p0);
            }
            else
            {
                var f1 = frames.Next(f0);
                var p1 = f1.Values[offset].Vector3;

                NetAssert.True(f1.Frame > f0.Frame);
                NetAssert.True(f1.Frame > frame);

                if ((p0 - p1).sqrMagnitude > (snapLimit * snapLimit))
                {
                    snapped = true;
                    return(p1);
                }
                else
                {
                    int f0Frame = f0.Frame;

                    if (f0Frame < (f1.Frame - Core.RemoteSendRate * 2))
                    {
                        f0Frame = f1.Frame - Core.RemoteSendRate * 2;
                    }

                    float t = f1.Frame - f0Frame;
                    float d = frame - f0Frame;

                    return(Vector3.Lerp(p0, p1, d / t));
                }
            }
        }
Пример #4
0
        public static Vector3 InterpolateVector(ListExtended <NetworkStorage> frames, int offset, int frame, float snapLimit)
        {
            bool snapped = false;

            return(InterpolateVector(frames, offset, frame, snapLimit, ref snapped));
        }