llhomelocationresponder.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:3k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llhomelocationresponder.cpp
  3.  * @author Meadhbh Hamrick
  4.  * @brief Processes responses to the HomeLocation CapReq
  5.  *
  6.  * $LicenseInfo:firstyear=2008&license=viewergpl$
  7.  * 
  8.  * Copyright (c) 2008-2010, Linden Research, Inc.
  9.  * 
  10.  * Second Life Viewer Source Code
  11.  * The source code in this file ("Source Code") is provided by Linden Lab
  12.  * to you under the terms of the GNU General Public License, version 2.0
  13.  * ("GPL"), unless you have obtained a separate licensing agreement
  14.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  15.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  16.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  17.  * 
  18.  * There are special exceptions to the terms and conditions of the GPL as
  19.  * it is applied to this Source Code. View the full text of the exception
  20.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  21.  * online at
  22.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  23.  * 
  24.  * By copying, modifying or distributing this software, you acknowledge
  25.  * that you have read and understood your obligations described above,
  26.  * and agree to abide by those obligations.
  27.  * 
  28.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  29.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  30.  * COMPLETENESS OR PERFORMANCE.
  31.  * $/LicenseInfo$
  32.  */
  33. /* File Inclusions */
  34. #include "llviewerprecompiledheaders.h"
  35. #include "llhomelocationresponder.h"
  36. #include "llsdutil.h"
  37. #include "llagent.h"
  38. #include "llviewerregion.h"
  39. void LLHomeLocationResponder::result( const LLSD& content )
  40. {
  41.   LLVector3 agent_pos;
  42.   bool      error = true;
  43.   do {
  44.     // was the call to /agent/<agent-id>/home-location successful?
  45.     // If not, we keep error set to true
  46.     if( ! content.has("success") )
  47.     {
  48.       break;
  49.     }
  50.     if( 0 != strncmp("true", content["success"].asString().c_str(), 4 ) )
  51.     {
  52.       break;
  53.     }
  54.     // did the simulator return a "justified" home location?
  55.     // If no, we keep error set to true
  56.     if( ! content.has( "HomeLocation" ) )
  57.     {
  58.       break;
  59.     }
  60.     if( ! content["HomeLocation"].has("LocationPos") )
  61.     {
  62.       break;
  63.     }
  64.     if( ! content["HomeLocation"]["LocationPos"].has("X") )
  65.     {
  66.       break;
  67.     }
  68.     agent_pos.mV[VX] = content["HomeLocation"]["LocationPos"]["X"].asInteger();
  69.     if( ! content["HomeLocation"]["LocationPos"].has("Y") )
  70.     {
  71.       break;
  72.     }
  73.     agent_pos.mV[VY] = content["HomeLocation"]["LocationPos"]["Y"].asInteger();
  74.     if( ! content["HomeLocation"]["LocationPos"].has("Z") )
  75.     {
  76.       break;
  77.     }
  78.     agent_pos.mV[VZ] = content["HomeLocation"]["LocationPos"]["Z"].asInteger();
  79.     error = false;
  80.   } while( 0 );
  81.   if( ! error )
  82.   {
  83.     llinfos << "setting home position" << llendl;
  84.     LLViewerRegion *viewer_region = gAgent.getRegion();
  85.     gAgent.setHomePosRegion( viewer_region->getHandle(), agent_pos );
  86.   }
  87. }
  88. void LLHomeLocationResponder::error( U32 status, const std::string& reason )
  89. {
  90.   llinfos << "received error(" << reason  << ")" << llendl;
  91. }