Inheritance: SceneObject
Example #1
0
        private void updateAVtes(RenderAvatar ra)
        {
            if (ra.avatar.Textures == null)
                return;

            int[] tes = { 8, 9, 10, 11, 19, 20 };

            foreach (int fi in tes)
            {
                Primitive.TextureEntryFace TEF = ra.avatar.Textures.FaceTextures[fi];
                if (TEF == null)
                    continue;

                if (ra.data[fi] == null || ra.data[fi].TextureInfo.TextureID != TEF.TextureID || ra.data[fi].TextureInfo.TexturePointer < 1 )
                {
                    FaceData data = new FaceData();
                    ra.data[fi] = data;
                    data.TextureInfo.TextureID = TEF.TextureID;

                    DownloadTexture(new TextureLoadItem()
                    {
                        Data = data,
                        Prim = ra.avatar,
                        TeFace = ra.avatar.Textures.FaceTextures[fi]
                    }, true);
                }
            }
        }
Example #2
0
        private void AddAvatarToScene(Avatar av)
        {
            lock (Avatars)
            {
                if (Avatars.ContainsKey(av.LocalID))
                {
                    // flag we got an update??
                    updateAVtes(Avatars[av.LocalID]);
                    Avatars[av.LocalID].glavatar.morph(av);
                }
                else
                {
                    GLAvatar ga = new GLAvatar();

                    //ga.morph(av);
                    RenderAvatar ra = new Rendering.RenderAvatar();
                    ra.avatar = av;
                    ra.glavatar = ga;
                    updateAVtes(ra);
                    Avatars.Add(av.LocalID, ra);
                    ra.glavatar.morph(av);
                    if (av.LocalID == Client.Self.LocalID)
                    {
                        myself = ra;
                    }
                }
            }
        }
Example #3
0
        private void updateAVtes(RenderAvatar ra)
        {
            if (ra.avatar.Textures == null)
                return;

            foreach (int fi in RenderAvatar.BakedTextures.Keys)
            {
                Primitive.TextureEntryFace TEF = ra.avatar.Textures.FaceTextures[fi];
                if (TEF == null)
                    continue;

                if (ra.data[fi] == null || ra.data[fi].TextureInfo.TextureID != TEF.TextureID || ra.data[fi].TextureInfo.TexturePointer < 1)
                {
                    FaceData data = new FaceData();
                    ra.data[fi] = data;
                    data.TextureInfo.TextureID = TEF.TextureID;

                    ImageType type = ImageType.Baked;
                    if (ra.avatar.COFVersion > 0) // This avatar was server baked
                    {
                        type = ImageType.ServerBaked;
                    }

                    DownloadTexture(new TextureLoadItem()
                    {
                        Data = data,
                        Prim = ra.avatar,
                        TeFace = ra.avatar.Textures.FaceTextures[fi],
                        ImageType = type,
                        BakeName = RenderAvatar.BakedTextures[fi],
                        AvatarID = ra.avatar.ID
                    }, true);
                }
            }
        }
Example #4
0
        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);
        }
        public static void recalcpriorities(RenderAvatar av)
        {
            lock (av.glavatar.skel.mAnimationsWrapper)
            {
                //av.glavatar.skel.mAnimationsWrapper.Add(new animationwrapper(b));

                //pre calculate all joint priorities here
                av.glavatar.skel.mPriority.Clear();

                foreach (KeyValuePair<UUID, animationwrapper> kvp in av.glavatar.skel.mAnimationsWrapper)
                {
                    int jpos = 0;
                    animationwrapper ar = kvp.Value;
                    if (ar.anim == null)
                        continue;

                    foreach (binBVHJoint joint in ar.anim.joints)
                    {
                        if (ar.anim == null)
                            continue;

                        //warning struct copy non reference
                        binBVHJointState state = (binBVHJointState)ar.anim.joints[jpos].Tag;

                        if (ar.playstate == animationwrapper.animstate.STATE_STOP || ar.playstate == animationwrapper.animstate.STATE_EASEOUT)
                            continue;

                        //FIX ME need to consider ease out here on priorities somehow

                        int prio = 0;
                        //Quick hack to stack animations in the correct order
                        //TODO we need to do this per joint as they all have their own priorities as well ;-(
                        if (av.glavatar.skel.mPriority.TryGetValue(joint.Name, out prio))
                        {
                            if (prio > (ar.anim.Priority))
                                continue;
                        }

                        av.glavatar.skel.mPriority[joint.Name] = ar.anim.Priority;

                        jpos++;

                        //av.glavatar.skel.mAnimationsWrapper[kvp.Key].playstate = animationwrapper.animstate.STATE_EASEIN;

                    }
                }
            }
        }
    //Receive all the avatars' models
    void Objects_AvatarUpdate(object sender, AvatarUpdateEventArgs e)
    {
        //leave other regions out temporarily
        if (e.Simulator.Handle != Client.Network.CurrentSim.Handle) return;

        Radegast.Rendering.GLAvatar ga = new Radegast.Rendering.GLAvatar();
        OpenMetaverse.Avatar av = e.Avatar;

        Radegast.Rendering.RenderAvatar ra = new Radegast.Rendering.RenderAvatar();
        ra.avatar = av;
        ra.glavatar = ga;

        newAvatars.Add(av.LocalID, ra);
        ra.glavatar.morph(av);
    }