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
00086 static const LLUUID& getTrackedLandmarkAssetID() { return instance()->mTrackedLandmarkAssetID; }
00087 static const LLUUID& getTrackedLandmarkItemID() { return instance()->mTrackedLandmarkItemID; }
00088
00089 static void trackAvatar( const LLUUID& avatar_id, const LLString& name );
00090 static void trackLandmark( const LLUUID& landmark_asset_id, const LLUUID& landmark_item_id , const LLString& name);
00091 static void trackLocation(const LLVector3d& pos, const LLString& full_name, const LLString& tooltip, ETrackingLocationType location_type = LOCATION_NOTHING);
00092
00093
00094 static LLVector3d getTrackedPositionGlobal();
00095
00096 static BOOL hasLandmarkPosition();
00097 static const LLString& getTrackedLocationName();
00098
00099 static void drawHUDArrow();
00100
00101
00102 static void render3D();
00103
00104 static BOOL handleMouseDown(S32 x, S32 y);
00105
00106 static LLTracker* sTrackerp;
00107 static BOOL sCheesyBeacon;
00108
00109 static const LLString& getLabel() { return instance()->mLabel; }
00110 static const LLString& getToolTip() { return instance()->mToolTip; }
00111 protected:
00112 LLTracker();
00113 ~LLTracker();
00114
00115 static void renderBeacon( LLVector3d pos_global,
00116 const LLColor4& color,
00117 LLHUDText* hud_textp,
00118 const std::string& label );
00119
00120 void stopTrackingAll(BOOL clear_ui = FALSE);
00121 void stopTrackingAvatar(BOOL clear_ui = FALSE);
00122 void stopTrackingLocation(BOOL clear_ui = FALSE);
00123 void stopTrackingLandmark(BOOL clear_ui = FALSE);
00124
00125 void drawMarker(const LLVector3d& pos_global, const LLColor4& color);
00126 void setLandmarkVisited();
00127 void cacheLandmarkPosition();
00128 void purgeBeaconText();
00129
00130 protected:
00131 ETrackingStatus mTrackingStatus;
00132 ETrackingLocationType mTrackingLocationType;
00133 LLPointer<LLHUDText> mBeaconText;
00134 S32 mHUDArrowCenterX;
00135 S32 mHUDArrowCenterY;
00136
00137 LLVector3d mTrackedPositionGlobal;
00138
00139 LLString mLabel;
00140 LLString mToolTip;
00141
00142 LLString mTrackedLandmarkName;
00143 LLUUID mTrackedLandmarkAssetID;
00144 LLUUID mTrackedLandmarkItemID;
00145 LLDynamicArray<LLUUID> mLandmarkAssetIDList;
00146 LLDynamicArray<LLUUID> mLandmarkItemIDList;
00147 BOOL mHasReachedLandmark;
00148 BOOL mHasLandmarkPosition;
00149 BOOL mLandmarkHasBeenVisited;
00150
00151 LLString mTrackedLocationName;
00152 BOOL mIsTrackingLocation;
00153 BOOL mHasReachedLocation;
00154 };
00155
00156
00157 #endif
00158