00001
00032 #ifndef LL_LLHUDEFFECTLOOKAT_H
00033 #define LL_LLHUDEFFECTLOOKAT_H
00034
00035 #include "llhudeffect.h"
00036
00037 class LLViewerObject;
00038 class LLVOAvatar;
00039 class LLAttentionSet;
00040
00041 typedef enum e_lookat_type
00042 {
00043 LOOKAT_TARGET_NONE,
00044 LOOKAT_TARGET_IDLE,
00045 LOOKAT_TARGET_AUTO_LISTEN,
00046 LOOKAT_TARGET_FREELOOK,
00047 LOOKAT_TARGET_RESPOND,
00048 LOOKAT_TARGET_HOVER,
00049 LOOKAT_TARGET_CONVERSATION,
00050 LOOKAT_TARGET_SELECT,
00051 LOOKAT_TARGET_FOCUS,
00052 LOOKAT_TARGET_MOUSELOOK,
00053 LOOKAT_TARGET_CLEAR,
00054 LOOKAT_NUM_TARGETS
00055 } ELookAtType;
00056
00057 class LLHUDEffectLookAt : public LLHUDEffect
00058 {
00059 public:
00060 friend class LLHUDObject;
00061
00062 void markDead();
00063 void setSourceObject(LLViewerObject* objectp);
00064
00065 BOOL setLookAt(ELookAtType target_type, LLViewerObject *object, LLVector3 position);
00066 void clearLookAtTarget();
00067
00068 ELookAtType getLookAtType() { return mTargetType; }
00069 const LLVector3& getTargetPos() { return mTargetPos; }
00070 const LLVector3d& getTargetOffset() { return mTargetOffsetGlobal; }
00071 bool calcTargetPosition();
00072
00073 protected:
00074 LLHUDEffectLookAt(const U8 type);
00075 ~LLHUDEffectLookAt();
00076
00077 void update();
00078 void render();
00079 void packData(LLMessageSystem *mesgsys);
00080 void unpackData(LLMessageSystem *mesgsys, S32 blocknum);
00081
00082
00083 void setTargetObjectAndOffset(LLViewerObject *objp, LLVector3d offset);
00084 void setTargetPosGlobal(const LLVector3d &target_pos_global);
00085
00086 public:
00087 static BOOL sDebugLookAt;
00088
00089 private:
00090 ELookAtType mTargetType;
00091 LLVector3d mTargetOffsetGlobal;
00092 LLVector3 mLastSentOffsetGlobal;
00093 F32 mKillTime;
00094 LLFrameTimer mTimer;
00095 LLVector3 mTargetPos;
00096 F32 mLastSendTime;
00097 LLAttentionSet* mAttentions;
00098 };
00099
00100 #endif // LL_LLHUDEFFECTLOOKAT_H