public void RestoreState(BinaryReader reader)
 {
     var curName = reader.ReadString();
     if (curName != "")
     {
         var loop = reader.ReadBoolean();
         current = new LinearSequence(anims[curName], loop)
                       {
                           Speed = reader.ReadSingle(),
                           Time = reader.ReadSingle()
                       };
     }
     var backupName = reader.ReadString();
     if (backupName != "")
     {
         var loop = reader.ReadBoolean();
         backup = new LinearSequence(anims[backupName], loop)
         {
             Speed = reader.ReadSingle(),
             Time = reader.ReadSingle()
         };
     }
     fadeLeft = reader.ReadSingle();
     fadeTime = reader.ReadSingle();
 }
        public void RestoreState(BinaryReader reader)
        {
            var curName = reader.ReadString();

            if (curName != "")
            {
                var loop = reader.ReadBoolean();
                current = new LinearSequence(anims[curName], loop)
                {
                    Speed = reader.ReadSingle(),
                    Time  = reader.ReadSingle()
                };
            }
            var backupName = reader.ReadString();

            if (backupName != "")
            {
                var loop = reader.ReadBoolean();
                backup = new LinearSequence(anims[backupName], loop)
                {
                    Speed = reader.ReadSingle(),
                    Time  = reader.ReadSingle()
                };
            }
            fadeLeft = reader.ReadSingle();
            fadeTime = reader.ReadSingle();
        }
        public override void Update(double time)
        {
            if (fadeLeft > 0f)
            {
                fadeLeft = Math.Max(fadeLeft - (float)time, 0f);
            }
            if (current == null)
            {
                return;
            }
            current.Update((float)time);
            if (backup != null)
            {
                backup.Update((float)time);
            }
            pose = new Pose(current.Pose);

            if (backup != null && fadeLeft > 0f)
            {
                for (int i = 0; i < pose.BoneCount; i++)
                {
                    pose.SetTransform(i,
                                      Transform.Interpolate(current.Pose[i].Transform, backup.Pose[i].Transform,
                                                            1f - fadeLeft / fadeTime));
                }
            }
            pose.CalculateWorld();
            if (backup != null && fadeLeft <= 0.01f)
            {
                current = backup;
                backup  = null;
            }
            pose.MergeWith(invRestPose);
        }
 public void Crossfade(string name, float time, bool loop)
 {
     if (current != null)
     {
         var linearSequence = new LinearSequence(anims[name], loop);
         backup   = linearSequence;
         fadeLeft = time;
         fadeTime = time;
     }
     else
     {
         Start(name, loop);
     }
 }
        public override void Update(double time)
        {
            if (fadeLeft > 0f)
            {
                fadeLeft = Math.Max(fadeLeft - (float) time, 0f);
            }
            if (current == null)
            {
                return;
            }
            current.Update((float) time);
            if (backup != null)
            {
                backup.Update((float) time);
            }
            pose = new Pose(current.Pose);

            if (backup != null && fadeLeft > 0f)
                for (int i = 0; i < pose.BoneCount; i++)
                    pose.SetTransform(i,
                                      Transform.Interpolate(current.Pose[i].Transform, backup.Pose[i].Transform,
                                                            1f - fadeLeft/fadeTime));
            pose.CalculateWorld();
            if (backup != null && fadeLeft <= 0.01f)
            {
                current = backup;
                backup = null;
            }
            pose.MergeWith(invRestPose);
        }
 public void Crossfade(string name, float time, bool loop)
 {
     if (current != null)
     {
         var linearSequence = new LinearSequence(anims[name], loop);
         backup = linearSequence;
         fadeLeft = time;
         fadeTime = time;
     }
     else Start(name, loop);
 }
 public void Start(string name, bool loop)
 {
     current = new LinearSequence(anims[name], loop);
 }
 public void Start(string name, bool loop)
 {
     current = new LinearSequence(anims[name], loop);
 }