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); }