From 7781db331f5c96a356a2b27c8d2aba32b6237395 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 14:25:06 -0800 Subject: updated help url to take topic parameter --- indra/newview/app_settings/settings_minimal.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml index b5fb85c929..73c7c1e4bd 100644 --- a/indra/newview/app_settings/settings_minimal.xml +++ b/indra/newview/app_settings/settings_minimal.xml @@ -61,7 +61,7 @@ Type String Value - http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/howto/index.html + http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/howto/index.html?topic=[TOPIC] PreferredMaturity @@ -347,5 +347,16 @@ Value 0 + ClickToWalk + + Comment + Click in world to walk to location + Persist + 1 + Type + Boolean + Value + 1 + -- cgit v1.2.3 From a4d2e10c375ae3c35f5426c0bd45e650197ad189 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 14:27:50 -0800 Subject: SOCIAL-530 WIP When double clicking a nearby location I want my avatar to walk to that spot added setting to toggle click to walk --- indra/newview/app_settings/settings.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ea8b1c681d..88620e4193 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12531,5 +12531,16 @@ Value 1 + ClickToWalk + + Comment + Click in world to walk to location + Persist + 1 + Type + Boolean + Value + 0 + -- cgit v1.2.3 From 919110eb4482b9bbe6651220081117be4479dec6 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 14:52:45 -0800 Subject: SOCIAL-682 FIX Turn on RegionEntryAccessBlocked_Change notification --- indra/newview/skins/minimal/xui/en/notification_visibility.xml | 3 --- 1 file changed, 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/skins/minimal/xui/en/notification_visibility.xml b/indra/newview/skins/minimal/xui/en/notification_visibility.xml index 4fb08a3959..2fc1d81a01 100644 --- a/indra/newview/skins/minimal/xui/en/notification_visibility.xml +++ b/indra/newview/skins/minimal/xui/en/notification_visibility.xml @@ -10,9 +10,6 @@ - - - -- cgit v1.2.3 From 1898768009d9eceafc4d95e8ee291023d30be399 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 14:53:41 -0800 Subject: re-enabling lldialog pending further discussion --- indra/newview/skins/minimal/xui/en/notification_visibility.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/skins/minimal/xui/en/notification_visibility.xml b/indra/newview/skins/minimal/xui/en/notification_visibility.xml index 2fc1d81a01..555d437c57 100644 --- a/indra/newview/skins/minimal/xui/en/notification_visibility.xml +++ b/indra/newview/skins/minimal/xui/en/notification_visibility.xml @@ -11,7 +11,7 @@ - + -- cgit v1.2.3 From b815dc9aa4dc60bf405c10e426579950570d5436 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 20:20:17 -0800 Subject: SOCIAL-530 WIP When double clicking a nearby location I want my avatar to walk to that spot Initial mouse-based steering and single click to walk --- indra/newview/lltoolpie.cpp | 221 ++++++++++++++++++++++++++++++++++++-------- indra/newview/lltoolpie.h | 15 ++- 2 files changed, 195 insertions(+), 41 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 19d7b70101..e539174a4b 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -79,7 +79,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action); LLToolPie::LLToolPie() : LLTool(std::string("Pie")), - mGrabMouseButtonDown( FALSE ), + mMouseButtonDown( FALSE ), mMouseOutsideSlop( FALSE ), mClickAction(0), mClickActionBuyEnabled( gSavedSettings.getBOOL("ClickActionBuyEnabled") ), @@ -99,12 +99,18 @@ BOOL LLToolPie::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktyp BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) { + mMouseOutsideSlop = FALSE; + mMouseDownX = x; + mMouseDownY = y; + mLastYaw = 0.f; //left mouse down always picks transparent mPick = gViewerWindow->pickImmediate(x, y, TRUE); mPick.mKeyMask = mask; - mGrabMouseButtonDown = TRUE; + + mDragPick = mPick; + mMouseButtonDown = TRUE; - pickLeftMouseDownCallback(); + handleLeftClickPick(); return TRUE; } @@ -119,7 +125,7 @@ BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask) // claim not handled so UI focus stays same - pickRightMouseDownCallback(); + handleRightClickPick(); return FALSE; } @@ -136,7 +142,7 @@ BOOL LLToolPie::handleScrollWheel(S32 x, S32 y, S32 clicks) } // True if you selected an object. -BOOL LLToolPie::pickLeftMouseDownCallback() +BOOL LLToolPie::handleLeftClickPick() { S32 x = mPick.mMousePt.mX; S32 y = mPick.mMousePt.mY; @@ -319,7 +325,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback() if (!gSavedSettings.getBOOL("LeftClickShowMenu")) { // mouse already released - if (!mGrabMouseButtonDown) + if (!mMouseButtonDown) { return TRUE; } @@ -513,7 +519,27 @@ void LLToolPie::selectionPropertiesReceived() BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) { + if (!mMouseOutsideSlop && mMouseButtonDown) + { + S32 delta_x = x - mMouseDownX; + S32 delta_y = y - mMouseDownY; + S32 threshold = gSavedSettings.getS32("DragAndDropDistanceThreshold"); + if (delta_x * delta_x + delta_y * delta_y > threshold * threshold) + { + startCameraSteering(); + mMouseOutsideSlop = TRUE; + setMouseCapture(TRUE); + } + } + mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE); + + if (mMouseOutsideSlop) + { + steerCameraWithMouse(x, y); + return TRUE; + } + // perform a separate pick that detects transparent objects since they respond to 1-click actions LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE); @@ -584,37 +610,31 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) { LLViewerObject* obj = mPick.getObject(); + U8 click_action = final_click_action(obj); - handleMediaMouseUp(); + if (hasMouseCapture()) + { + setMouseCapture(FALSE); + } - U8 click_action = final_click_action(obj); - if (click_action != CLICK_ACTION_NONE) + bool media_handled_click = handleMediaMouseUp() || LLViewerMediaFocus::getInstance()->getFocus(); + bool mouse_moved = mMouseOutsideSlop; + mMouseOutsideSlop = FALSE; + mMouseButtonDown = FALSE; + + if (!media_handled_click && click_action == CLICK_ACTION_NONE && !mouse_moved) { - switch(click_action) + if (gSavedSettings.getBOOL("ClickToWalk") // click to walk enabled + && !mPick.mPosGlobal.isExactlyZero() // valid coordinates for pick + && (mPick.mPickType == LLPickInfo::PICK_LAND // we clicked on land + || mPick.mObjectID.notNull())) // or on an object { - // NOTE: mClickActionBuyEnabled flag enables/disables BUY action but setting cursor to default is okay - case CLICK_ACTION_BUY: - // NOTE: mClickActionPayEnabled flag enables/disables PAY action but setting cursor to default is okay - case CLICK_ACTION_PAY: - case CLICK_ACTION_OPEN: - case CLICK_ACTION_ZOOM: - case CLICK_ACTION_PLAY: - case CLICK_ACTION_OPEN_MEDIA: - // Because these actions open UI dialogs, we won't change - // the cursor again until the next hover and GL pick over - // the world. Keep the cursor an arrow, assuming that - // after the user moves off the UI, they won't be on the - // same object anymore. - gViewerWindow->setCursor(UI_CURSOR_ARROW); - // Make sure the hover-picked object is ignored. - //gToolTipView->resetLastHoverObject(); - break; - default: - break; + handle_go_to(); + return TRUE; } } + gViewerWindow->setCursor(UI_CURSOR_ARROW); - mGrabMouseButtonDown = FALSE; LLToolMgr::getInstance()->clearTransientTool(); gAgentCamera.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on return LLTool::handleMouseUp(x, y, mask); @@ -1276,6 +1296,7 @@ void LLToolPie::stopEditing() void LLToolPie::onMouseCaptureLost() { mMouseOutsideSlop = FALSE; + mMouseButtonDown = FALSE; handleMediaMouseUp(); } @@ -1444,8 +1465,6 @@ bool LLToolPie::handleMediaMouseUp() mMediaMouseCaptureID.setNull(); - setMouseCapture(FALSE); - result = true; } @@ -1508,7 +1527,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action) // True if we handled the event. -BOOL LLToolPie::pickRightMouseDownCallback() +BOOL LLToolPie::handleRightClickPick() { S32 x = mPick.mMousePt.mX; S32 y = mPick.mMousePt.mY; @@ -1630,10 +1649,136 @@ BOOL LLToolPie::pickRightMouseDownCallback() void LLToolPie::showVisualContextMenuEffect() { - // VEFFECT: ShowPie - LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); - effectp->setPositionGlobal(mPick.mPosGlobal); - effectp->setColor(LLColor4U(gAgent.getEffectColor())); - effectp->setDuration(0.25f); + // VEFFECT: ShowPie + LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); + effectp->setPositionGlobal(mPick.mPosGlobal); + effectp->setColor(LLColor4U(gAgent.getEffectColor())); + effectp->setDuration(0.25f); +} + + +LLVector3 intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius) +{ + // from http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter1.htm + LLVector3 sphere_to_ray_start_vec = ray_pt - sphere_center; + F32 B = 2.f * ray_dir * sphere_to_ray_start_vec; + F32 C = sphere_to_ray_start_vec.lengthSquared() - (sphere_radius * sphere_radius); + + LLVector3 intersection_pt; + + F32 discriminant = B*B - 4.f*C; + if (discriminant < 0.f) + { + // no intersection, compute closest intersection point + LLVector3 ray_to_sphere(sphere_to_ray_start_vec * -1.f); + + LLVector3 ray_orthogonal_dir = ray_pt + projected_vec(ray_to_sphere, ray_dir) - sphere_center; + ray_orthogonal_dir.normalize(); + intersection_pt = sphere_center + ray_orthogonal_dir * sphere_radius; + } + else + { + F32 t0 = (-B - sqrtf(discriminant)) / 2.f; + if (t0 > 0.f) + { + intersection_pt = ray_pt + ray_dir * t0; + } + else + { + F32 t1 = (-B + sqrtf(discriminant)) / 2.f; + intersection_pt = ray_pt + ray_dir * t1; + } + } + + return intersection_pt; + //LLVector3 ray_pt_to_center = sphere_center - ray_pt; + //F32 center_distance = ray_pt_to_center.normVec(); + + //F32 dot = ray_dir * ray_pt_to_center; + + //if (dot == 0.f) + //{ + // return LLVector3::zero; + //} + + //// point which ray hits plane centered on sphere origin, facing ray origin + //LLVector3 intersection_sphere_plane = ray_pt + (ray_dir * center_distance / dot); + //// vector from sphere origin to the point, normalized to sphere radius + //LLVector3 sphere_center_to_intersection = (intersection_sphere_plane - sphere_center) / sphere_radius; + + //F32 dist_squared = sphere_center_to_intersection.magVecSquared(); + //LLVector3 result; + + //if (dist_squared > 1.f) + //{ + // result = sphere_center_to_intersection; + // result.normVec(); + //} + //else + //{ + // result = sphere_center_to_intersection - ray_dir * sqrtf(1.f - dist_squared); + //} + + //return sphere_center + (result * sphere_radius); } + +void LLToolPie::startCameraSteering() +{ + mMouseSteerX = mMouseDownX; + mMouseSteerY = mMouseDownY; +} + +void LLToolPie::steerCameraWithMouse(S32 x, S32 y) +{ + const F32 MIN_ROTATION_RADIUS = 1.f; + + const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal); + const LLVector3 rotation_center = gAgent.getFrameAgent().getOrigin(); + const LLVector3 rotation_up_axis(gAgent.getReferenceUpVector()); + + LLVector3 pick_offset = pick_pos - rotation_center; + F32 up_distance = pick_offset * rotation_up_axis; + LLVector3 object_rotation_center = rotation_center + rotation_up_axis * up_distance; + F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, object_rotation_center), MIN_ROTATION_RADIUS, F32_MAX); + + LLVector3 screen_rotation_up_axis = rotation_up_axis - projected_vec(rotation_up_axis, LLViewerCamera::instance().getAtAxis()); + screen_rotation_up_axis.normalize(); + LLVector3 screen_rotation_left_axis = screen_rotation_up_axis % LLViewerCamera::instance().getAtAxis(); + + LLVector3 mouse_ray = gViewerWindow->mouseDirectionGlobal(x, y); + mouse_ray = mouse_ray - projected_vec(mouse_ray, rotation_up_axis); + mouse_ray.normalize(); + + LLVector3 old_mouse_ray = gViewerWindow->mouseDirectionGlobal(mMouseSteerX, mMouseSteerY); + old_mouse_ray = old_mouse_ray - projected_vec(old_mouse_ray, rotation_up_axis); + old_mouse_ray.normalize(); + + LLVector3 camera_pos = gAgentCamera.getCameraPositionAgent(); + LLVector3 camera_to_rotation_center = object_rotation_center - camera_pos; + LLVector3 adjusted_camera_pos = camera_pos + projected_vec(camera_to_rotation_center, rotation_up_axis); + LLVector3 rotation_fwd_axis = LLViewerCamera::instance().getAtAxis() - projected_vec(LLViewerCamera::instance().getAtAxis(), rotation_up_axis); + rotation_fwd_axis.normalize(); + F64 pick_dist = dist_vec(pick_pos, adjusted_camera_pos); + LLVector3 mouse_on_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (mouse_ray * pick_dist * 1.1f), + -1.f * mouse_ray, + object_rotation_center, + pick_distance_from_rotation_center); + LLVector3 old_mouse_on_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (old_mouse_ray * pick_dist * 1.1f), + -1.f * old_mouse_ray, + object_rotation_center, + pick_distance_from_rotation_center); + + + LLVector3 rotation_furthest_pt = object_rotation_center + pick_distance_from_rotation_center * rotation_fwd_axis; + F32 mouse_lateral_distance = llclamp(((mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); + F32 old_mouse_lateral_distance = llclamp(((old_mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); + + F32 yaw_angle = -1.f * asinf(mouse_lateral_distance); + F32 old_yaw_angle = -1.f * asinf(old_mouse_lateral_distance); + + // apply delta + gAgent.yaw(yaw_angle - old_yaw_angle); + mMouseSteerX = x; + mMouseSteerY = y; +} \ No newline at end of file diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index 77200a1da4..c46fdd6799 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -75,8 +75,8 @@ public: private: BOOL outsideSlop (S32 x, S32 y, S32 start_x, S32 start_y); - BOOL pickLeftMouseDownCallback(); - BOOL pickRightMouseDownCallback(); + BOOL handleLeftClickPick(); + BOOL handleRightClickPick(); BOOL useClickAction (MASK mask, LLViewerObject* object,LLViewerObject* parent); void showVisualContextMenuEffect(); @@ -88,12 +88,21 @@ private: BOOL handleTooltipLand(std::string line, std::string tooltip_msg); BOOL handleTooltipObject( LLViewerObject* hover_object, std::string line, std::string tooltip_msg); + void steerCameraWithMouse(S32 x, S32 y); + void startCameraSteering(); + private: - BOOL mGrabMouseButtonDown; + BOOL mMouseButtonDown; BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region + S32 mMouseDownX; + S32 mMouseDownY; + S32 mMouseSteerX; + S32 mMouseSteerY; + F32 mLastYaw; LLUUID mMediaMouseCaptureID; LLPickInfo mPick; LLPickInfo mHoverPick; + LLPickInfo mDragPick; LLPointer mClickActionObject; U8 mClickAction; LLSafeHandle mLeftClickSelection; -- cgit v1.2.3 From d48a0f38ac693d8a6e1a0d09c9d342cc2ab1d513 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Thu, 10 Mar 2011 20:21:01 -0800 Subject: SOCIAL-530 WIP When double clicking a nearby location I want my avatar to walk to that spot Turn off "autopilot cancelled" spam --- indra/newview/skins/minimal/xui/en/notification_visibility.xml | 3 +++ 1 file changed, 3 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/skins/minimal/xui/en/notification_visibility.xml b/indra/newview/skins/minimal/xui/en/notification_visibility.xml index 555d437c57..9d4836d328 100644 --- a/indra/newview/skins/minimal/xui/en/notification_visibility.xml +++ b/indra/newview/skins/minimal/xui/en/notification_visibility.xml @@ -22,6 +22,9 @@ + + + -- cgit v1.2.3 From 1c5d2516e0d926c8bd0bc2faad0f8ccaa2725339 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 11 Mar 2011 00:21:22 -0800 Subject: SOCIAL-530 WIP When double clicking a nearby location I want my avatar to walk to that spot can drag objects in front of avatar in opposite direction now reliably release mouse capture min rotation radius is now scaled by camera distance from rotation center --- indra/newview/lltoolpie.cpp | 125 ++++++++++++++++++-------------------------- indra/newview/lltoolpie.h | 6 +-- 2 files changed, 53 insertions(+), 78 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index e539174a4b..c52111ab54 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -102,7 +102,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) mMouseOutsideSlop = FALSE; mMouseDownX = x; mMouseDownY = y; - mLastYaw = 0.f; + //left mouse down always picks transparent mPick = gViewerWindow->pickImmediate(x, y, TRUE); mPick.mKeyMask = mask; @@ -612,11 +612,6 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) LLViewerObject* obj = mPick.getObject(); U8 click_action = final_click_action(obj); - if (hasMouseCapture()) - { - setMouseCapture(FALSE); - } - bool media_handled_click = handleMediaMouseUp() || LLViewerMediaFocus::getInstance()->getFocus(); bool mouse_moved = mMouseOutsideSlop; mMouseOutsideSlop = FALSE; @@ -634,6 +629,10 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) } } gViewerWindow->setCursor(UI_CURSOR_ARROW); + if (hasMouseCapture()) + { + setMouseCapture(FALSE); + } LLToolMgr::getInstance()->clearTransientTool(); gAgentCamera.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on @@ -1657,28 +1656,16 @@ void LLToolPie::showVisualContextMenuEffect() } -LLVector3 intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius) +bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius, LLVector3& intersection_pt) { - // from http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter1.htm + // do ray/sphere intersection by solving quadratic equation LLVector3 sphere_to_ray_start_vec = ray_pt - sphere_center; F32 B = 2.f * ray_dir * sphere_to_ray_start_vec; F32 C = sphere_to_ray_start_vec.lengthSquared() - (sphere_radius * sphere_radius); - LLVector3 intersection_pt; - F32 discriminant = B*B - 4.f*C; - if (discriminant < 0.f) - { - // no intersection, compute closest intersection point - LLVector3 ray_to_sphere(sphere_to_ray_start_vec * -1.f); - - LLVector3 ray_orthogonal_dir = ray_pt + projected_vec(ray_to_sphere, ray_dir) - sphere_center; - ray_orthogonal_dir.normalize(); - - intersection_pt = sphere_center + ray_orthogonal_dir * sphere_radius; - } - else - { + if (discriminant > 0.f) + { // intersection detected, now find closest one F32 t0 = (-B - sqrtf(discriminant)) / 2.f; if (t0 > 0.f) { @@ -1689,49 +1676,25 @@ LLVector3 intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& r F32 t1 = (-B + sqrtf(discriminant)) / 2.f; intersection_pt = ray_pt + ray_dir * t1; } + return true; } - return intersection_pt; - //LLVector3 ray_pt_to_center = sphere_center - ray_pt; - //F32 center_distance = ray_pt_to_center.normVec(); - - //F32 dot = ray_dir * ray_pt_to_center; - - //if (dot == 0.f) - //{ - // return LLVector3::zero; - //} - - //// point which ray hits plane centered on sphere origin, facing ray origin - //LLVector3 intersection_sphere_plane = ray_pt + (ray_dir * center_distance / dot); - //// vector from sphere origin to the point, normalized to sphere radius - //LLVector3 sphere_center_to_intersection = (intersection_sphere_plane - sphere_center) / sphere_radius; - - //F32 dist_squared = sphere_center_to_intersection.magVecSquared(); - //LLVector3 result; - - //if (dist_squared > 1.f) - //{ - // result = sphere_center_to_intersection; - // result.normVec(); - //} - //else - //{ - // result = sphere_center_to_intersection - ray_dir * sqrtf(1.f - dist_squared); - //} - - //return sphere_center + (result * sphere_radius); + return false; } void LLToolPie::startCameraSteering() { mMouseSteerX = mMouseDownX; mMouseSteerY = mMouseDownY; + const LLVector3 camera_to_rotation_center = gAgent.getFrameAgent().getOrigin() - LLViewerCamera::instance().getOrigin(); + const LLVector3 rotation_center_to_pick = gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin(); + + mClockwise = camera_to_rotation_center * rotation_center_to_pick < 0.f; } void LLToolPie::steerCameraWithMouse(S32 x, S32 y) { - const F32 MIN_ROTATION_RADIUS = 1.f; + const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f; const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mDragPick.mPosGlobal); const LLVector3 rotation_center = gAgent.getFrameAgent().getOrigin(); @@ -1740,7 +1703,8 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y) LLVector3 pick_offset = pick_pos - rotation_center; F32 up_distance = pick_offset * rotation_up_axis; LLVector3 object_rotation_center = rotation_center + rotation_up_axis * up_distance; - F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, object_rotation_center), MIN_ROTATION_RADIUS, F32_MAX); + F32 min_rotation_radius = MIN_ROTATION_RADIUS_FRACTION * dist_vec(rotation_center, LLViewerCamera::instance().getOrigin());; + F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, object_rotation_center), min_rotation_radius, F32_MAX); LLVector3 screen_rotation_up_axis = rotation_up_axis - projected_vec(rotation_up_axis, LLViewerCamera::instance().getAtAxis()); screen_rotation_up_axis.normalize(); @@ -1760,25 +1724,36 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y) LLVector3 rotation_fwd_axis = LLViewerCamera::instance().getAtAxis() - projected_vec(LLViewerCamera::instance().getAtAxis(), rotation_up_axis); rotation_fwd_axis.normalize(); F64 pick_dist = dist_vec(pick_pos, adjusted_camera_pos); - LLVector3 mouse_on_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (mouse_ray * pick_dist * 1.1f), - -1.f * mouse_ray, - object_rotation_center, - pick_distance_from_rotation_center); - LLVector3 old_mouse_on_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (old_mouse_ray * pick_dist * 1.1f), - -1.f * old_mouse_ray, - object_rotation_center, - pick_distance_from_rotation_center); - - - LLVector3 rotation_furthest_pt = object_rotation_center + pick_distance_from_rotation_center * rotation_fwd_axis; - F32 mouse_lateral_distance = llclamp(((mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); - F32 old_mouse_lateral_distance = llclamp(((old_mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); - - F32 yaw_angle = -1.f * asinf(mouse_lateral_distance); - F32 old_yaw_angle = -1.f * asinf(old_mouse_lateral_distance); - - // apply delta - gAgent.yaw(yaw_angle - old_yaw_angle); - mMouseSteerX = x; - mMouseSteerY = y; + + LLVector3 mouse_on_sphere; + bool mouse_hit_sphere = intersect_ray_with_sphere(adjusted_camera_pos + (mouse_ray * pick_dist * 1.1f), + -1.f * mouse_ray, + object_rotation_center, + pick_distance_from_rotation_center, + mouse_on_sphere); + + LLVector3 old_mouse_on_sphere; + intersect_ray_with_sphere(adjusted_camera_pos + (old_mouse_ray * pick_dist * 1.1f), + -1.f * old_mouse_ray, + object_rotation_center, + pick_distance_from_rotation_center, + old_mouse_on_sphere); + + if (mouse_hit_sphere) + { + + LLVector3 rotation_furthest_pt = object_rotation_center + pick_distance_from_rotation_center * rotation_fwd_axis; + F32 mouse_lateral_distance = llclamp(((mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); + F32 old_mouse_lateral_distance = llclamp(((old_mouse_on_sphere - rotation_furthest_pt) * screen_rotation_left_axis) / pick_distance_from_rotation_center, -1.f, 1.f); + + F32 yaw_angle = -1.f * asinf(mouse_lateral_distance); + F32 old_yaw_angle = -1.f * asinf(old_mouse_lateral_distance); + + F32 delta_angle = yaw_angle - old_yaw_angle; + if (mClockwise) delta_angle *= -1.f; + + gAgent.yaw(delta_angle); + mMouseSteerX = x; + mMouseSteerY = y; + } } \ No newline at end of file diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index c46fdd6799..26dcbd35e6 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -92,13 +92,13 @@ private: void startCameraSteering(); private: - BOOL mMouseButtonDown; - BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region + bool mMouseButtonDown; + bool mMouseOutsideSlop; // for this drag, has mouse moved outside slop region S32 mMouseDownX; S32 mMouseDownY; S32 mMouseSteerX; S32 mMouseSteerY; - F32 mLastYaw; + bool mClockwise; LLUUID mMediaMouseCaptureID; LLPickInfo mPick; LLPickInfo mHoverPick; -- cgit v1.2.3 From 34807845ab6c6440d17624e1cbf042472d25ce9e Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Fri, 11 Mar 2011 11:20:20 -0800 Subject: fixed avatar picker url fixed linux build --- indra/newview/app_settings/settings_minimal.xml | 2 +- indra/newview/lltoolpie.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml index 73c7c1e4bd..646f5e85bc 100644 --- a/indra/newview/app_settings/settings_minimal.xml +++ b/indra/newview/app_settings/settings_minimal.xml @@ -323,7 +323,7 @@ Type String Value - http://lecs-static-secondlife-com.s3.amazonaws.com/viewer/agni/avatars.html + http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/damballah/avatars.html LogInventoryDecline diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index c52111ab54..c98feca91c 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1756,4 +1756,4 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y) mMouseSteerX = x; mMouseSteerY = y; } -} \ No newline at end of file +} -- cgit v1.2.3 From ddf8ef0ad16107eaac1bf928e3f8fd2ebc4c70c7 Mon Sep 17 00:00:00 2001 From: Eli Linden Date: Fri, 11 Mar 2011 11:22:20 -0800 Subject: INTL-25 WIP Portuguese translation --- .../skins/minimal/xui/pt/floater_camera.xml | 65 ++++++++++++++++ .../skins/minimal/xui/pt/floater_help_browser.xml | 9 +++ .../skins/minimal/xui/pt/floater_nearby_chat.xml | 4 + .../skins/minimal/xui/pt/inspect_avatar.xml | 24 ++++++ .../skins/minimal/xui/pt/inspect_object.xml | 41 +++++++++++ .../minimal/xui/pt/menu_add_wearable_gear.xml | 6 ++ .../skins/minimal/xui/pt/menu_attachment_other.xml | 17 +++++ .../skins/minimal/xui/pt/menu_attachment_self.xml | 16 ++++ .../skins/minimal/xui/pt/menu_avatar_icon.xml | 7 ++ .../skins/minimal/xui/pt/menu_avatar_other.xml | 16 ++++ .../skins/minimal/xui/pt/menu_avatar_self.xml | 31 ++++++++ .../skins/minimal/xui/pt/menu_bottomtray.xml | 17 +++++ .../skins/minimal/xui/pt/menu_cof_attachment.xml | 4 + .../skins/minimal/xui/pt/menu_cof_body_part.xml | 5 ++ .../skins/minimal/xui/pt/menu_cof_clothing.xml | 6 ++ .../newview/skins/minimal/xui/pt/menu_cof_gear.xml | 5 ++ indra/newview/skins/minimal/xui/pt/menu_edit.xml | 12 +++ .../skins/minimal/xui/pt/menu_favorites.xml | 10 +++ .../skins/minimal/xui/pt/menu_gesture_gear.xml | 10 +++ .../skins/minimal/xui/pt/menu_group_plus.xml | 5 ++ .../skins/minimal/xui/pt/menu_hide_navbar.xml | 6 ++ .../skins/minimal/xui/pt/menu_im_well_button.xml | 4 + .../skins/minimal/xui/pt/menu_imchiclet_adhoc.xml | 4 + .../skins/minimal/xui/pt/menu_imchiclet_group.xml | 6 ++ .../skins/minimal/xui/pt/menu_imchiclet_p2p.xml | 7 ++ .../minimal/xui/pt/menu_inspect_avatar_gear.xml | 17 +++++ .../minimal/xui/pt/menu_inspect_object_gear.xml | 18 +++++ .../minimal/xui/pt/menu_inspect_self_gear.xml | 10 +++ .../minimal/xui/pt/menu_inv_offer_chiclet.xml | 4 + .../skins/minimal/xui/pt/menu_inventory.xml | 86 ++++++++++++++++++++++ .../skins/minimal/xui/pt/menu_inventory_add.xml | 33 +++++++++ .../minimal/xui/pt/menu_inventory_gear_default.xml | 16 ++++ indra/newview/skins/minimal/xui/pt/menu_land.xml | 9 +++ .../newview/skins/minimal/xui/pt/menu_landmark.xml | 7 ++ indra/newview/skins/minimal/xui/pt/menu_login.xml | 24 ++++++ .../newview/skins/minimal/xui/pt/menu_mini_map.xml | 11 +++ indra/newview/skins/minimal/xui/pt/menu_navbar.xml | 11 +++ .../skins/minimal/xui/pt/menu_nearby_chat.xml | 9 +++ .../xui/pt/menu_notification_well_button.xml | 4 + indra/newview/skins/minimal/xui/pt/menu_object.xml | 29 ++++++++ .../skins/minimal/xui/pt/menu_object_icon.xml | 5 ++ .../skins/minimal/xui/pt/menu_outfit_gear.xml | 27 +++++++ .../skins/minimal/xui/pt/menu_outfit_tab.xml | 9 +++ .../skins/minimal/xui/pt/menu_participant_list.xml | 21 ++++++ .../xui/pt/menu_people_friends_view_sort.xml | 8 ++ .../skins/minimal/xui/pt/menu_people_groups.xml | 8 ++ .../xui/pt/menu_people_groups_view_sort.xml | 5 ++ .../skins/minimal/xui/pt/menu_people_nearby.xml | 13 ++++ .../xui/pt/menu_people_nearby_multiselect.xml | 10 +++ .../xui/pt/menu_people_nearby_view_sort.xml | 8 ++ .../xui/pt/menu_people_recent_view_sort.xml | 7 ++ indra/newview/skins/minimal/xui/pt/menu_picks.xml | 8 ++ .../skins/minimal/xui/pt/menu_picks_plus.xml | 5 ++ indra/newview/skins/minimal/xui/pt/menu_place.xml | 7 ++ .../skins/minimal/xui/pt/menu_place_add_button.xml | 5 ++ .../minimal/xui/pt/menu_places_gear_folder.xml | 15 ++++ .../minimal/xui/pt/menu_places_gear_landmark.xml | 18 +++++ .../skins/minimal/xui/pt/menu_profile_overflow.xml | 12 +++ .../skins/minimal/xui/pt/menu_save_outfit.xml | 5 ++ .../skins/minimal/xui/pt/menu_script_chiclet.xml | 4 + indra/newview/skins/minimal/xui/pt/menu_slurl.xml | 6 ++ .../minimal/xui/pt/menu_teleport_history_gear.xml | 6 ++ .../minimal/xui/pt/menu_teleport_history_item.xml | 6 ++ .../minimal/xui/pt/menu_teleport_history_tab.xml | 5 ++ .../skins/minimal/xui/pt/menu_text_editor.xml | 8 ++ .../skins/minimal/xui/pt/menu_topinfobar.xml | 7 ++ .../skins/minimal/xui/pt/menu_url_agent.xml | 6 ++ .../skins/minimal/xui/pt/menu_url_group.xml | 6 ++ .../newview/skins/minimal/xui/pt/menu_url_http.xml | 7 ++ .../skins/minimal/xui/pt/menu_url_inventory.xml | 6 ++ .../newview/skins/minimal/xui/pt/menu_url_map.xml | 6 ++ .../skins/minimal/xui/pt/menu_url_objectim.xml | 8 ++ .../skins/minimal/xui/pt/menu_url_parcel.xml | 6 ++ .../skins/minimal/xui/pt/menu_url_slapp.xml | 5 ++ .../skins/minimal/xui/pt/menu_url_slurl.xml | 7 ++ .../skins/minimal/xui/pt/menu_url_teleport.xml | 6 ++ indra/newview/skins/minimal/xui/pt/menu_viewer.xml | 14 ++++ .../minimal/xui/pt/menu_wearable_list_item.xml | 14 ++++ .../skins/minimal/xui/pt/menu_wearing_gear.xml | 5 ++ .../skins/minimal/xui/pt/menu_wearing_tab.xml | 6 ++ .../minimal/xui/pt/panel_adhoc_control_panel.xml | 14 ++++ .../skins/minimal/xui/pt/panel_bottomtray.xml | 39 ++++++++++ .../minimal/xui/pt/panel_im_control_panel.xml | 29 ++++++++ indra/newview/skins/minimal/xui/pt/panel_login.xml | 40 ++++++++++ .../skins/minimal/xui/pt/panel_navigation_bar.xml | 18 +++++ .../newview/skins/minimal/xui/pt/panel_people.xml | 71 ++++++++++++++++++ .../minimal/xui/pt/panel_side_tray_tab_caption.xml | 7 ++ .../skins/minimal/xui/pt/panel_status_bar.xml | 33 +++++++++ 88 files changed, 1216 insertions(+) create mode 100644 indra/newview/skins/minimal/xui/pt/floater_camera.xml create mode 100644 indra/newview/skins/minimal/xui/pt/floater_help_browser.xml create mode 100644 indra/newview/skins/minimal/xui/pt/floater_nearby_chat.xml create mode 100644 indra/newview/skins/minimal/xui/pt/inspect_avatar.xml create mode 100644 indra/newview/skins/minimal/xui/pt/inspect_object.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_add_wearable_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_attachment_other.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_attachment_self.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_avatar_icon.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_avatar_other.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_avatar_self.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_bottomtray.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_cof_attachment.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_cof_body_part.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_cof_clothing.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_cof_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_edit.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_favorites.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_gesture_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_group_plus.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_hide_navbar.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_im_well_button.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_imchiclet_adhoc.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_imchiclet_group.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_imchiclet_p2p.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inspect_object_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inspect_self_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inv_offer_chiclet.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inventory.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inventory_add.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_inventory_gear_default.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_land.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_landmark.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_login.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_mini_map.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_navbar.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_nearby_chat.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_notification_well_button.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_object.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_object_icon.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_outfit_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_outfit_tab.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_participant_list.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_friends_view_sort.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_groups.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_groups_view_sort.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_nearby.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_nearby_multiselect.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_nearby_view_sort.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_people_recent_view_sort.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_picks.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_picks_plus.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_place.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_place_add_button.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_places_gear_folder.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_places_gear_landmark.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_profile_overflow.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_save_outfit.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_script_chiclet.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_slurl.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_teleport_history_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_teleport_history_item.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_teleport_history_tab.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_text_editor.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_topinfobar.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_agent.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_group.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_http.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_inventory.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_map.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_objectim.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_parcel.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_slapp.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_slurl.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_url_teleport.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_viewer.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_wearable_list_item.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_wearing_gear.xml create mode 100644 indra/newview/skins/minimal/xui/pt/menu_wearing_tab.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_adhoc_control_panel.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_login.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_navigation_bar.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_people.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_side_tray_tab_caption.xml create mode 100644 indra/newview/skins/minimal/xui/pt/panel_status_bar.xml (limited to 'indra/newview') diff --git a/indra/newview/skins/minimal/xui/pt/floater_camera.xml b/indra/newview/skins/minimal/xui/pt/floater_camera.xml new file mode 100644 index 0000000000..4f3729c623 --- /dev/null +++ b/indra/newview/skins/minimal/xui/pt/floater_camera.xml @@ -0,0 +1,65 @@ + + + + Girar a Câmera ao redor do Foco + + + Aproximar a Câmera in direção ao Foco + + + Mover a Câmera para Cima e para Baixo, para a Esquerda e para a Direita + + + Modos de câmera + + + Pan zoom orbital + + + Ângulos predefinidos + + + Visualizar objeto + + + + + + Vista frontal + + + + + Vista lateral + + + + + Vista de trás + + + + + + + Vista de objetos + + + + + Vista do mouse + + + + + + + + + + +