void LLFloaterWorldMap::teleportToLandmark() { BOOL has_destination = FALSE; LLUUID destination_id; // Null means "home" if (LLTracker::getTrackedLandmarkAssetID() == sHomeID) { has_destination = TRUE; } else { LLLandmark* landmark = gLandmarkList.getAsset(LLTracker::getTrackedLandmarkAssetID()); LLVector3d global_pos; if (landmark && landmark->getGlobalPos(global_pos)) { destination_id = LLTracker::getTrackedLandmarkAssetID(); has_destination = TRUE; } else if (landmark) { // pop up an anonymous request request. LLUUID region_id; if (landmark->getRegionID(region_id)) { LLLandmark::requestRegionHandle( gMessageSystem, gAgent.getRegionHost(), region_id, NULL); } } } if (has_destination) { gAgent.teleportViaLandmark(destination_id); } }
// protected void LLFloaterWorldMap::teleport() { BOOL teleport_home = FALSE; LLVector3d pos_global; LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); LLTracker::ETrackingStatus tracking_status = LLTracker::getTrackingStatus(); if (LLTracker::TRACKING_AVATAR == tracking_status && av_tracker.haveTrackingInfo() ) { pos_global = av_tracker.getGlobalPos(); pos_global.mdV[VZ] = childGetValue("spin z"); } else if ( LLTracker::TRACKING_LANDMARK == tracking_status) { if( LLTracker::getTrackedLandmarkAssetID() == sHomeID ) { teleport_home = TRUE; } else { LLLandmark* landmark = gLandmarkList.getAsset( LLTracker::getTrackedLandmarkAssetID() ); LLUUID region_id; if(landmark && !landmark->getGlobalPos(pos_global) && landmark->getRegionID(region_id)) { LLLandmark::requestRegionHandle( gMessageSystem, gAgent.getRegionHost(), region_id, NULL); } } } else if ( LLTracker::TRACKING_LOCATION == tracking_status) { pos_global = LLTracker::getTrackedPositionGlobal(); } else { make_ui_sound("UISndInvalidOp"); } // Do the teleport, which will also close the floater if (teleport_home) { gAgent.teleportHome(); } else if (!pos_global.isExactlyZero()) { if(LLTracker::TRACKING_LANDMARK == tracking_status) { gAgent.teleportViaLandmark(LLTracker::getTrackedLandmarkAssetID()); } else { gAgent.teleportViaLocation( pos_global ); } } }
// static void LLLandmarkList::processGetAssetReply( LLVFS *vfs, const LLUUID& uuid, LLAssetType::EType type, void* user_data, S32 status, LLExtStat ext_status ) { if( status == 0 ) { LLVFile file(vfs, uuid, type); S32 file_length = file.getSize(); std::vector<char> buffer(file_length + 1); file.read( (U8*)&buffer[0], file_length); buffer[ file_length ] = 0; LLLandmark* landmark = LLLandmark::constructFromString(&buffer[0]); if (landmark) { gLandmarkList.mList[ uuid ] = landmark; gLandmarkList.mRequestedList.erase(uuid); LLVector3d pos; if(!landmark->getGlobalPos(pos)) { LLUUID region_id; if(landmark->getRegionID(region_id)) { LLLandmark::requestRegionHandle( gMessageSystem, gAgent.getRegionHost(), region_id, boost::bind(&LLLandmarkList::onRegionHandle, &gLandmarkList, uuid)); } // the callback will be called when we get the region handle. } else { gLandmarkList.makeCallbacks(uuid); } } } else { LLViewerStats::getInstance()->incStat( LLViewerStats::ST_DOWNLOAD_FAILED ); if( LL_ERR_ASSET_REQUEST_NOT_IN_DATABASE == status ) { LLNotificationsUtil::add("LandmarkMissing"); } else { LLNotificationsUtil::add("UnableToLoadLandmark"); } gLandmarkList.mBadList.insert(uuid); } }