示例#1
0
        //l,r are [0, 360)
        private static float InterpolateAngle(float l, float r, IInterpolationInfo interpolationInfo)
        {
            var delta = r - l;

            if (delta <= -180)
            {
                delta += 360;
            }
            else if (delta > 180)
            {
                delta -= 360;
            }
            var angle = l + InterpolateUtility.Interpolate(0, delta, interpolationInfo);

            if (angle >= 360)
            {
                angle -= 360;
            }
            else if (angle < 0)
            {
                angle += 360;
            }

            return(angle);
        }
示例#2
0
        public virtual void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = (VehicleDynamicDataComponent)left;
            var r = (VehicleDynamicDataComponent)right;

            if (IsSyncLatest)
            {
                return;
            }

            Flag = (int)VehicleFlag.RemoteSet;
            var rotio = interpolationInfo.Ratio;

            IsAccelerated = l.IsAccelerated && r.IsAccelerated;
            SteerInput    = InterpolateUtility.Interpolate(l.SteerInput, r.SteerInput, rotio);
            ThrottleInput = InterpolateUtility.Interpolate(l.ThrottleInput, r.ThrottleInput, rotio);

            Position = InterpolateUtility.Interpolate(l.Position, r.Position, rotio);
            Rotation = InterpolateUtility.Interpolate(l.Rotation, r.Rotation, rotio);

            LinearVelocity  = InterpolateUtility.Interpolate(l.LinearVelocity, r.LinearVelocity, rotio);
            AngularVelocity = InterpolateUtility.Interpolate(l.AngularVelocity, r.AngularVelocity, rotio);

            IsSleeping = l.IsSleeping;
        }
 public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
 {
     CopyFrom(left);
     ScaleX = InterpolateUtility.Interpolate(((FreeDataComponent)left).ScaleX, ((FreeDataComponent)right).ScaleX, interpolationInfo.RatioWithOutClamp);
     ScaleY = InterpolateUtility.Interpolate(((FreeDataComponent)left).ScaleY, ((FreeDataComponent)right).ScaleY, interpolationInfo.RatioWithOutClamp);
     ScaleZ = InterpolateUtility.Interpolate(((FreeDataComponent)left).ScaleZ, ((FreeDataComponent)right).ScaleZ, interpolationInfo.RatioWithOutClamp);
 }
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            PositionComponent l = left as PositionComponent;
            PositionComponent r = right as PositionComponent;

            if (r.InterpolateType == 0)
            {
                Value = InterpolateUtility.Interpolate(l.Value, r.Value, interpolationInfo.RatioWithOutClamp);
            }
            else
            {
                InterpolateType = r.InterpolateType;
                ServerTime      = r.ServerTime;

                if (interpolationInfo.LeftServerTime <= r.ServerTime && interpolationInfo.RightServerTime >= r.ServerTime)
                {
                    if (interpolationInfo.CurrentRenderTime > r.ServerTime)
                    {
                        Value = r._value;
                    }
                    else
                    {
                        Value = l._value;
                    }
                }
                else
                {
                    Value = InterpolateUtility.Interpolate(l.Value, r.Value, interpolationInfo.RatioWithOutClamp);
                }
            }
        }
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l     = (CarHitBoxComponent)left;
            var r     = (CarHitBoxComponent)right;
            var ratio = interpolationInfo.Ratio;

            BodyPosition = InterpolateUtility.Interpolate(l.BodyPosition, r.BodyPosition, ratio);
            BodyRotation = InterpolateUtility.Interpolate(l.BodyRotation, r.BodyRotation, ratio);

            int count = FlexiblePositionList.Length;

            for (int i = 0; i < count; ++i)
            {
                FlexiblePositionList[i] =
                    InterpolateUtility.Interpolate(l.FlexiblePositionList[i], r.FlexiblePositionList[i], ratio);
                FlexibleRotationList[i] =
                    InterpolateUtility.Interpolate(l.FlexibleRotationList[i], r.FlexibleRotationList[i], ratio);
            }

            count = WheelPositionList.Length;
            for (int i = 0; i < count; ++i)
            {
                WheelPositionList[i] =
                    InterpolateUtility.Interpolate(l.WheelPositionList[i], r.WheelPositionList[i], ratio);
                WheelRotationList[i] =
                    InterpolateUtility.Interpolate(l.WheelRotationList[i], r.WheelRotationList[i], ratio);
            }
        }
示例#6
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = (left as NormalComponent);
            var r = right as NormalComponent;

            Value = InterpolateUtility.Interpolate(l.Value,
                                                   r.Value, interpolationInfo);
        }
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = left as FreeMoveController;
            var r = right as FreeMoveController;

            FocusOnPosition = InterpolateUtility.Interpolate(l.FocusOnPosition, r.FocusOnPosition, interpolationInfo);
            ControllType    = r.ControllType;
        }
示例#8
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = left as BulletDataComponent;
            var r = right as BulletDataComponent;

            Distance = InterpolateUtility.Interpolate(l.Distance, r.Distance, interpolationInfo);
            Velocity = r.Velocity;
        }
示例#9
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = left as ObserveCameraComponent;
            var r = right as ObserveCameraComponent;

            Fov              = InterpolateUtility.Interpolate(l.Fov, r.Fov, interpolationInfo);
            CameraPosition   = InterpolateUtility.Interpolate(l.CameraPosition, r.CameraPosition, interpolationInfo);
            CameraEularAngle =
                InterpolateUtility.Interpolate(l.CameraEularAngle, r.CameraEularAngle, interpolationInfo);
        }
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = left as ShipRudderDynamicData;
            var r = right as ShipRudderDynamicData;

            if (IsSyncLatest)
            {
                return;
            }

            Angle = InterpolateUtility.Interpolate(l.Angle, r.Angle, interpolationInfo);
        }
示例#11
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = left as DamageHintComponent;
            var r = right as DamageHintComponent;

            Damage    = r.Damage;
            DamageAdd = r.DamageAdd;
            HeadShoot = r.HeadShoot;

            PlayerPos = InterpolateUtility.Interpolate(l.PlayerPos,
                                                       r.PlayerPos, interpolationInfo);
        }
示例#12
0
        public Vector3 GetResult(float x)
        {
            var   t      = (x % TotalX) / TotalX;
            int   lenght = Result.Length;
            var   lidx   = (int)(t * lenght) % lenght;
            var   ridx   = ((int)(t * lenght) + 1) % lenght;
            var   l      = Result[lidx];
            var   r      = Result[ridx];
            float ratio  = t * lenght % 1;

            return(InterpolateUtility.Interpolate(l, r, ratio));
        }
示例#13
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l     = left as OrientationComponent;
            var r     = right as OrientationComponent;
            var rotio = interpolationInfo.Ratio;

            Yaw        = ShortInterpolateAngle(l.Yaw, r.Yaw, rotio);
            Pitch      = InterpolateUtility.Interpolate(l.Pitch, r.Pitch, rotio);
            Roll       = InterpolateUtility.Interpolate(l.Roll, r.Roll, rotio);
            PunchYaw   = InterpolateUtility.Interpolate(l.PunchYaw, r.PunchYaw, rotio);
            PunchPitch = InterpolateUtility.Interpolate(l.PunchPitch, r.PunchPitch, rotio);
            ModelPitch = ShortInterpolateAngle(l.ModelPitch, r.ModelPitch, rotio);
            ModelYaw   = ShortInterpolateAngle(l.ModelYaw, r.ModelYaw, rotio);
        }
示例#14
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = (CarWheelComponent)left;
            var r = (CarWheelComponent)right;

            if (IsSyncLatest)
            {
                return;
            }

            CopyFrom(r);
            var rotio = interpolationInfo.Ratio;

            ColliderSteerAngle =
                InterpolateUtility.Interpolate(l.ColliderSteerAngle, r.ColliderSteerAngle, rotio);
            SteerAngle = InterpolateUtility.Interpolate(l.SteerAngle, r.SteerAngle, rotio);
        }
示例#15
0
        /// <summary>
        /// 按照最短路径插值yaw
        /// </summary>
        /// <param name="l"></param>
        /// <param name="r"></param>
        /// <param name="rotio"></param>
        /// <returns></returns>
        private float ShortInterpolateAngle(float l, float r, float rotio)
        {
            var ret = l;

            if (Math.Abs(l - r) <= 180)
            {
                ret = InterpolateUtility.Interpolate(l, r, rotio);
            }
            else
            {
                ret = l < 0 ?
                      InterpolateUtility.Interpolate(l, r - 360, rotio) :
                      InterpolateUtility.Interpolate(l - 360, r, rotio);
            }

            return(ret);
        }
        public override void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            base.Interpolate(left, right, interpolationInfo);

            var l = (CarRewindDataComponent)left;
            var r = (CarRewindDataComponent)right;

            var rotio = interpolationInfo.Ratio;

            IsHornOn       = l.IsHornOn && r.IsHornOn;
            BrakeInput     = InterpolateUtility.Interpolate(l.BrakeInput, r.BrakeInput, rotio);
            HandbrakeInput = InterpolateUtility.Interpolate(l.HandbrakeInput, r.HandbrakeInput, rotio);

            SteerAngle = InterpolateUtility.Interpolate(l.SteerAngle, r.SteerAngle, rotio);

            Crashed = r.Crashed;
        }
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l = (ShipHitBoxComponent)left;
            var r = (ShipHitBoxComponent)right;

            BodyPosition = InterpolateUtility.Interpolate(l.BodyPosition, r.BodyPosition, interpolationInfo);
            BodyRotation = InterpolateUtility.Interpolate(l.BodyRotation, r.BodyRotation, interpolationInfo);

            int count = RudderPositionList.Length;

            for (int i = 0; i < count; ++i)
            {
                RudderPositionList[i] = InterpolateUtility.Interpolate(l.RudderPositionList[i], r.RudderPositionList[i],
                                                                       interpolationInfo);
                RudderRotationList[i] = InterpolateUtility.Interpolate(l.RudderRotationList[i], r.RudderRotationList[i],
                                                                       interpolationInfo);
            }
        }
示例#18
0
        public void Interpolate(object left, object right, IInterpolationInfo interpolationInfo)
        {
            var l     = left as PlayerSkyMoveComponent;
            var r     = right as PlayerSkyMoveComponent;
            var ratio = interpolationInfo.Ratio;

            IsMoveEnabled         = l.IsMoveEnabled;
            IsMoving              = l.IsMoving;
            MoveStage             = l.MoveStage;
            RemainDeltaTime       = l.RemainDeltaTime;
            ParachuteTime         = InterpolateUtility.Interpolate(l.ParachuteTime, r.ParachuteTime, ratio);
            MotionLessTime        = InterpolateUtility.Interpolate(l.MotionLessTime, r.MotionLessTime, ratio);
            SwingVelocity         = InterpolateUtility.Interpolate(l.SwingVelocity, r.SwingVelocity, ratio);
            ExtraVerticalVelocity =
                InterpolateUtility.Interpolate(l.ExtraVerticalVelocity, r.ExtraVerticalVelocity, ratio);
            Position = InterpolateUtility.Interpolate(l.Position, r.Position, ratio);
            Rotation = InterpolateUtility.Interpolate(l.Rotation, r.Rotation, ratio);

            LocalPlayerPosition = l.LocalPlayerPosition;
            LocalPlayerRotation = l.LocalPlayerRotation;
            GameState           = l.GameState;
            Velocity            = r.Velocity;
        }