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