00001
00032
00033
00034
00035
00036
00037
00038 #ifndef LL_LLTRACKER_H
00039 #define LL_LLTRACKER_H
00040
00041 #include "lldarray.h"
00042 #include "llmemory.h"
00043 #include "llstring.h"
00044 #include "lluuid.h"
00045 #include "v3dmath.h"
00046
00047 class LLHUDText;
00048
00049
00050 class LLTracker
00051 {
00052 public:
00053 enum ETrackingStatus
00054 {
00055 TRACKING_NOTHING = 0,
00056 TRACKING_AVATAR = 1,
00057 TRACKING_LANDMARK = 2,
00058 TRACKING_LOCATION = 3,
00059 };
00060
00061 enum ETrackingLocationType
00062 {
00063 LOCATION_NOTHING,
00064 LOCATION_EVENT,
00065 LOCATION_ITEM,
00066 };
00067
00068 static LLTracker* instance()
00069 {
00070 if (!sTrackerp)
00071 {
00072 sTrackerp = new LLTracker();
00073 }
00074 return sTrackerp;
00075 }
00076
00077 static void cleanupInstance() { delete sTrackerp; sTrackerp = NULL; }
00078
00079
00080
00081 static ETrackingStatus getTrackingStatus() { return instance()->mTrackingStatus; }
00082 static ETrackingLocationType getTrackedLocationType() { return instance()->mTrackingLocationType; }
00083 static BOOL isTracking(void*) { return (BOOL) instance()->mTrackingStatus; }
00084 static void stopTracking(void*);
00085 static void clearFocus();
00086
00087 static const LLUUID& getTrackedLandmarkAssetID() { return instance()->mTrackedLandmarkAssetID; }
00088 static const LLUUID& getTrackedLandmarkItemID() { return instance()->mTrackedLandmarkItemID; }
00089
00090 static void trackAvatar( const LLUUID& avatar_id, const LLString& name );
00091 static void trackLandmark( const LLUUID& landmark_asset_id, const LLUUID& landmark_item_id , const LLString& name);
00092 static void trackLocation(const LLVector3d& pos, const LLString& full_name, const LLString& tooltip, ETrackingLocationType location_type = LOCATION_NOTHING);
00093
00094
00095 static LLVector3d getTrackedPositionGlobal();
00096
00097 static BOOL hasLandmarkPosition();
00098 static const LLString& getTrackedLocationName();
00099
00100 static void drawHUDArrow();
00101
00102
00103 static void render3D();
00104
00105 static BOOL handleMouseDown(S32 x, S32 y);
00106
00107 static LLTracker* sTrackerp;
00108 static BOOL sCheesyBeacon;
00109
00110 static const LLString& getLabel() { return instance()->mLabel; }
00111 static const LLString& getToolTip() { return instance()->mToolTip; }
00112 protected:
00113 LLTracker();
00114 ~LLTracker();
00115
00116 static void renderBeacon( LLVector3d pos_global,
00117 const LLColor4& color,
00118 LLHUDText* hud_textp,
00119 const std::string& label );
00120
00121 void stopTrackingAll(BOOL clear_ui = FALSE);
00122 void stopTrackingAvatar(BOOL clear_ui = FALSE);
00123 void stopTrackingLocation(BOOL clear_ui = FALSE);
00124 void stopTrackingLandmark(BOOL clear_ui = FALSE);
00125
00126 void drawMarker(const LLVector3d& pos_global, const LLColor4& color);
00127 void setLandmarkVisited();
00128 void cacheLandmarkPosition();
00129 void purgeBeaconText();
00130
00131 protected:
00132 ETrackingStatus mTrackingStatus;
00133 ETrackingLocationType mTrackingLocationType;
00134 LLPointer<LLHUDText> mBeaconText;
00135 S32 mHUDArrowCenterX;
00136 S32 mHUDArrowCenterY;
00137
00138 LLVector3d mTrackedPositionGlobal;
00139
00140 LLString mLabel;
00141 LLString mToolTip;
00142
00143 LLString mTrackedLandmarkName;
00144 LLUUID mTrackedLandmarkAssetID;
00145 LLUUID mTrackedLandmarkItemID;
00146 LLDynamicArray<LLUUID> mLandmarkAssetIDList;
00147 LLDynamicArray<LLUUID> mLandmarkItemIDList;
00148 BOOL mHasReachedLandmark;
00149 BOOL mHasLandmarkPosition;
00150 BOOL mLandmarkHasBeenVisited;
00151
00152 LLString mTrackedLocationName;
00153 BOOL mIsTrackingLocation;
00154 BOOL mHasReachedLocation;
00155 };
00156
00157
00158 #endif
00159