SH-915 WIP - LLAgentPilot class cleanup, added interpolation for camera motion
parent
54bf80bf45
commit
49b8f8af02
|
|
@ -41,9 +41,6 @@
|
|||
|
||||
LLAgentPilot gAgentPilot;
|
||||
|
||||
BOOL LLAgentPilot::sLoop = TRUE;
|
||||
BOOL LLAgentPilot::sReplaySession = FALSE;
|
||||
|
||||
LLAgentPilot::LLAgentPilot() :
|
||||
mNumRuns(-1),
|
||||
mQuitAfterRuns(FALSE),
|
||||
|
|
@ -52,7 +49,9 @@ LLAgentPilot::LLAgentPilot() :
|
|||
mStarted(FALSE),
|
||||
mPlaying(FALSE),
|
||||
mCurrentAction(0),
|
||||
mOverrideCamera(FALSE)
|
||||
mOverrideCamera(FALSE),
|
||||
mLoop(TRUE),
|
||||
mReplaySession(FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -266,7 +265,7 @@ void LLAgentPilot::startPlayback()
|
|||
LLViewerJoystick::getInstance()->toggleFlycam();
|
||||
}
|
||||
gAgent.startAutoPilotGlobal(mActions[0].mTarget);
|
||||
moveCamera(mActions[0]);
|
||||
moveCamera();
|
||||
mStarted = FALSE;
|
||||
}
|
||||
else
|
||||
|
|
@ -287,22 +286,51 @@ void LLAgentPilot::stopPlayback()
|
|||
gAgent.stopAutoPilot();
|
||||
}
|
||||
|
||||
if (sReplaySession)
|
||||
if (mReplaySession)
|
||||
{
|
||||
LLAppViewer::instance()->forceQuit();
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgentPilot::moveCamera(Action& action)
|
||||
void LLAgentPilot::moveCamera()
|
||||
{
|
||||
if (!getOverrideCamera())
|
||||
return;
|
||||
|
||||
if (mCurrentAction<mActions.count())
|
||||
{
|
||||
S32 start_index = llmax(mCurrentAction-1,0);
|
||||
S32 end_index = mCurrentAction;
|
||||
F32 t = 0.0;
|
||||
F32 timedelta = mActions[end_index].mTime - mActions[start_index].mTime;
|
||||
F32 tickelapsed = mTimer.getElapsedTimeF32()-mActions[start_index].mTime;
|
||||
if (timedelta > 0.0)
|
||||
{
|
||||
t = tickelapsed/timedelta;
|
||||
}
|
||||
|
||||
if ((t<0.0)||(t>1.0))
|
||||
{
|
||||
llwarns << "mCurrentAction is invalid, t = " << t << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
Action& start = mActions[start_index];
|
||||
Action& end = mActions[end_index];
|
||||
|
||||
F32 view = lerp(start.mCameraView, end.mCameraView, t);
|
||||
LLVector3 origin = lerp(start.mCameraOrigin, end.mCameraOrigin, t);
|
||||
LLQuaternion start_quat(start.mCameraXAxis, start.mCameraYAxis, start.mCameraZAxis);
|
||||
LLQuaternion end_quat(end.mCameraXAxis, end.mCameraYAxis, end.mCameraZAxis);
|
||||
LLQuaternion quat = nlerp(t, start_quat, end_quat);
|
||||
LLMatrix3 mat(quat);
|
||||
|
||||
LLViewerCamera::getInstance()->setView(action.mCameraView);
|
||||
LLViewerCamera::getInstance()->setOrigin(action.mCameraOrigin);
|
||||
LLViewerCamera::getInstance()->mXAxis = LLVector3(action.mCameraXAxis);
|
||||
LLViewerCamera::getInstance()->mYAxis = LLVector3(action.mCameraYAxis);
|
||||
LLViewerCamera::getInstance()->mZAxis = LLVector3(action.mCameraZAxis);
|
||||
LLViewerCamera::getInstance()->setView(view);
|
||||
LLViewerCamera::getInstance()->setOrigin(origin);
|
||||
LLViewerCamera::getInstance()->mXAxis = LLVector3(mat.mMatrix[0]);
|
||||
LLViewerCamera::getInstance()->mYAxis = LLVector3(mat.mMatrix[1]);
|
||||
LLViewerCamera::getInstance()->mZAxis = LLVector3(mat.mMatrix[2]);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAgentPilot::updateTarget()
|
||||
|
|
@ -336,13 +364,13 @@ void LLAgentPilot::updateTarget()
|
|||
if (mCurrentAction < mActions.count())
|
||||
{
|
||||
gAgent.startAutoPilotGlobal(mActions[mCurrentAction].mTarget);
|
||||
moveCamera(mActions[mCurrentAction]);
|
||||
moveCamera();
|
||||
}
|
||||
else
|
||||
{
|
||||
stopPlayback();
|
||||
mNumRuns--;
|
||||
if (sLoop)
|
||||
if (mLoop)
|
||||
{
|
||||
if ((mNumRuns < 0) || (mNumRuns > 0))
|
||||
{
|
||||
|
|
@ -377,29 +405,8 @@ void LLAgentPilot::updateTarget()
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLAgentPilot::startRecord(void *)
|
||||
void LLAgentPilot::addWaypoint()
|
||||
{
|
||||
gAgentPilot.startRecord();
|
||||
addAction(STRAIGHT);
|
||||
}
|
||||
|
||||
void LLAgentPilot::saveRecord(void *)
|
||||
{
|
||||
gAgentPilot.stopRecord();
|
||||
}
|
||||
|
||||
void LLAgentPilot::addWaypoint(void *)
|
||||
{
|
||||
gAgentPilot.addAction(STRAIGHT);
|
||||
}
|
||||
|
||||
void LLAgentPilot::startPlayback(void *)
|
||||
{
|
||||
gAgentPilot.mNumRuns = -1;
|
||||
gAgentPilot.startPlayback();
|
||||
}
|
||||
|
||||
void LLAgentPilot::stopPlayback(void *)
|
||||
{
|
||||
gAgentPilot.stopPlayback();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,24 +60,34 @@ public:
|
|||
void startPlayback();
|
||||
void stopPlayback();
|
||||
|
||||
|
||||
bool isRecording() { return mRecording; }
|
||||
bool isPlaying() { return mPlaying; }
|
||||
bool getOverrideCamera() { return mOverrideCamera; }
|
||||
|
||||
void updateTarget();
|
||||
|
||||
static void startRecord(void *);
|
||||
static void addWaypoint(void *);
|
||||
static void saveRecord(void *);
|
||||
static void startPlayback(void *);
|
||||
static void stopPlayback(void *);
|
||||
static BOOL sLoop;
|
||||
static BOOL sReplaySession;
|
||||
void addWaypoint();
|
||||
void moveCamera();
|
||||
|
||||
void setReplaySession(BOOL new_val) { mReplaySession = new_val; }
|
||||
BOOL getReplaySession() { return mReplaySession; }
|
||||
|
||||
void setLoop(BOOL new_val) { mLoop = new_val; }
|
||||
BOOL getLoop() { return mLoop; }
|
||||
|
||||
void setQuitAfterRuns(BOOL quit_val) { mQuitAfterRuns = quit_val; }
|
||||
void setNumRuns(S32 num_runs) { mNumRuns = num_runs; }
|
||||
|
||||
private:
|
||||
|
||||
|
||||
|
||||
BOOL mLoop;
|
||||
BOOL mReplaySession;
|
||||
|
||||
S32 mNumRuns;
|
||||
BOOL mQuitAfterRuns;
|
||||
private:
|
||||
|
||||
void setAutopilotTarget(const S32 id);
|
||||
|
||||
BOOL mRecording;
|
||||
|
|
@ -106,7 +116,6 @@ private:
|
|||
LLDynamicArray<Action> mActions;
|
||||
LLTimer mTimer;
|
||||
|
||||
void moveCamera(Action& action);
|
||||
};
|
||||
|
||||
extern LLAgentPilot gAgentPilot;
|
||||
|
|
|
|||
|
|
@ -468,8 +468,8 @@ static void settings_to_globals()
|
|||
LLSelectMgr::sRenderHiddenSelections = gSavedSettings.getBOOL("RenderHiddenSelections");
|
||||
LLSelectMgr::sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius");
|
||||
|
||||
gAgentPilot.mNumRuns = gSavedSettings.getS32("StatsNumRuns");
|
||||
gAgentPilot.mQuitAfterRuns = gSavedSettings.getBOOL("StatsQuitAfterRuns");
|
||||
gAgentPilot.setNumRuns(gSavedSettings.getS32("StatsNumRuns"));
|
||||
gAgentPilot.setQuitAfterRuns(gSavedSettings.getBOOL("StatsQuitAfterRuns"));
|
||||
gAgent.setHideGroupTitle(gSavedSettings.getBOOL("RenderHideGroupTitle"));
|
||||
|
||||
gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
|
||||
|
|
@ -2289,7 +2289,7 @@ bool LLAppViewer::initConfiguration()
|
|||
|
||||
if (clp.hasOption("replaysession"))
|
||||
{
|
||||
LLAgentPilot::sReplaySession = TRUE;
|
||||
gAgentPilot.setReplaySession(TRUE);
|
||||
}
|
||||
|
||||
if (clp.hasOption("nonotifications"))
|
||||
|
|
@ -4224,7 +4224,7 @@ void LLAppViewer::idle()
|
|||
{
|
||||
if (gAgentPilot.isPlaying() && gAgentPilot.getOverrideCamera())
|
||||
{
|
||||
// camera positioning handled inside gAgentPilot.
|
||||
gAgentPilot.moveCamera();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1989,7 +1989,7 @@ bool idle_startup()
|
|||
}
|
||||
|
||||
// Start automatic replay if the flag is set.
|
||||
if (gSavedSettings.getBOOL("StatsAutoRun") || LLAgentPilot::sReplaySession)
|
||||
if (gSavedSettings.getBOOL("StatsAutoRun") || gAgentPilot.getReplaySession())
|
||||
{
|
||||
LLUUID id;
|
||||
LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -1901,19 +1901,20 @@ class LLAdvancedAgentPilot : public view_listener_t
|
|||
std::string command = userdata.asString();
|
||||
if ("start playback" == command)
|
||||
{
|
||||
LLAgentPilot::startPlayback(NULL);
|
||||
gAgentPilot.setNumRuns(-1);
|
||||
gAgentPilot.startPlayback();
|
||||
}
|
||||
else if ("stop playback" == command)
|
||||
{
|
||||
LLAgentPilot::stopPlayback(NULL);
|
||||
gAgentPilot.stopPlayback();
|
||||
}
|
||||
else if ("start record" == command)
|
||||
{
|
||||
LLAgentPilot::startRecord(NULL);
|
||||
gAgentPilot.startRecord();
|
||||
}
|
||||
else if ("stop record" == command)
|
||||
{
|
||||
LLAgentPilot::saveRecord(NULL);
|
||||
gAgentPilot.stopRecord();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -1931,7 +1932,7 @@ class LLAdvancedToggleAgentPilotLoop : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
LLAgentPilot::sLoop = !(LLAgentPilot::sLoop);
|
||||
gAgentPilot.setLoop(!gAgentPilot.getLoop());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
@ -1940,7 +1941,7 @@ class LLAdvancedCheckAgentPilotLoop : public view_listener_t
|
|||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
bool new_value = LLAgentPilot::sLoop;
|
||||
bool new_value = gAgentPilot.getLoop();
|
||||
return new_value;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue