00001 
00033 #ifndef LL_LLVOAVATAR_H
00034 #define LL_LLVOAVATAR_H
00035 
00036 
00037 
00038 #include <set>
00039 #include <map>
00040 #include <algorithm>
00041 #include <deque>
00042 
00043 #include "llchat.h"
00044 #include "llviewerobject.h"
00045 #include "lljointsolverrp3.h"
00046 #include "llviewerjointshape.h"
00047 #include "llviewerjointmesh.h"
00048 #include "llviewerjointattachment.h"
00049 #include "llcharacter.h"
00050 #include "material_codes.h"
00051 #include "llanimationstates.h"
00052 #include "v4coloru.h"
00053 #include "llstring.h"
00054 #include "lltrustnet.h"
00055 #include "llframetimer.h"
00056 #include "llxmltree.h"
00057 #include "llwearable.h"
00058 
00059 
00060 
00061 #include "llvoicevisualizer.h"
00062 
00063 
00064 const S32 VOAVATAR_SCRATCH_TEX_WIDTH = 512;
00065 const S32 VOAVATAR_SCRATCH_TEX_HEIGHT = 512;
00066 
00067 const LLUUID ANIM_AGENT_BODY_NOISE              =       LLUUID("9aa8b0a6-0c6f-9518-c7c3-4f41f2c001ad"); 
00068 const LLUUID ANIM_AGENT_BREATHE_ROT     =       LLUUID("4c5a103e-b830-2f1c-16bc-224aa0ad5bc8");  
00069 const LLUUID ANIM_AGENT_EDITING         =       LLUUID("2a8eba1d-a7f8-5596-d44a-b4977bf8c8bb");  
00070 const LLUUID ANIM_AGENT_EYE                     =       LLUUID("5c780ea8-1cd1-c463-a128-48c023f6fbea");  
00071 const LLUUID ANIM_AGENT_FLY_ADJUST              =       LLUUID("db95561f-f1b0-9f9a-7224-b12f71af126e");  
00072 const LLUUID ANIM_AGENT_HAND_MOTION     =       LLUUID("ce986325-0ba7-6e6e-cc24-b17c4b795578");  
00073 const LLUUID ANIM_AGENT_HEAD_ROT                =       LLUUID("e6e8d1dd-e643-fff7-b238-c6b4b056a68d");  
00074 const LLUUID ANIM_AGENT_PELVIS_FIX              =       LLUUID("0c5dd2a2-514d-8893-d44d-05beffad208b");  
00075 const LLUUID ANIM_AGENT_TARGET                  =       LLUUID("0e4896cb-fba4-926c-f355-8720189d5b55");  
00076 const LLUUID ANIM_AGENT_WALK_ADJUST     =       LLUUID("829bc85b-02fc-ec41-be2e-74cc6dd7215d");  
00077 
00078 class LLChat;
00079 class LLXmlTreeNode;
00080 class LLTexLayerSet;
00081 class LLTexGlobalColor;
00082 class LLTexGlobalColorInfo;
00083 class LLTexLayerSetInfo;
00084 class LLDriverParamInfo;
00085 
00086 class LLHUDText;
00087 class LLHUDEffectSpiral;
00088 
00089 class LLVertexBufferAvatar : public LLVertexBuffer
00090 {
00091 public:
00092         LLVertexBufferAvatar();
00093         virtual void setupVertexBuffer(U32 data_mask) const;
00094 };
00095 
00096 typedef enum e_mesh_id
00097 {
00098         MESH_ID_HAIR,
00099         MESH_ID_HEAD,
00100         MESH_ID_UPPER_BODY,
00101         MESH_ID_LOWER_BODY,
00102         MESH_ID_SKIRT
00103 } eMeshID;
00104 
00105 typedef enum e_render_name
00106 {
00107         RENDER_NAME_NEVER,
00108         RENDER_NAME_FADE,
00109         RENDER_NAME_ALWAYS
00110 } eRenderName;
00111 
00112 const S32 BAKED_TEXTURE_COUNT = 5;  
00113 
00114 
00115 
00116 
00117 
00118 class LLVOAvatarBoneInfo
00119 {
00120         friend class LLVOAvatar;
00121         friend class LLVOAvatarSkeletonInfo;
00122 public:
00123         LLVOAvatarBoneInfo() : mIsJoint(FALSE) {}
00124         ~LLVOAvatarBoneInfo()
00125         {
00126                 std::for_each(mChildList.begin(), mChildList.end(), DeletePointer());
00127         }
00128         BOOL parseXml(LLXmlTreeNode* node);
00129         
00130 protected:
00131         LLString mName;
00132         BOOL mIsJoint;
00133         LLVector3 mPos;
00134         LLVector3 mRot;
00135         LLVector3 mScale;
00136         LLVector3 mPivot;
00137         typedef std::vector<LLVOAvatarBoneInfo*> child_list_t;
00138         child_list_t mChildList;
00139 };
00140 
00141 class LLVOAvatarSkeletonInfo
00142 {
00143         friend class LLVOAvatar;
00144 public:
00145         LLVOAvatarSkeletonInfo() :
00146                 mNumBones(0), mNumCollisionVolumes(0) {}
00147         ~LLVOAvatarSkeletonInfo()
00148         {
00149                 std::for_each(mBoneInfoList.begin(), mBoneInfoList.end(), DeletePointer());
00150         }
00151         BOOL parseXml(LLXmlTreeNode* node);
00152         S32 getNumBones() { return mNumBones; }
00153         S32 getNumCollisionVolumes() { return mNumCollisionVolumes; }
00154         
00155 protected:
00156         S32 mNumBones;
00157         S32 mNumCollisionVolumes;
00158         typedef std::vector<LLVOAvatarBoneInfo*> bone_info_list_t;
00159         bone_info_list_t mBoneInfoList;
00160 };
00161 
00162 
00163 
00164 
00165 
00166 
00167 class LLVOAvatarInfo
00168 {
00169         friend class LLVOAvatar;
00170 public:
00171         LLVOAvatarInfo();
00172         ~LLVOAvatarInfo();
00173         
00174 protected:
00175         BOOL    parseXmlSkeletonNode(LLXmlTreeNode* root);
00176         BOOL    parseXmlMeshNodes(LLXmlTreeNode* root);
00177         BOOL    parseXmlColorNodes(LLXmlTreeNode* root);
00178         BOOL    parseXmlLayerNodes(LLXmlTreeNode* root);
00179         BOOL    parseXmlDriverNodes(LLXmlTreeNode* root);
00180         
00181         struct LLVOAvatarMeshInfo
00182         {
00183                 typedef std::pair<LLPolyMorphTargetInfo*,BOOL> morph_info_pair_t;
00184                 typedef std::vector<morph_info_pair_t> morph_info_list_t;
00185 
00186                 LLVOAvatarMeshInfo() : mLOD(0), mMinPixelArea(.1f) {}
00187                 ~LLVOAvatarMeshInfo()
00188                 {
00189                         morph_info_list_t::iterator iter;
00190                         for (iter = mPolyMorphTargetInfoList.begin(); iter != mPolyMorphTargetInfoList.end(); iter++)
00191                         {
00192                                 delete iter->first;
00193                         }
00194                         mPolyMorphTargetInfoList.clear();
00195                 }
00196 
00197                 LLString        mType;
00198                 S32                     mLOD;
00199                 LLString        mMeshFileName;
00200                 LLString        mReferenceMeshName;
00201                 F32                     mMinPixelArea;
00202                 morph_info_list_t mPolyMorphTargetInfoList;
00203         };
00204         typedef std::vector<LLVOAvatarMeshInfo*> mesh_info_list_t;
00205         mesh_info_list_t mMeshInfoList;
00206 
00207         typedef std::vector<LLPolySkeletalDistortionInfo*> skeletal_distortion_info_list_t;
00208         skeletal_distortion_info_list_t mSkeletalDistortionInfoList;
00209         
00210         struct LLVOAvatarAttachmentInfo
00211         {
00212                 LLVOAvatarAttachmentInfo()
00213                         : mGroup(-1), mAttachmentID(-1), mPieMenuSlice(-1), mVisibleFirstPerson(FALSE),
00214                           mIsHUDAttachment(FALSE), mHasPosition(FALSE), mHasRotation(FALSE) {}
00215                 LLString mName;
00216                 LLString mJointName;
00217                 LLVector3 mPosition;
00218                 LLVector3 mRotationEuler;
00219                 S32 mGroup;
00220                 S32 mAttachmentID;
00221                 S32 mPieMenuSlice;
00222                 BOOL mVisibleFirstPerson;
00223                 BOOL mIsHUDAttachment;
00224                 BOOL mHasPosition;
00225                 BOOL mHasRotation;
00226         };
00227         typedef std::vector<LLVOAvatarAttachmentInfo*> attachment_info_list_t;
00228         attachment_info_list_t mAttachmentInfoList;
00229         
00230         LLTexGlobalColorInfo *mTexSkinColorInfo;
00231         LLTexGlobalColorInfo *mTexHairColorInfo;
00232         LLTexGlobalColorInfo *mTexEyeColorInfo;
00233 
00234         typedef std::vector<LLTexLayerSetInfo*> layer_info_list_t;
00235         layer_info_list_t mLayerInfoList;
00236 
00237         typedef std::vector<LLDriverParamInfo*> driver_info_list_t;
00238         driver_info_list_t mDriverInfoList;
00239 };
00240 
00241 
00242 
00243 
00244 class LLVOAvatar :
00245         public LLViewerObject,
00246         public LLCharacter
00247 {
00248 protected:      
00249         virtual ~LLVOAvatar();
00250 
00251 public:
00252 
00253         struct CompareScreenAreaGreater
00254         {               
00255                 bool operator()(const LLCharacter* const& lhs, const LLCharacter* const& rhs)
00256                 {
00257                         return lhs->getPixelArea() > rhs->getPixelArea();
00258                 }
00259         };
00260 
00261         enum 
00262         {
00263                 VERTEX_DATA_MASK =      (1 << LLVertexBuffer::TYPE_VERTEX) |
00264                                                         (1 << LLVertexBuffer::TYPE_NORMAL) |
00265                                                         (1 << LLVertexBuffer::TYPE_TEXCOORD) |
00266                                                         (1 << LLVertexBuffer::TYPE_WEIGHT) |
00267                                                         (1 << LLVertexBuffer::TYPE_CLOTHWEIGHT)                                                 
00268         };
00269 
00270         LLVOAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
00271          void markDead();
00272 
00273         
00274         
00275         
00276         static void initClass();        
00277         static void cleanupClass();     
00278         static BOOL parseSkeletonFile(const LLString& filename);
00279         virtual U32 processUpdateMessage(       LLMessageSystem *mesgsys,
00280                                                                                 void **user_data,
00281                                                                                 U32 block_num,
00282                                                                                 const EObjectUpdateType update_type,
00283                                                                                 LLDataPacker *dp);
00284         virtual BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
00285         virtual BOOL updateLOD();
00286         void setFootPlane(const LLVector4 &plane) { mFootPlane = plane; }
00287          BOOL    isActive() const; 
00288 
00289         
00290 
00291         U32 renderFootShadows();
00292         U32 renderRigid();
00293         U32 renderSkinned(EAvatarRenderPass pass);
00294         U32 renderTransparent();
00295         void renderCollisionVolumes();
00296         
00297          void updateTextures(LLAgent &agent);
00298         
00299          S32 setTETexture(const U8 te, const LLUUID& uuid);
00300         
00301         virtual U32 getPartitionType() const;
00302         
00303         void updateVisibility(BOOL force_invisible);
00304         void updateAttachmentVisibility(U32 camera_mode);
00305         void clampAttachmentPositions();
00306         S32 getAttachmentCount();       
00307 
00308         BOOL hasHUDAttachment();
00309         LLBBox getHUDBBox();
00310 
00311         void rebuildHUD();
00312 
00313         static void updateAllAvatarVisiblity();
00314 
00315          LLDrawable* createDrawable(LLPipeline *pipeline);
00316          BOOL                updateGeometry(LLDrawable *drawable);
00317         void updateShadowFaces();
00318 
00319          void                setPixelAreaAndAngle(LLAgent &agent);
00320         BOOL                                    updateJointLODs();
00321 
00322         void writeCAL3D(std::string& path, std::string& file_base);
00323 
00324         virtual void updateRegion(LLViewerRegion *regionp);
00325 
00326         
00327         void updateSpatialExtents(LLVector3& newMin, LLVector3 &newMax);
00328         
00329         
00330         
00331         
00332         enum ETextureIndex
00333         {
00334                 TEX_HEAD_BODYPAINT = 0,
00335                 TEX_UPPER_SHIRT = 1,
00336                 TEX_LOWER_PANTS = 2,
00337                 TEX_EYES_IRIS = 3,
00338                 TEX_HAIR = 4,
00339                 TEX_UPPER_BODYPAINT = 5,
00340                 TEX_LOWER_BODYPAINT = 6,
00341                 TEX_LOWER_SHOES = 7,
00342                 TEX_HEAD_BAKED = 8,                     
00343                 TEX_UPPER_BAKED = 9,            
00344                 TEX_LOWER_BAKED = 10,           
00345                 TEX_EYES_BAKED = 11,            
00346                 TEX_LOWER_SOCKS = 12,
00347                 TEX_UPPER_JACKET = 13,
00348                 TEX_LOWER_JACKET = 14,
00349                 TEX_UPPER_GLOVES = 15,
00350                 TEX_UPPER_UNDERSHIRT = 16,
00351                 TEX_LOWER_UNDERPANTS = 17,
00352                 TEX_SKIRT = 18,
00353                 TEX_SKIRT_BAKED = 19,           
00354                 TEX_NUM_ENTRIES = 20
00355         };
00356         
00357 
00358         static BOOL isTextureIndexBaked( S32 i )
00359                 {
00360                         switch(i)
00361                         {
00362                         case TEX_HEAD_BAKED:
00363                         case TEX_UPPER_BAKED:
00364                         case TEX_LOWER_BAKED:
00365                         case TEX_EYES_BAKED:
00366                         case TEX_SKIRT_BAKED:
00367                                 return TRUE;
00368                         default:
00369                                 return FALSE;
00370                         }
00371                 }
00372 
00373         
00374         
00375         
00376         virtual const char *getAnimationPrefix() { return "avatar"; }
00377         virtual LLJoint *getRootJoint() { return &mRoot; }
00378         virtual LLVector3 getCharacterPosition();
00379         virtual LLQuaternion getCharacterRotation();
00380         virtual LLVector3 getCharacterVelocity();
00381         virtual LLVector3 getCharacterAngularVelocity();
00382         virtual F32 getTimeDilation();
00383         virtual void getGround(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm);
00384         virtual BOOL allocateCharacterJoints( U32 num );
00385         virtual LLJoint *getCharacterJoint( U32 num );
00386         virtual void requestStopMotion( LLMotion* motion );
00387         virtual F32 getPixelArea() const;
00388         virtual LLPolyMesh*     getHeadMesh();
00389         virtual LLPolyMesh*     getUpperBodyMesh();
00390         virtual LLVector3d      getPosGlobalFromAgent(const LLVector3 &position);
00391         virtual LLVector3       getPosAgentFromGlobal(const LLVector3d &position);
00392         virtual void updateVisualParams();
00393         virtual BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f);
00394         virtual BOOL stopMotion(const LLUUID& id, BOOL stop_immediate = FALSE);
00395         virtual void stopMotionFromSource(const LLUUID& source_id);
00396         virtual LLVector3 getVolumePos(S32 joint_index, LLVector3& volume_offset);
00397         virtual LLJoint* findCollisionVolume(U32 volume_id);
00398         virtual S32 getCollisionVolumeID(std::string &name);
00399         virtual void addDebugText(const std::string& text);
00400         virtual const LLUUID& getID();
00401         virtual LLJoint *getJoint( const std::string &name );
00402 
00403         
00404         
00405         
00406         BOOL                    allocateCollisionVolumes( U32 num );
00407         void                    resetHUDAttachments();
00408         static void             getAnimLabels( LLDynamicArray<const char*>* labels );
00409         static void             getAnimNames( LLDynamicArray<const char*>* names );
00410 
00411         static void             onCustomizeStart();
00412         static void             onCustomizeEnd();
00413 
00414         void                    getLocalTextureByteCount( S32* gl_byte_count );
00415         static void             dumpTotalLocalTextureByteCount();
00416         LLMotion*               findMotion(const LLUUID& id);
00417 
00418         BOOL                    isVisible();
00419         BOOL                    isSelf() { return mIsSelf; }
00420         BOOL                    isCulled() { return mCulled; }
00421         
00422         S32                             getUnbakedPixelAreaRank();
00423         static void             cullAvatarsByPixelArea();
00424 
00425         void                    dumpLocalTextures();
00426         const LLUUID&   grabLocalTexture(ETextureIndex index);
00427         BOOL                    canGrabLocalTexture(ETextureIndex index);
00428         void                    startAppearanceAnimation(BOOL set_by_user, BOOL play_sound);
00429 
00430         void                    setCompositeUpdatesEnabled(BOOL b);
00431 
00432         void                    addChat(const LLChat& chat);
00433         void                    clearChat();
00434         void                    startTyping() { mTyping = TRUE; mTypingTimer.reset(); }
00435         void                    stopTyping() { mTyping = FALSE; }
00436 
00437         
00438         LLString                getFullname() const;
00439 
00440         
00441         
00442         
00443         F32 getPelvisToFoot() { return mPelvisToFoot; }
00444 
00445         void buildCharacter();
00446         void releaseMeshData();
00447         void restoreMeshData();
00448         void updateMeshData();
00449 
00450         void computeBodySize();
00451 
00452         void updateCharacter(LLAgent &agent);
00453         void updateHeadOffset();
00454 
00455         LLUUID& getStepSound();
00456         void processAnimationStateChanges();
00457         BOOL processSingleAnimationStateChange(const LLUUID &anim_id, BOOL start);
00458         void resetAnimations();
00459         BOOL isAnyAnimationSignaled(const LLUUID *anim_array, const S32 num_anims);
00460 
00461         BOOL needsRenderBeam();
00462 
00463         
00464         void resolveHeightGlobal(const LLVector3d &inPos, LLVector3d &outPos, LLVector3 &outNorm);
00465         void resolveHeightAgent(const LLVector3 &inPos, LLVector3 &outPos, LLVector3 &outNorm);
00466         void resolveRayCollisionAgent(const LLVector3d start_pt, const LLVector3d end_pt, LLVector3d &out_pos, LLVector3 &out_norm);
00467 
00468         void slamPosition(); 
00469 
00470         BOOL loadAvatar();
00471         BOOL setupBone(LLVOAvatarBoneInfo* info, LLViewerJoint* parent);
00472         BOOL buildSkeleton(LLVOAvatarSkeletonInfo *info);
00473 
00474         
00475         void processAvatarAppearance( LLMessageSystem* mesgsys );
00476         void onFirstTEMessageReceived();
00477         void updateSexDependentLayerSets( BOOL set_by_user );
00478         void dirtyMesh(); 
00479 
00480         virtual void setParent(LLViewerObject* parent);
00481         virtual void addChild(LLViewerObject *childp);
00482         virtual void removeChild(LLViewerObject *childp);
00483 
00484         LLViewerJointAttachment* getTargetAttachmentPoint(LLViewerObject* viewer_object);
00485         BOOL attachObject(LLViewerObject *viewer_object);
00486         BOOL detachObject(LLViewerObject *viewer_object);
00487         void lazyAttach();
00488 
00489         void sitOnObject(LLViewerObject *sit_object);
00490         void getOffObject();
00491 
00492         BOOL isWearingAttachment( const LLUUID& inv_item_id );
00493         LLViewerObject* getWornAttachment( const LLUUID& inv_item_id );
00494         const LLString getAttachedPointName(const LLUUID& inv_item_id);
00495 
00496         static LLVOAvatar* findAvatarFromAttachment( LLViewerObject* obj );
00497 
00498         void                    updateMeshTextures();
00499 
00500         
00501         
00502         
00503         enum ELocTexIndex
00504         {
00505                 LOCTEX_UPPER_SHIRT = 0,
00506                 LOCTEX_UPPER_BODYPAINT = 1,
00507                 LOCTEX_LOWER_PANTS = 2,
00508                 LOCTEX_LOWER_BODYPAINT = 3,
00509                 LOCTEX_HEAD_BODYPAINT = 4,
00510                 LOCTEX_LOWER_SHOES = 5,
00511                 LOCTEX_LOWER_SOCKS = 6,
00512                 LOCTEX_UPPER_JACKET = 7,
00513                 LOCTEX_LOWER_JACKET = 8,
00514                 LOCTEX_UPPER_GLOVES = 9,
00515                 LOCTEX_UPPER_UNDERSHIRT = 10,
00516                 LOCTEX_LOWER_UNDERPANTS = 11,
00517                 LOCTEX_EYES_IRIS = 12,
00518                 LOCTEX_SKIRT = 13,
00519                 LOCTEX_NUM_ENTRIES = 14
00520         };
00521 
00522         
00523         
00524         
00525         LLColor4                getGlobalColor( const LLString& color_name );
00526         BOOL                    isLocalTextureDataAvailable( LLTexLayerSet* layerset );
00527         BOOL                    isLocalTextureDataFinal( LLTexLayerSet* layerset );
00528         ETextureIndex   getBakedTE( LLTexLayerSet* layerset );
00529         void                    updateComposites();
00530         void                    onGlobalColorChanged( LLTexGlobalColor* global_color, BOOL set_by_user );
00531         BOOL                    getLocalTextureRaw( S32 index, LLImageRaw* image_raw_pp );
00532         BOOL                    getLocalTextureGL( S32 index, LLImageGL** image_gl_pp );
00533         const LLUUID&   getLocalTextureID( S32 index );
00534         LLGLuint                getScratchTexName( LLGLenum format, U32* texture_bytes );
00535         BOOL                    bindScratchTexture( LLGLenum format );
00536         void                    invalidateComposite( LLTexLayerSet* layerset, BOOL set_by_user );
00537         void                    forceBakeAllTextures(bool slam_for_debug = false);
00538         static void             processRebakeAvatarTextures(LLMessageSystem* msg, void**);
00539         void                    setNewBakedTexture( ETextureIndex i, const LLUUID& uuid );
00540         void                    setCachedBakedTexture( ETextureIndex i, const LLUUID& uuid );
00541         void                    requestLayerSetUploads();
00542         bool                    hasPendingBakedUploads();
00543         static void             onLocalTextureLoaded( BOOL succcess, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata );
00544         static void             dumpArchetypeXML( void* );
00545         static void             dumpScratchTextureByteCount();
00546         static void             dumpBakedStatus();
00547         static void             deleteCachedImages();
00548         static void             destroyGL();
00549         static void             restoreGL();
00550         static void             initVertexPrograms();
00551         static void             cleanupVertexPrograms();
00552         static enum EWearableType       getTEWearableType( S32 te );
00553         static LLUUID                   getDefaultTEImageID( S32 te );
00554 
00555         
00556         
00557         
00558         void                    setClothesColor( ETextureIndex te, const LLColor4& new_color, BOOL set_by_user );
00559         LLColor4                getClothesColor( ETextureIndex te );
00560         BOOL                    teToColorParams( ETextureIndex te, const char* param_name[3] );
00561 
00562         BOOL                    isWearingWearableType( EWearableType type );
00563 
00564         
00565         
00566         
00567         void                    setLocTexTE( U8 te, LLViewerImage* image, BOOL set_by_user );
00568         void                    setupComposites();
00569 
00570         
00571         
00572         
00573 
00574         BOOL mDirtyMesh;
00575 
00576         LLFace *mShadow0Facep;
00577         LLFace *mShadow1Facep;
00578 
00579         LLFrameTimer mUpdateLODTimer; 
00580         
00581         
00582         
00583         
00584         BOOL mIsBuilt;
00585 
00586         
00587         
00588         
00589         char mAvatarDefinition[64];             
00590 
00591         
00592         
00593         
00594         S32                             mNumJoints;
00595         LLViewerJoint   *mSkeleton;
00596 
00597         S32                                                             mNumCollisionVolumes;
00598         LLViewerJointCollisionVolume*   mCollisionVolumes;
00599 
00600         
00601         
00602         
00603         LLViewerJoint *mPelvisp;
00604         LLViewerJoint *mTorsop;
00605         LLViewerJoint *mChestp;
00606         LLViewerJoint *mNeckp;
00607         LLViewerJoint *mHeadp;
00608         LLViewerJoint *mSkullp;
00609         LLViewerJoint *mEyeLeftp;
00610         LLViewerJoint *mEyeRightp;
00611         LLViewerJoint *mHipLeftp;
00612         LLViewerJoint *mHipRightp;
00613         LLViewerJoint *mKneeLeftp;
00614         LLViewerJoint *mKneeRightp;
00615         LLViewerJoint *mAnkleLeftp;
00616         LLViewerJoint *mAnkleRightp;
00617         LLViewerJoint *mFootLeftp;
00618         LLViewerJoint *mFootRightp;
00619         LLViewerJoint *mWristLeftp;
00620         LLViewerJoint *mWristRightp;
00621 
00622         
00623         
00624         
00625         LLViewerJoint *mScreenp;
00626         F32                             mHUDTargetZoom;
00627         F32                             mHUDCurZoom;
00628 
00629         
00630         
00631         
00632         LLViewerJoint           mHairLOD;
00633         LLViewerJointMesh               mHairMesh0;
00634         LLViewerJointMesh               mHairMesh1;
00635         LLViewerJointMesh               mHairMesh2;
00636         LLViewerJointMesh               mHairMesh3;
00637         LLViewerJointMesh               mHairMesh4;
00638         LLViewerJointMesh               mHairMesh5;
00639 
00640         LLViewerJoint           mHeadLOD;
00641         LLViewerJointMesh               mHeadMesh0;
00642         LLViewerJointMesh               mHeadMesh1;
00643         LLViewerJointMesh               mHeadMesh2;
00644         LLViewerJointMesh               mHeadMesh3;
00645         LLViewerJointMesh               mHeadMesh4;
00646 
00647         LLViewerJoint           mEyeLashLOD;
00648         LLViewerJointMesh               mEyeLashMesh0;
00649 
00650         LLViewerJoint           mUpperBodyLOD;
00651         LLViewerJointMesh               mUpperBodyMesh0;
00652         LLViewerJointMesh               mUpperBodyMesh1;
00653         LLViewerJointMesh               mUpperBodyMesh2;
00654         LLViewerJointMesh               mUpperBodyMesh3;
00655         LLViewerJointMesh               mUpperBodyMesh4;
00656 
00657         LLViewerJoint           mLowerBodyLOD;
00658         LLViewerJointMesh               mLowerBodyMesh0;
00659         LLViewerJointMesh               mLowerBodyMesh1;
00660         LLViewerJointMesh               mLowerBodyMesh2;
00661         LLViewerJointMesh               mLowerBodyMesh3;
00662         LLViewerJointMesh               mLowerBodyMesh4;
00663 
00664         LLViewerJoint           mEyeBallLeftLOD;
00665         LLViewerJointMesh               mEyeBallLeftMesh0;
00666         LLViewerJointMesh               mEyeBallLeftMesh1;
00667 
00668         LLViewerJoint           mEyeBallRightLOD;
00669         LLViewerJointMesh               mEyeBallRightMesh0;
00670         LLViewerJointMesh               mEyeBallRightMesh1;
00671 
00672         LLViewerJoint           mSkirtLOD;
00673         LLViewerJointMesh               mSkirtMesh0;
00674         LLViewerJointMesh               mSkirtMesh1;
00675         LLViewerJointMesh               mSkirtMesh2;
00676         LLViewerJointMesh               mSkirtMesh3;
00677         LLViewerJointMesh               mSkirtMesh4;
00678 
00679         typedef std::multimap<LLString, LLPolyMesh*> mesh_map_t;
00680         mesh_map_t                              mMeshes;
00681 
00682         
00683         
00684         
00685         BOOL                    mIsSelf;
00686 
00687         
00688         
00689         
00690         LLUUID                  mShadowImageID;
00691         LLPointer<LLViewerImage> mShadowImagep;
00692 
00693         LLUUID                  mLastHeadBakedID;
00694         LLUUID                  mLastUpperBodyBakedID;
00695         LLUUID                  mLastLowerBodyBakedID;
00696         LLUUID                  mLastEyesBakedID;
00697         LLUUID                  mLastSkirtBakedID;
00698 
00699         
00700         
00701         
00702         BOOL                    mIsDummy; 
00703         S32                             mSpecialRenderMode; 
00704 
00705         
00706         
00707         
00708         LLTimer         mAnimTimer;
00709         F32                     mTimeLast;
00710 
00711         
00712         
00713         
00714         F32 mSpeedAccum;
00715 
00716         
00717         
00718         
00719         typedef std::map<LLUUID, S32>::iterator AnimIterator;
00720 
00721         std::map<LLUUID, S32> mSignaledAnimations;              
00722         std::map<LLUUID, S32> mPlayingAnimations;               
00723 
00724         typedef std::multimap<LLUUID, LLUUID> AnimationSourceMap;
00725         typedef AnimationSourceMap::iterator AnimSourceIterator;
00726         AnimationSourceMap mAnimationSources;   
00727 
00728         BOOL                            mTurning;               
00729 
00730         
00731         
00732         
00733         F32                             mSpeed;
00734 
00735         
00736         
00737         
00738         LLDrawable*             mShadow;
00739         BOOL                    mInAir;
00740         LLFrameTimer    mTimeInAir;
00741 
00742         
00743         
00744         
00745         BOOL                    mWasOnGroundLeft;
00746         BOOL                    mWasOnGroundRight;
00747         LLVector4               mFootPlane;
00748 
00749         
00750         
00751         
00752         BOOL                    mStepOnLand;
00753         U8                              mStepMaterial;
00754         LLVector3               mStepObjectVelocity;
00755 
00756         
00757         
00758         
00759         F32                             mPelvisToFoot;
00760         LLVector3               mBodySize;
00761         S32                             mLastSkeletonSerialNum;
00762 
00763         
00764         
00765         
00766         LLVector3               mHeadOffset;
00767 
00768         
00769         
00770         
00771         LLViewerJoint   mRoot;
00772 
00773         
00774         
00775         
00776         BOOL                    mIsSitting;
00777 
00778         
00779         
00780         
00781         LLFrameTimer                            mTimeVisible;
00782         LLPointer<LLHUDText>            mNameText;
00783         std::deque<LLChat>                      mChats;
00784         LLFrameTimer                            mChatTimer;
00785         BOOL                                            mTyping;
00786         LLFrameTimer                            mTypingTimer;
00787 
00788         
00789         
00790         
00791         BOOL                    mMeshValid;
00792         BOOL                    mVisible;
00793         LLFrameTimer    mMeshInvisibleTime;
00794 
00795         
00796         
00797         
00798         LLVector4               mWindVec;
00799         F32                             mWindFreq;
00800         F32                             mRipplePhase;
00801         LLFrameTimer    mRippleTimer;
00802         F32                             mRippleTimeLast;
00803         LLVector3               mRippleAccel;
00804         LLVector3               mLastVel;
00805         BOOL                    mBelowWater;
00806 
00807         
00808         
00809         
00810         LLFrameTimer    mAppearanceMorphTimer;
00811         BOOL                    mAppearanceAnimSetByUser;
00812         F32                             mLastAppearanceBlendTime;
00813         BOOL                    mAppearanceAnimating;
00814 
00815         
00816         
00817         
00818         static S32              sMaxVisible;
00819         static S32              sCurJoint;
00820         static S32              sCurVolume;
00821         static BOOL             sShowAnimationDebug; 
00822         static BOOL             sShowFootPlane; 
00823         static BOOL             sShowCollisionVolumes;  
00824         static BOOL             sVisibleInFirstPerson;
00825 
00826         static S32              sMaxOtherAvatarsToComposite;
00827 
00828         static S32              sNumLODChangesThisFrame;
00829 
00830         
00831         static LLUUID   sStepSounds[LL_MCODE_END];
00832         static LLUUID   sStepSoundOnLand;
00833 
00834         static S32              sRenderName;
00835         static BOOL             sRenderGroupTitles;
00836         static S32              sNumVisibleChatBubbles;
00837         static BOOL             sDebugInvisible;
00838         static BOOL             sShowAttachmentPoints;
00839 
00840         
00841         static S32              sNumVisibleAvatars;
00842 
00843         
00844         static LLMap< LLGLenum, LLGLuint*> sScratchTexNames;
00845         static LLMap< LLGLenum, F32*> sScratchTexLastBindTime;
00846         static S32 sScratchTexBytes;
00847 
00848         
00849         LLPtrSkipMap<S32, LLViewerJointAttachment*> mAttachmentPoints;
00850 
00851         
00852         static LLXmlTree sXMLTree;
00853         
00854         static LLXmlTree sSkeletonXMLTree;
00855 
00856         
00857         static BOOL             sAvatarLoadTest;
00858 
00859         
00860         static F32              sLODFactor;
00861 
00862         
00863         static BOOL             sJointDebug;
00864         static ETextureIndex sBakedTextureIndices[BAKED_TEXTURE_COUNT];
00865 
00866         
00867         
00868         
00869         LLTexLayerSet*          mHeadLayerSet;
00870         LLTexLayerSet*          mUpperBodyLayerSet;
00871         LLTexLayerSet*          mLowerBodyLayerSet;
00872         LLTexLayerSet*          mEyesLayerSet;
00873         LLTexLayerSet*          mSkirtLayerSet;
00874 
00875 
00876 protected:
00877         LLPointer<LLHUDEffectSpiral> mBeam;
00878         LLFrameTimer mBeamTimer;
00879         LLFrameTimer mEditEffectTimer;
00880 
00881         F32             mRenderPriority;
00882         F32             mAdjustedPixelArea;
00883 
00884         LLWString mNameString;
00885         LLString  mTitle;
00886         BOOL      mNameAway;
00887         BOOL      mNameBusy;
00888         BOOL      mNameMute;
00889         BOOL      mNameAppearance;
00890         BOOL      mVisibleChat;
00891 
00892         BOOL mTrustNetTitleEnabled;
00893         ETrustNetState  mTrustNetState;
00894         ETrustNetDatumState     mTrustNetScoreState;
00895 
00896         LLString  mDebugText;
00897         U64               mLastRegionHandle;
00898         LLFrameTimer mRegionCrossingTimer;
00899         S32               mRegionCrossingCount;
00900         
00901         
00902         
00903         
00904 
00905         LLPointer<LLViewerImage> mLocalTexture[ LOCTEX_NUM_ENTRIES ];
00906         BOOL                            mLocalTextureBaked[ LOCTEX_NUM_ENTRIES ]; 
00907         S32                             mLocalTextureDiscard[ LOCTEX_NUM_ENTRIES ];
00908         LLUUID                          mSavedTE[ TEX_NUM_ENTRIES ];
00909         BOOL                            mFirstTEMessageReceived;
00910         BOOL                            mFirstAppearanceMessageReceived;
00911 
00912         BOOL                            mHeadBakedLoaded;
00913         S32                                     mHeadMaskDiscard;
00914         BOOL                            mUpperBakedLoaded;
00915         S32                                     mUpperMaskDiscard;
00916         BOOL                            mLowerBakedLoaded;
00917         S32                                     mLowerMaskDiscard;
00918         BOOL                            mEyesBakedLoaded;
00919         BOOL                            mSkirtBakedLoaded;
00920 
00921         
00922         U32                                     mHeadMaskTexName;
00923         U32                                     mUpperMaskTexName;
00924         U32                                     mLowerMaskTexName;
00925 
00926         BOOL                            mCulled;
00927         F32                                     mMinPixelArea; 
00928         F32                                     mMaxPixelArea; 
00929         
00930         
00931         
00932         
00933         LLTexGlobalColor*       mTexSkinColor;
00934         LLTexGlobalColor*       mTexHairColor;
00935         LLTexGlobalColor*       mTexEyeColor;
00936 
00937         static LLVOAvatarSkeletonInfo*  sSkeletonInfo;
00938         static LLVOAvatarInfo*                  sAvatarInfo;
00939         
00940 protected:
00941 
00942         BOOL                    loadSkeletonNode();
00943         BOOL                    loadMeshNodes();
00944         
00945         BOOL                    isFullyBaked();
00946         void                    deleteLayerSetCaches();
00947         static BOOL             areAllNearbyInstancesBaked();
00948 
00949         static void             onBakedTextureMasksLoaded(BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
00950 
00951         void                    setLocalTexture(ELocTexIndex i, LLViewerImage* tex, BOOL baked_version_exits);
00952         
00953         void                    requestLayerSetUpdate(LLVOAvatar::ELocTexIndex i);
00954         void                    addLocalTextureStats(LLVOAvatar::ELocTexIndex i, LLViewerImage* imagep, F32 texel_area_ratio, BOOL rendered, BOOL covered_by_baked);
00955         void                    addBakedTextureStats( LLViewerImage* imagep, F32 pixel_area, F32 texel_area_ratio, S32 boost_level);
00956         static void             onInitialBakedTextureLoaded( BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata );
00957         static void             onBakedTextureLoaded(BOOL success, LLViewerImage *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata);
00958         void                    useBakedTexture(const LLUUID& id);
00959         void                    dumpAvatarTEs(const char* context);
00960         void                    removeMissingBakedTextures();
00961         LLTexLayerSet*  getLayerSet(ETextureIndex index) const;
00962         LLHost                  getObjectHost() const;
00963         S32                             getLocalDiscardLevel( S32 index);
00964         
00965 
00966         
00967         
00968         
00969         
00970         private:
00971         LLVoiceVisualizer * mVoiceVisualizer;
00972         int                                     mCurrentGesticulationLevel;
00973 
00974         
00975 };
00976 
00977 #endif // LL_VO_AVATAR_H