MAINT-8478 Unable to unzoom camera after zooming object behind draw distance
parent
5aee1efc0e
commit
a902b360f2
|
|
@ -76,6 +76,8 @@ const F32 AVATAR_ZOOM_MIN_Y_FACTOR = 0.7f;
|
|||
const F32 AVATAR_ZOOM_MIN_Z_FACTOR = 1.15f;
|
||||
|
||||
const F32 MAX_CAMERA_DISTANCE_FROM_AGENT = 50.f;
|
||||
const F32 MAX_CAMERA_DISTANCE_FROM_OBJECT = 496.f;
|
||||
const F32 CAMERA_FUDGE_FROM_OBJECT = 16.f;
|
||||
|
||||
const F32 MAX_CAMERA_SMOOTH_DISTANCE = 50.0f;
|
||||
|
||||
|
|
@ -738,10 +740,7 @@ F32 LLAgentCamera::getCameraZoomFraction()
|
|||
else
|
||||
{
|
||||
F32 min_zoom;
|
||||
const F32 DIST_FUDGE = 16.f; // meters
|
||||
F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
|
||||
LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
|
||||
MAX_CAMERA_DISTANCE_FROM_AGENT);
|
||||
F32 max_zoom = getCameraMaxZoomDistance();
|
||||
|
||||
F32 distance = (F32)mCameraFocusOffsetTarget.magVec();
|
||||
if (mFocusObject.notNull())
|
||||
|
|
@ -787,23 +786,17 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction)
|
|||
else
|
||||
{
|
||||
F32 min_zoom = LAND_MIN_ZOOM;
|
||||
const F32 DIST_FUDGE = 16.f; // meters
|
||||
F32 max_zoom = llmin(mDrawDistance - DIST_FUDGE,
|
||||
LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE,
|
||||
MAX_CAMERA_DISTANCE_FROM_AGENT);
|
||||
F32 max_zoom = getCameraMaxZoomDistance();
|
||||
|
||||
if (mFocusObject.notNull())
|
||||
{
|
||||
if (mFocusObject.notNull())
|
||||
if (mFocusObject->isAvatar())
|
||||
{
|
||||
if (mFocusObject->isAvatar())
|
||||
{
|
||||
min_zoom = AVATAR_MIN_ZOOM;
|
||||
}
|
||||
else
|
||||
{
|
||||
min_zoom = OBJECT_MIN_ZOOM;
|
||||
}
|
||||
min_zoom = AVATAR_MIN_ZOOM;
|
||||
}
|
||||
else
|
||||
{
|
||||
min_zoom = OBJECT_MIN_ZOOM;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -909,10 +902,7 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)
|
|||
|
||||
new_distance = llmax(new_distance, min_zoom);
|
||||
|
||||
// Don't zoom too far back
|
||||
const F32 DIST_FUDGE = 16.f; // meters
|
||||
F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
|
||||
LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
|
||||
F32 max_distance = getCameraMaxZoomDistance();
|
||||
|
||||
max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance. MAINT-3154
|
||||
|
||||
|
|
@ -978,10 +968,7 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters)
|
|||
|
||||
new_distance = llmax(new_distance, min_zoom);
|
||||
|
||||
// Don't zoom too far back
|
||||
const F32 DIST_FUDGE = 16.f; // meters
|
||||
F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,
|
||||
LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE );
|
||||
F32 max_distance = getCameraMaxZoomDistance();
|
||||
|
||||
if (new_distance > max_distance)
|
||||
{
|
||||
|
|
@ -1946,6 +1933,13 @@ LLVector3 LLAgentCamera::getCameraOffsetInitial()
|
|||
return convert_from_llsd<LLVector3>(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, "");
|
||||
}
|
||||
|
||||
F32 LLAgentCamera::getCameraMaxZoomDistance()
|
||||
{
|
||||
// Ignore "DisableCameraConstraints", we don't want to be out of draw range when we focus onto objects or avatars
|
||||
return llmin(MAX_CAMERA_DISTANCE_FROM_OBJECT,
|
||||
mDrawDistance - 1, // convenience, don't hit draw limit when focusing on something
|
||||
LLWorld::getInstance()->getRegionWidthInMeters() - CAMERA_FUDGE_FROM_OBJECT);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// handleScrollWheel()
|
||||
|
|
|
|||
|
|
@ -112,6 +112,8 @@ public:
|
|||
private:
|
||||
/** Determines default camera offset depending on the current camera preset */
|
||||
LLVector3 getCameraOffsetInitial();
|
||||
/** Determines maximum camera distance from target for mouselook, opposite to LAND_MIN_ZOOM */
|
||||
F32 getCameraMaxZoomDistance();
|
||||
|
||||
/** Camera preset in Third Person Mode */
|
||||
ECameraPreset mCameraPreset;
|
||||
|
|
|
|||
Loading…
Reference in New Issue