Imported from Kokua (originally by ArminW) - disable broadcast your lookat and disable hand movement when editing (not fully working)
The menu options (develop -> avatar-> Privet Look At and Privet Point At) are always checked, regardless of the actual state.meow-7.2.2
parent
ce475706ca
commit
8ee4482c42
|
|
@ -499,6 +499,28 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>PrivateLookAtTarget</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If true, viewer shows simulated look-at behavior to others.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>PrivatePointAtTarget</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If true, viewer won't show the editing arm motion.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>ArrowKeysAlwaysMove</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -2762,7 +2762,8 @@ void LLAgentCamera::lookAtLastChat()
|
|||
BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position)
|
||||
{
|
||||
// disallow pointing at attachments and avatars
|
||||
if (object && (object->isAttachment() || object->isAvatar()))
|
||||
bool private_pointat = gSavedSettings.getBOOL("PrivatePointAtTarget");//this is the editing arm motion
|
||||
if (object && (object->isAttachment() || object->isAvatar() || private_pointat))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,9 +76,29 @@ LLHUDEffectBeam::~LLHUDEffectBeam()
|
|||
|
||||
void LLHUDEffectBeam::packData(LLMessageSystem *mesgsys)
|
||||
{
|
||||
if (!mSourceObject)
|
||||
LLViewerObject* source_object = (LLViewerObject*)mSourceObject;
|
||||
if (!source_object)
|
||||
{
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
else if (!source_object->isAvatar())
|
||||
{
|
||||
llwarns << "Missing source object!" << llendl;
|
||||
LL_DEBUGS("HUDEffect")<<"Non-Avatar HUDEffectBeam message for ID: "
|
||||
<< source_object->getID().asString()<< LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVOAvatar* source_avatar = (LLVOAvatar*)source_object;
|
||||
if (!source_avatar->isSelf())
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<<"Non-self HUDEffectBeam message for ID: "
|
||||
<< source_avatar->getID().asString()<< LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Pack the default data
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
|
||||
|
||||
#include "llxmltree.h"
|
||||
|
||||
#include "llviewercontrol.h"
|
||||
|
||||
BOOL LLHUDEffectLookAt::sDebugLookAt = FALSE;
|
||||
|
||||
|
|
@ -262,36 +262,70 @@ LLHUDEffectLookAt::~LLHUDEffectLookAt()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLHUDEffectLookAt::packData(LLMessageSystem *mesgsys)
|
||||
{
|
||||
// Pack the default data
|
||||
LLHUDEffect::packData(mesgsys);
|
||||
|
||||
// Pack the type-specific data. Uses a fun packed binary format. Whee!
|
||||
U8 packed_data[PKT_SIZE];
|
||||
memset(packed_data, 0, PKT_SIZE);
|
||||
// pack both target object and position
|
||||
// position interpreted as offset if target object is non-null
|
||||
ELookAtType target_type = mTargetType;
|
||||
LLVector3d target_offset_global = mTargetOffsetGlobal;
|
||||
LLViewerObject* target_object = (LLViewerObject*)mTargetObject;
|
||||
LLViewerObject* source_object = (LLViewerObject*)mSourceObject;
|
||||
LLVOAvatar* source_avatar = NULL;
|
||||
if (!source_object)//kokua TODO: find out why this happens at all and fix there
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<<"NULL-Object HUDEffectLookAt message" << LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
if (source_object->isAvatar())
|
||||
{
|
||||
source_avatar = (LLVOAvatar*)source_object;
|
||||
}
|
||||
else //kokua TODO: find out why this happens at all and fix there
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<<"Non-Avatar HUDEffectLookAt message for ID: " << source_object->getID().asString()<< LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
bool is_self = source_avatar->isSelf();
|
||||
bool is_private = gSavedSettings.getBOOL("PrivateLookAtTarget");
|
||||
if (!is_self) //kokua TODO: find out why this happens at all and fix there
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<< "Non-self Avatar HUDEffectLookAt message for ID: " << source_avatar->getID().asString() << LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
else if (is_private && target_type != LOOKAT_TARGET_AUTO_LISTEN)
|
||||
{
|
||||
//this mimicks "do nothing"
|
||||
target_type = LOOKAT_TARGET_AUTO_LISTEN;
|
||||
target_offset_global.setVec(2.5, 0.0, 0.0);
|
||||
target_object = mSourceObject;
|
||||
}
|
||||
// Pack the default data
|
||||
LLHUDEffect::packData(mesgsys);
|
||||
// Pack the type-specific data. Uses a fun packed binary format. Whee!
|
||||
U8 packed_data[PKT_SIZE];
|
||||
memset(packed_data, 0, PKT_SIZE);
|
||||
|
||||
if (mSourceObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
else //um ... we already returned ... how's that the case?
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
// pack both target object and position
|
||||
// position interpreted as offset if target object is non-null
|
||||
if (mTargetObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), target_object->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
htonmemcpy(&(packed_data[TARGET_POS]), mTargetOffsetGlobal.mdV, MVT_LLVector3d, 24);
|
||||
htonmemcpy(&(packed_data[TARGET_POS]), target_offset_global.mdV, MVT_LLVector3d, 24);
|
||||
|
||||
U8 lookAtTypePacked = (U8)mTargetType;
|
||||
U8 lookAtTypePacked = (U8)target_type;
|
||||
|
||||
htonmemcpy(&(packed_data[LOOKAT_TYPE]), &lookAtTypePacked, MVT_U8, 1);
|
||||
|
||||
|
|
@ -358,11 +392,17 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
{
|
||||
//llwarns << "Could not find target object for lookat effect" << llendl;
|
||||
}
|
||||
|
||||
U8 lookAtTypeUnpacked = 0;
|
||||
htonmemcpy(&lookAtTypeUnpacked, &(packed_data[LOOKAT_TYPE]), MVT_U8, 1);
|
||||
mTargetType = (ELookAtType)lookAtTypeUnpacked;
|
||||
|
||||
if ((U8)LOOKAT_NUM_TARGETS > lookAtTypeUnpacked)
|
||||
{
|
||||
mTargetType = (ELookAtType)lookAtTypeUnpacked;
|
||||
}
|
||||
else
|
||||
{
|
||||
mTargetType = LOOKAT_TARGET_NONE;
|
||||
LL_DEBUGS("HUDEffect") << "Invalid target type: " << lookAtTypeUnpacked << LL_ENDL;
|
||||
}
|
||||
if (mTargetType == LOOKAT_TARGET_NONE)
|
||||
{
|
||||
clearLookAtTarget();
|
||||
|
|
|
|||
|
|
@ -98,6 +98,30 @@ LLHUDEffectPointAt::~LLHUDEffectPointAt()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLHUDEffectPointAt::packData(LLMessageSystem *mesgsys)
|
||||
{
|
||||
LLViewerObject* source_object = (LLViewerObject*)mSourceObject;
|
||||
if (!source_object)
|
||||
{
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
else if (!source_object->isAvatar())
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<<"Non-Avatar HUDEffectPointAt message for ID: "
|
||||
<< source_object->getID().asString()<< LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLVOAvatar* source_avatar = (LLVOAvatar*)source_object;
|
||||
if (!source_avatar->isSelf())
|
||||
{
|
||||
LL_DEBUGS("HUDEffect")<<"Non-self HUDEffectPointAt message for ID: "
|
||||
<< source_avatar->getID().asString()<< LL_ENDL;
|
||||
markDead();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Pack the default data
|
||||
LLHUDEffect::packData(mesgsys);
|
||||
|
||||
|
|
|
|||
|
|
@ -99,7 +99,8 @@ void LLHUDManager::sendEffects()
|
|||
msg->nextBlockFast(_PREHASH_Effect);
|
||||
hep->packData(msg);
|
||||
hep->setNeedsSendToSim(FALSE);
|
||||
gAgent.sendMessage();
|
||||
if (!hep->isDead()) //packData(msg) might have invalidated the effect
|
||||
gAgent.sendMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1702,6 +1702,49 @@ class LLAdvancedCheckShowPointAt : public view_listener_t
|
|||
};
|
||||
|
||||
|
||||
/////////////////////
|
||||
// PRIVATE LOOK AT //
|
||||
/////////////////////
|
||||
|
||||
class LLAdvancedTogglePrivateLookPointAt : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
std::string command = userdata.asString();
|
||||
if ("Look" == command)
|
||||
{
|
||||
bool new_value = !gSavedSettings.getBOOL("PrivateLookAtTarget");
|
||||
gSavedSettings.setBOOL("PrivateLookAtTarget", new_value);
|
||||
}
|
||||
else if ("Point" == command)
|
||||
{
|
||||
bool new_value = !gSavedSettings.getBOOL("PrivatePointAtTarget");
|
||||
gSavedSettings.setBOOL("PrivatePointAtTarget", new_value);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLAdvancedCheckPrivateLookPointAt : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
std::string command = userdata["data"].asString();
|
||||
if ("Look" == command)
|
||||
{
|
||||
bool new_value = gSavedSettings.getBOOL("PrivateLookAtTarget");
|
||||
std::string control_name = userdata["control"].asString();
|
||||
gMenuHolder->findControl(control_name)->setValue(new_value);
|
||||
}
|
||||
else if ("Point" == command)
|
||||
{
|
||||
bool new_value = gSavedSettings.getBOOL("PrivatePointAtTarget");
|
||||
std::string control_name = userdata["control"].asString();
|
||||
gMenuHolder->findControl(control_name)->setValue(new_value);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/////////////////////////
|
||||
// DEBUG JOINT UPDATES //
|
||||
|
|
@ -8453,6 +8496,8 @@ void initialize_menus()
|
|||
view_listener_t::addMenu(new LLAdvancedCheckShowLookAt(), "Advanced.CheckShowLookAt");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleShowPointAt(), "Advanced.ToggleShowPointAt");
|
||||
view_listener_t::addMenu(new LLAdvancedCheckShowPointAt(), "Advanced.CheckShowPointAt");
|
||||
view_listener_t::addMenu(new LLAdvancedTogglePrivateLookPointAt(), "Advanced.TogglePrivateLookPointAt");
|
||||
view_listener_t::addMenu(new LLAdvancedCheckPrivateLookPointAt(), "Advanced.CheckPrivateLookPointAt");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleDebugJointUpdates(), "Advanced.ToggleDebugJointUpdates");
|
||||
view_listener_t::addMenu(new LLAdvancedCheckDebugJointUpdates(), "Advanced.CheckDebugJointUpdates");
|
||||
view_listener_t::addMenu(new LLAdvancedToggleDisableLOD(), "Advanced.ToggleDisableLOD");
|
||||
|
|
|
|||
|
|
@ -3261,7 +3261,27 @@
|
|||
<menu_item_check.on_click
|
||||
function="Advanced.ToggleShowPointAt" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
<menu_item_check
|
||||
label="Private Look At"
|
||||
name="Private Look At">
|
||||
<menu_item_check.on_click
|
||||
function="Advanced.TogglePrivateLookPointAt"
|
||||
parameter="Look" />
|
||||
<menu_item_check.on_check
|
||||
function="Advanced.CheckPrivateLookPointAt"
|
||||
parameter="Look" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Private Point At"
|
||||
name="Private Point At">
|
||||
<menu_item_check.on_click
|
||||
function="Advanced.TogglePrivateLookPointAt"
|
||||
parameter="Point" />
|
||||
<menu_item_check.on_check
|
||||
function="Advanced.CheckPrivateLookPointAt"
|
||||
parameter="Point" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Debug Joint Updates"
|
||||
name="Debug Joint Updates">
|
||||
<menu_item_check.on_check
|
||||
|
|
|
|||
Loading…
Reference in New Issue