diff options
| author | Steven Bennetts <steve@lindenlab.com> | 2009-08-26 20:47:27 +0000 | 
|---|---|---|
| committer | Steven Bennetts <steve@lindenlab.com> | 2009-08-26 20:47:27 +0000 | 
| commit | af98aad98d43ec8b128ecac3089426d6ae6edc3f (patch) | |
| tree | 5971f87afc04580df470a003793dcc8c974e29a7 /indra/newview/llagentui.cpp | |
| parent | 6a364e6f32c12c1ab2c0f33e8ef07d885a8765a2 (diff) | |
svn merge https://svn.aws.productengine.com/secondlife/export-from-ll/viewer-2-0@1471 https://svn.aws.productengine.com/secondlife/pe/stable-1@1476 -> viewer-2.0.0-3
EXT-65 EXT-270 EXT-359 EXT-361 EXT-367 EXT-367 EXT-368 EXT-455 EXT-468 EXT-530 EXT-539 EXT-540 EXT-542 EXT-545 EXT-555 EXT-557 EXT-558 EXT-559 EXT-559 EXT-560 EXT-561 EXT-562 EXT-563 EXT-564 EXT-566 EXT-568 EXT-569 EXT-570 EXT-571 EXT-581 EXT-590 EXT-594 EXT-596 EXT-597 EXT-601 EXT-602 EXT-603 EXT-613 EXT-620 EXT-624 EXT-628 EXT-630 EXT-631 EXT-632 EXT-639 EXT-640 EXT-641 EXT-642 EXT-662 EXT-671 EXT-672 EXT-676 EXT-682 EXT-692 EXT-703 EXT-717
Diffstat (limited to 'indra/newview/llagentui.cpp')
| -rw-r--r-- | indra/newview/llagentui.cpp | 179 | 
1 files changed, 179 insertions, 0 deletions
| diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp new file mode 100644 index 0000000000..93d88bf3df --- /dev/null +++ b/indra/newview/llagentui.cpp @@ -0,0 +1,179 @@ +/**  + * @file llagentui.cpp + * @brief Utility methods to process agent's data as slurl's etc. before displaying + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + *  + * Copyright (c) 2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llagentui.h" + +// Library includes +#include "llparcel.h" + +// Viewer includes +#include "llagent.h" +#include "llviewercontrol.h" +#include "llviewerregion.h" +#include "llviewerparcelmgr.h" +#include "llvoavatarself.h" +#include "llslurl.h" + +//static +void LLAgentUI::buildName(std::string& name) +{ +	name.clear(); + +	LLVOAvatarSelf* avatar_object = gAgent.getAvatarObject(); +	if (avatar_object) +	{ +		LLNameValue *first_nv = avatar_object->getNVPair("FirstName"); +		LLNameValue *last_nv = avatar_object->getNVPair("LastName"); +		if (first_nv && last_nv) +		{ +			name = first_nv->printData() + " " + last_nv->printData(); +		} +		else +		{ +			llwarns << "Agent is missing FirstName and/or LastName nv pair." << llendl; +		} +	} +	else +	{ +		name = gSavedSettings.getString("FirstName") + " " + gSavedSettings.getString("LastName"); +	} +} + +//static +void LLAgentUI::buildFullname(std::string& name) +{ +	if (gAgent.getAvatarObject()) name = gAgent.getAvatarObject()->getFullname(); +} + +//static +std::string LLAgentUI::buildSLURL(const bool escaped /*= true*/) +{ +	std::string slurl; +	LLViewerRegion *regionp = gAgent.getRegion(); +	if (regionp) +	{ +		LLVector3d agentPos = gAgent.getPositionGlobal(); +		slurl = LLSLURL::buildSLURLfromPosGlobal(regionp->getName(), agentPos, escaped); +	} +	return slurl; +} + +BOOL LLAgentUI::buildLocationString(std::string& str, LLAgent::ELocationFormat fmt,const LLVector3& agent_pos_region) +{ +	LLViewerRegion* region = gAgent.getRegion(); +	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); + +	if (!region || !parcel) return FALSE; + +	S32 pos_x = S32(agent_pos_region.mV[VX]); +	S32 pos_y = S32(agent_pos_region.mV[VY]); +	S32 pos_z = S32(agent_pos_region.mV[VZ]); + +	// Round the numbers based on the velocity +	F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared(); + +	const F32 FLY_CUTOFF = 6.f;		// meters/sec +	const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF; +	const F32 WALK_CUTOFF = 1.5f;	// meters/sec +	const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF; + +	if (velocity_mag_sq > FLY_CUTOFF_SQ) +	{ +		pos_x -= pos_x % 4; +		pos_y -= pos_y % 4; +	} +	else if (velocity_mag_sq > WALK_CUTOFF_SQ) +	{ +		pos_x -= pos_x % 2; +		pos_y -= pos_y % 2; +	} + +	// create a default name and description for the landmark +	std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName(); +	std::string region_name = region->getName(); +	std::string buffer; +	if( parcel_name.empty() ) +	{ +		// the parcel doesn't have a name +		switch (fmt) +		{ +		case LLAgent::LOCATION_FORMAT_LANDMARK: +			buffer = llformat("%.100s", region_name.c_str()); +			break; +		case LLAgent::LOCATION_FORMAT_NORMAL: +			buffer = llformat("%s", region_name.c_str()); +			break; +		case LLAgent::LOCATION_FORMAT_WITHOUT_SIM: +		case LLAgent::LOCATION_FORMAT_FULL: +			buffer = llformat("%s (%d, %d, %d)", +				region_name.c_str(), +				pos_x, pos_y, pos_z); +			break; +		} +	} +	else +	{ +		// the parcel has a name, so include it in the landmark name +		switch (fmt) +		{ +		case LLAgent::LOCATION_FORMAT_LANDMARK: +			buffer = llformat("%.100s", parcel_name.c_str()); +			break; +		case LLAgent::LOCATION_FORMAT_NORMAL: +			buffer = llformat("%s, %s", region_name.c_str(), parcel_name.c_str()); +			break; +		case LLAgent::LOCATION_FORMAT_WITHOUT_SIM: +			buffer = llformat("%s, %s (%d, %d, %d)", +				region_name.c_str(), +				parcel_name.c_str(), +				pos_x, pos_y, pos_z); +			break; +		case LLAgent::LOCATION_FORMAT_FULL: +			std::string sim_access_string = region->getSimAccessString(); +			buffer = llformat("%s, %s (%d, %d, %d)%s%s", +				region_name.c_str(), +				parcel_name.c_str(), +				pos_x, pos_y, pos_z, +				sim_access_string.empty() ? "" : " - ", +				sim_access_string.c_str()); +			break; +		} +	} +	str = buffer; +	return TRUE; +} +BOOL LLAgentUI::buildLocationString(std::string& str, LLAgent::ELocationFormat fmt) +{ +	return buildLocationString(str,fmt, gAgent.getPositionAgent()); +} | 
