private void UpdateAvatarAnimations(RenderAvatar av)
{
if (av.avatar.Animations == null) return;
av.glavatar.skel.flushanimations();
foreach (Animation anim in av.avatar.Animations)
{
//Console.WriteLine(string.Format("AvatarAnimationChanged {0} {1}", anim.AnimationID, anim.AnimationSequence));
// Don't play internal turn 180 animations
if (anim.AnimationID == new UUID("038fcec9-5ebd-8a8e-0e2e-6e71a0a1ac53"))
continue;
if (anim.AnimationID == new UUID("6883a61a-b27b-5914-a61e-dda118a9ee2c"))
continue;
av.glavatar.skel.processAnimation(anim.AnimationID);
int nofails = 0;
if (AssetFetchFailCount.TryGetValue(anim.AnimationID, out nofails))
{
if (nofails >= 5)
continue; // asset fetch has failed 5 times, give up.
}
UUID tid = UUID.Random();
skeleton.mAnimationTransactions.Add(tid, av);
BinBVHAnimationReader bvh;
if (skeleton.mAnimationCache.TryGetValue(anim.AnimationID, out bvh))
{
skeleton.addanimation(null, tid, bvh, anim.AnimationID);
continue;
}
Logger.Log("Requesting new animation asset " + anim.AnimationID.ToString(), Helpers.LogLevel.Info);
Client.Assets.RequestAsset(anim.AnimationID, AssetType.Animation, false, SourceType.Asset, tid, animRecievedCallback);
}
av.glavatar.skel.flushanimationsfinal();
skeleton.recalcpriorities(av);
}