Example #1
0
        private static BufferedTransform InterpolateValues(BufferedTransform first, BufferedTransform second,
                                                           uint ticksAfterFirst)
        {
            float t = (float)ticksAfterFirst / (float)(second.PhysicsTick - first.PhysicsTick);

            return(new BufferedTransform
            {
                Position = Vector3.Lerp(first.Position, second.Position, t),
                Velocity = Vector3.Lerp(first.Velocity, second.Velocity, t),
                Orientation = Quaternion.Slerp(first.Orientation, second.Orientation, t),
                PhysicsTick = first.PhysicsTick + ticksAfterFirst
            });
        }
Example #2
0
        protected override void OnUpdate()
        {
            for (var i = 0; i < transformUpdateData.Length; i++)
            {
                var transformUpdates      = transformUpdateData.TransformUpdate[i].Updates;
                var lastTransformSnapshot = transformUpdateData.Transform[i];
                var bufferLength          = transformUpdateData.BufferedTransform[i].Length;
                if (bufferLength > 0)
                {
                    lastTransformSnapshot = transformUpdateData.BufferedTransform[i][bufferLength - 1].transformUpdate;
                }

                foreach (var update in transformUpdates)
                {
                    if (update.Location.HasValue)
                    {
                        lastTransformSnapshot.Location = update.Location.Value;
                    }

                    if (update.Rotation.HasValue)
                    {
                        lastTransformSnapshot.Rotation = update.Rotation.Value;
                    }

                    if (update.Tick.HasValue)
                    {
                        lastTransformSnapshot.Tick = update.Tick.Value;
                    }

                    var bufferedTransform = new BufferedTransform
                    {
                        transformUpdate = lastTransformSnapshot
                    };

                    transformUpdateData.BufferedTransform[i].Add(bufferedTransform);
                }
            }
        }