SL-14717 Ability to trigger left clicks (and more) on animesh objects
Contribution by Rohacan Hirons SL-14717 Follow ups SL-14717 Using the cached setting in LLToolPie::handleHover()master
parent
77147012ff
commit
8215fff0c2
|
|
@ -1251,6 +1251,8 @@ Robin Cornelius
|
|||
VWR-12763
|
||||
VWR-12995
|
||||
VWR-20911
|
||||
Rohacan Hirons
|
||||
SL-14717
|
||||
Rosco Teardrop
|
||||
Rose Evans
|
||||
Rudee Voom
|
||||
|
|
|
|||
|
|
@ -2501,8 +2501,16 @@ void LLAgentCamera::setFocusGlobal(const LLPickInfo& pick)
|
|||
{
|
||||
// focus on object plus designated offset
|
||||
// which may or may not be same as pick.mPosGlobal
|
||||
// except for rigged items to prevent wrong focus position
|
||||
if (objectp->isRiggedMesh())
|
||||
{
|
||||
setFocusGlobal(pick.mPosGlobal, pick.mObjectID);
|
||||
}
|
||||
else
|
||||
{
|
||||
setFocusGlobal(objectp->getPositionGlobal() + LLVector3d(pick.mObjectOffset), pick.mObjectID);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// focus directly on point where user clicked
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ BOOL LLToolFace::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
|
||||
BOOL LLToolFace::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback);
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback, false, gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
|
||||
gViewerWindow->hideCursor();
|
||||
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ FALSE, /*BOOL pick_unselectable*/ TRUE);
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback, /*BOOL pick_transparent*/ FALSE, /*BOOL pick_rigged*/ gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"), /*BOOL pick_unselectable*/ TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,6 +78,10 @@ static void handle_click_action_play();
|
|||
static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp);
|
||||
static ECursorType cursor_from_parcel_media(U8 click_action);
|
||||
|
||||
BOOL rigged_hovering_keep_hand = false;
|
||||
U64 last_rigged_hovering_check_clock_count = 0;
|
||||
U64 last_rigged_pick_clock_count = 0;
|
||||
|
||||
LLToolPie::LLToolPie()
|
||||
: LLTool(std::string("Pie")),
|
||||
mMouseButtonDown( false ),
|
||||
|
|
@ -112,7 +116,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
mMouseDownX = x;
|
||||
mMouseDownY = y;
|
||||
LLTimer pick_timer;
|
||||
BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
|
||||
BOOL pick_rigged = gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
|
||||
LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged);
|
||||
LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
|
||||
LLViewerObject *transp_object = transparent_pick.getObject();
|
||||
|
|
@ -173,7 +177,9 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
|
||||
mMouseButtonDown = true;
|
||||
|
||||
return handleLeftClickPick();
|
||||
handleLeftClickPick();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Spawn context menus on right mouse down so you can drag over and select
|
||||
|
|
@ -722,7 +728,21 @@ void LLToolPie::selectionPropertiesReceived()
|
|||
|
||||
BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
|
||||
// prevent rigged item hovering causing FPS to drop by faking we're still hovering it for 0.25 seconds
|
||||
U64 current_clock_count = LLTimer::getCurrentClockCount();
|
||||
if (current_clock_count - last_rigged_pick_clock_count < 2500000) {
|
||||
if(rigged_hovering_keep_hand) gViewerWindow->setCursor(UI_CURSOR_HAND);
|
||||
return TRUE;
|
||||
}
|
||||
rigged_hovering_keep_hand = 0;
|
||||
|
||||
static LLCachedControl<bool> pick_rigged_setting(gSavedSettings, "AnimatedObjectsAllowLeftClick");
|
||||
BOOL pick_rigged = pick_rigged_setting;
|
||||
if (pick_rigged) {
|
||||
pick_rigged = (current_clock_count - last_rigged_hovering_check_clock_count > 1000000); // only 10 per seconds
|
||||
if (pick_rigged) last_rigged_hovering_check_clock_count = current_clock_count;
|
||||
}
|
||||
|
||||
mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);
|
||||
LLViewerObject *parent = NULL;
|
||||
LLViewerObject *object = mHoverPick.getObject();
|
||||
|
|
@ -730,6 +750,10 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|
|||
if (object)
|
||||
{
|
||||
parent = object->getRootEdit();
|
||||
// Update gLastRiggedPickClockCount if we're hovering a rigged item
|
||||
if (object->isRiggedMesh()) {
|
||||
last_rigged_pick_clock_count = current_clock_count;
|
||||
}
|
||||
}
|
||||
|
||||
// Show screen-space highlight glow effect
|
||||
|
|
@ -794,6 +818,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|
|||
{
|
||||
show_highlight = true;
|
||||
gViewerWindow->setCursor(UI_CURSOR_HAND);
|
||||
rigged_hovering_keep_hand = true;
|
||||
LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -7184,6 +7184,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,
|
|||
|
||||
if (!sPickAvatar)
|
||||
{
|
||||
pick_rigged = false;
|
||||
//save hit info in case we need to restore
|
||||
//due to attachment override
|
||||
LLVector4a local_normal;
|
||||
|
|
|
|||
Loading…
Reference in New Issue