Sync llviewerjoystick with upstream sources.

Replaces old constant of dividing by 3 with debug setting for multiplying: FlycamBuildModeScale
Relicenses to lgpl.
This commit is contained in:
Inusaito Sayori
2014-05-13 21:27:18 -04:00
parent aa6a57be63
commit a78c6072ce
3 changed files with 92 additions and 64 deletions

View File

@@ -8410,6 +8410,17 @@ This should be as low as possible, but too low may break functionality</string>
<key>Value</key>
<real>1.0</real>
</map>
<key>FlycamBuildModeScale</key>
<map>
<key>Comment</key>
<string>Scale factor to apply to flycam movements when in build mode.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>F32</string>
<key>Value</key>
<real>0.3333333</real>
</map>
<key>FlycamFeathering</key>
<map>
<key>Comment</key>

View File

@@ -2,31 +2,25 @@
* @file llviewerjoystick.cpp
* @brief Joystick / NDOF device functionality.
*
* $LicenseInfo:firstyear=2002&license=viewergpl$
*
* Copyright (c) 2002-2009, Linden Research, Inc.
*
* $LicenseInfo:firstyear=2002&license=viewerlgpl$
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -57,9 +51,6 @@
#define RY_I 5
#define RZ_I 3
// flycam translations in build mode should be reduced
const F32 BUILDMODE_FLYCAM_T_SCALE = 3.f;
// minimum time after setting away state before coming back
const F32 MIN_AFK_TIME = 2.f;
@@ -163,7 +154,7 @@ LLViewerJoystick::LLViewerJoystick()
memset(mBtn, 0, sizeof(mBtn));
// factor in bandwidth? bandwidth = gViewerStats->mKBitStat
mPerfScale = 4000.f / gSysCPU.getMHz();
mPerfScale = 4000.f / gSysCPU.getMHz(); // hmm. why?
}
// -----------------------------------------------------------------------------
@@ -283,7 +274,7 @@ void LLViewerJoystick::terminate()
ndof_libcleanup();
llinfos << "Terminated connection with NDOF device." << llendl;
mDriverState = JDS_UNINITIALIZED;
#endif
}
@@ -421,14 +412,41 @@ void LLViewerJoystick::agentFly(F32 inc)
}
// -----------------------------------------------------------------------------
void LLViewerJoystick::agentRotate(F32 pitch_inc, F32 yaw_inc)
void LLViewerJoystick::agentPitch(F32 pitch_inc)
{
LLQuaternion new_rot;
pitch_inc = gAgent.clampPitchToLimits(-pitch_inc);
const LLQuaternion qx(pitch_inc, gAgent.getLeftAxis());
const LLQuaternion qy(-yaw_inc, gAgent.getReferenceUpVector());
new_rot.setQuat(qx * qy);
gAgent.rotate(new_rot);
if (pitch_inc < 0)
{
gAgent.setControlFlags(AGENT_CONTROL_PITCH_POS);
}
else if (pitch_inc > 0)
{
gAgent.setControlFlags(AGENT_CONTROL_PITCH_NEG);
}
gAgent.pitch(-pitch_inc);
}
// -----------------------------------------------------------------------------
void LLViewerJoystick::agentYaw(F32 yaw_inc)
{
// Cannot steer some vehicles in mouselook if the script grabs the controls
if (gAgentCamera.cameraMouselook() && !gSavedSettings.getBOOL("JoystickMouselookYaw"))
{
gAgent.rotate(-yaw_inc, gAgent.getReferenceUpVector());
}
else
{
if (yaw_inc < 0)
{
gAgent.setControlFlags(AGENT_CONTROL_YAW_POS);
}
else if (yaw_inc > 0)
{
gAgent.setControlFlags(AGENT_CONTROL_YAW_NEG);
}
gAgent.yaw(-yaw_inc);
}
}
// -----------------------------------------------------------------------------
@@ -765,11 +783,13 @@ void LLViewerJoystick::moveAvatar(bool reset)
{
if (gAgent.getFlying())
{
agentRotate(eff_rx, eff_ry);
agentPitch(eff_rx);
agentYaw(eff_ry);
}
else
{
agentRotate(eff_rx, 2.f * eff_ry);
agentPitch(eff_rx);
agentYaw(2.f * eff_ry);
}
}
}
@@ -778,7 +798,8 @@ void LLViewerJoystick::moveAvatar(bool reset)
agentSlide(sDelta[X_I]); // move sideways
agentFly(sDelta[Y_I]); // up/down & crouch
agentPush(sDelta[Z_I]); // forward/back
agentRotate(sDelta[RX_I], sDelta[RY_I]); // pitch & turn
agentPitch(sDelta[RX_I]); // pitch
agentYaw(sDelta[RY_I]); // turn
}
}
@@ -874,14 +895,15 @@ void LLViewerJoystick::moveFlycam(bool reset)
cur_delta[i] = llmin(cur_delta[i]+dead_zone[i], 0.f);
}
// we need smaller camera movements in build mode
// We may want to scale camera movements up or down in build mode.
// NOTE: this needs to remain after the deadzone calculation, otherwise
// we have issues with flycam "jumping" when the build dialog is opened/closed -Nyx
if (in_build_mode)
{
if (i == X_I || i == Y_I || i == Z_I)
{
cur_delta[i] /= BUILDMODE_FLYCAM_T_SCALE;
static LLCachedControl<F32> build_mode_scale(gSavedSettings,"FlycamBuildModeScale", 1.0);
cur_delta[i] *= build_mode_scale;
}
}
@@ -976,9 +998,8 @@ bool LLViewerJoystick::toggleFlycam()
}
else
{
// we are in build mode, exiting from the flycam mode: since we are
// going to keep the flycam POV for the main camera until the avatar
// moves, we need to track this situation.
// Exiting from the flycam mode: since we are going to keep the flycam POV for
// the main camera until the avatar moves, we need to track this situation.
setCameraNeedsUpdate(false);
setNeedsReset(true);
}

View File

@@ -2,31 +2,25 @@
* @file llviewerjoystick.h
* @brief Viewer joystick / NDOF device functionality.
*
* $LicenseInfo:firstyear=2001&license=viewergpl$
*
* Copyright (c) 2001-2009, Linden Research, Inc.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* The source code in this file ("Source Code") is provided by Linden Lab
* to you under the terms of the GNU General Public License, version 2.0
* ("GPL"), unless you have obtained a separate licensing agreement
* ("Other License"), formally executed by you and Linden Lab. Terms of
* the GPL can be found in doc/GPL-license.txt in this distribution, or
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
* Copyright (C) 2010, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* There are special exceptions to the terms and conditions of the GPL as
* it is applied to this Source Code. View the full text of the exception
* in the file doc/FLOSS-exception.txt in this software distribution, or
* online at
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* By copying, modifying or distributing this software, you acknowledge
* that you have read and understood your obligations described above,
* and agree to abide by those obligations.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
* COMPLETENESS OR PERFORMANCE.
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -56,6 +50,8 @@ public:
virtual ~LLViewerJoystick();
void init(bool autoenable);
void terminate();
void updateStatus();
void scanJoystick();
void moveObjects(bool reset = false);
@@ -76,12 +72,12 @@ public:
protected:
void updateEnabled(bool autoenable);
void terminate();
void handleRun(F32 inc);
void agentSlide(F32 inc);
void agentPush(F32 inc);
void agentFly(F32 inc);
void agentRotate(F32 pitch_inc, F32 turn_inc);
void agentPitch(F32 pitch_inc);
void agentYaw(F32 yaw_inc);
void agentJump();
void resetDeltas(S32 axis[]);
#if LIB_NDOF