void LLAgentListener::requestSit(LLSD const & event_data) const { //mAgent.getAvatarObject()->sitOnObject(); // shamelessly ripped from llviewermenu.cpp:handle_sit_or_stand() // *TODO - find a permanent place to share this code properly. LLViewerObject *object = NULL; if (event_data.has("obj_uuid")) { object = gObjectList.findObject(event_data["obj_uuid"]); } else if (event_data.has("position")) { LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); object = findObjectClosestTo(target_position); } if (object && object->getPCode() == LL_PCODE_VOLUME) { gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); gMessageSystem->nextBlockFast(_PREHASH_AgentData); gMessageSystem->addUUIDFast(_PREHASH_AgentID, mAgent.getID()); gMessageSystem->addUUIDFast(_PREHASH_SessionID, mAgent.getSessionID()); gMessageSystem->nextBlockFast(_PREHASH_TargetObject); gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3(0,0,0)); object->getRegion()->sendReliableMessage(); } else { llwarns << "LLAgent requestSit could not find the sit target: " << event_data << llendl; } }
void LLAgentListener::requestSit(LLSD const & event_data) const { //mAgent.getAvatarObject()->sitOnObject(); // shamelessly ripped from llviewermenu.cpp:handle_sit_or_stand() // *TODO - find a permanent place to share this code properly. LLViewerObject *object = NULL; if (event_data.has("obj_uuid")) { object = gObjectList.findObject(event_data["obj_uuid"]); } else if (event_data.has("position")) { LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); object = findObjectClosestTo(target_position); } // [RLVa:KB] - Checked: 2010-03-06 (RLVa-1.2.0c) | Modified: RLVa-1.1.0j // TODO-RLVa: [RLVa-1.2.1] Figure out how to call this? if ( (rlv_handler_t::isEnabled()) && (!gRlvHandler.canSit(object)) ) { return; } // [/RLVa:KB] if (object && object->getPCode() == LL_PCODE_VOLUME) { // [RLVa:KB] - Checked: 2010-08-29 (RLVa-1.2.1c) | Added: RLVa-1.2.1c if ( (gRlvHandler.hasBehaviour(RLV_BHVR_STANDTP)) && (isAgentAvatarValid()) ) { if (gAgentAvatarp->isSitting()) { gAgent.standUp(); return; } gRlvHandler.setSitSource(gAgent.getPositionGlobal()); } // [/RLVa:KB] gMessageSystem->newMessageFast(_PREHASH_AgentRequestSit); gMessageSystem->nextBlockFast(_PREHASH_AgentData); gMessageSystem->addUUIDFast(_PREHASH_AgentID, mAgent.getID()); gMessageSystem->addUUIDFast(_PREHASH_SessionID, mAgent.getSessionID()); gMessageSystem->nextBlockFast(_PREHASH_TargetObject); gMessageSystem->addUUIDFast(_PREHASH_TargetID, object->mID); gMessageSystem->addVector3Fast(_PREHASH_Offset, LLVector3(0,0,0)); object->getRegion()->sendReliableMessage(); } else { llwarns << "LLAgent requestSit could not find the sit target: " << event_data << llendl; } }
void LLAgentListener::requestTouch(LLSD const & event_data) const { LLViewerObject *object = NULL; if (event_data.has("obj_uuid")) { object = gObjectList.findObject(event_data["obj_uuid"]); } else if (event_data.has("position")) { LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); object = findObjectClosestTo(target_position); } S32 face = 0; if (event_data.has("face")) { face = event_data["face"].asInteger(); } if (object && object->getPCode() == LL_PCODE_VOLUME) { // Fake enough pick info to get it to (hopefully) work LLPickInfo pick; pick.mObjectFace = face; /* These values are sent to the simulator, but face seems to be easiest to use pick.mUVCoords "UVCoord" pick.mSTCoords "STCoord" pick.mObjectFace "FaceIndex" pick.mIntersection "Position" pick.mNormal "Normal" pick.mBinormal "Binormal" */ // A touch is a sketchy message sequence ... send a grab, immediately // followed by un-grabbing, crossing fingers and hoping packets arrive in // the correct order send_ObjectGrab_message(object, pick, LLVector3::zero); send_ObjectDeGrab_message(object, pick); } else { llwarns << "LLAgent requestTouch could not find the touch target " << event_data["obj_uuid"].asUUID() << llendl; } }
void LLAgentListener::lookAt(LLSD const & event_data) const { LLViewerObject *object = NULL; if (event_data.has("obj_uuid")) { object = gObjectList.findObject(event_data["obj_uuid"]); } else if (event_data.has("position")) { LLVector3 target_position = ll_vector3_from_sd(event_data["position"]); object = findObjectClosestTo(target_position); } S32 look_at_type = (S32) LOOKAT_TARGET_NONE; if (event_data.has("type")) { look_at_type = event_data["type"].asInteger(); } if (look_at_type >= (S32) LOOKAT_TARGET_NONE && look_at_type < (S32) LOOKAT_NUM_TARGETS) { gAgentCamera.setLookAt((ELookAtType) look_at_type, object); } }