diff --git a/indra/newview/aoengine.cpp b/indra/newview/aoengine.cpp
index c9bab7040e..a10a315f11 100644
--- a/indra/newview/aoengine.cpp
+++ b/indra/newview/aoengine.cpp
@@ -39,6 +39,7 @@
#include "llinventoryobserver.h"
#include "llstring.h"
#include "llvfs.h"
+#include "llviewercontrol.h"
#include "llviewerinventory.h"
// is there a global define for this folder somewhere?
@@ -392,10 +393,14 @@ void AOEngine::cycle(eCycleMode cycleMode)
{
LLUUID motion=mCurrentSet->getMotion();
- if(motion==ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
+ // assume stand if no motion is registered, happens after login when the avatar hasn't moved at all yet
+ if(motion.isNull())
+ motion=ANIM_AGENT_STAND;
+ // do not cycle if we're sitting and sit-override is off
+ else if(motion==ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
return;
-
- if(motion==ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
+ // do not cycle if we're standing and mouselook stand override is disabled while being in mouselook
+ else if(motion==ANIM_AGENT_STAND && mCurrentSet->getMouselookDisable() && mInMouselook)
return;
AOSet::AOState* state=mCurrentSet->getStateByRemapID(motion);
@@ -817,18 +822,17 @@ void AOEngine::update()
if(allComplete)
{
+ mEnabled=gSavedPerAccountSettings.getBOOL("UseAO");
+
if(!mCurrentSet && !mSets.empty())
{
llwarns << "No default set defined, choosing the first in the list." << llendl;
- mCurrentSet=mSets[0];
+ selectSet(mSets[0]);
}
+
mTimerCollection.enableInventoryTimer(FALSE);
mTimerCollection.enableSettingsTimer(TRUE);
- // this should be a preferences option
- mEnabled=TRUE;
- selectSet(mCurrentSet);
-
llwarns << "sending update signal" << llendl;
mUpdatedSignal();
}
@@ -884,13 +888,14 @@ void AOEngine::selectSet(AOSet* set)
{
BOOL wasEnabled=mEnabled;
if(wasEnabled)
+ {
enable(FALSE);
+ gAgent.stopCurrentAnimations();
+ }
- gAgent.stopCurrentAnimations();
mLastOverriddenMotion=ANIM_AGENT_STAND;
mCurrentSet=set;
- llwarns << "Selected AO set " << set->getName() << llendl;
if(wasEnabled)
enable(TRUE);
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index 1553f1a67b..88891d3d05 100644
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -251,6 +251,17 @@
Value
1
+ UseAO
+
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index c6aaac2c72..337b445341 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -543,7 +543,9 @@ void LLBottomTray::toggleCameraControls()
// ## Zi: Animation Overrider
void LLBottomTray::toggleAO()
{
- AOEngine::getInstance()->enable(getChild("ao_toggle_btn")->getToggleState());
+ BOOL yes=mAOToggleButton->getToggleState();
+ AOEngine::getInstance()->enable(yes);
+ gSavedPerAccountSettings.setBOOL("UseAO",yes);
}
// ## Zi: Animation Overrider
@@ -615,10 +617,9 @@ BOOL LLBottomTray::postBuild()
getChild("sidebar_appearance_btn")->setCommitCallback(boost::bind(&LLBottomTray::showSidebarPanel, this, "sidepanel_appearance"));
getChild("sidebar_inv_btn")->setCommitCallback(boost::bind(&LLBottomTray::showSidebarPanel, this, "sidepanel_inventory"));
// ## Zi: Animation Overrider
- LLButton* aoToggleButton=getChild("ao_toggle_btn");
- aoToggleButton->setCommitCallback(boost::bind(&LLBottomTray::toggleAO,this));
- // this needs to become a preferences option
- aoToggleButton->setToggleState(TRUE);
+ mAOToggleButton=getChild("ao_toggle_btn");
+ mAOToggleButton->setCommitCallback(boost::bind(&LLBottomTray::toggleAO,this));
+ mAOToggleButton->setToggleState(gSavedPerAccountSettings.getBOOL("UseAO"));
// ## Zi: Animation Overrider
return TRUE;
}
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 11da2d7962..655774793f 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -471,6 +471,7 @@ protected:
LLButton* mCamButton;
LLButton* mMovementButton;
LLBottomTrayLite* mBottomTrayLite;
+ LLButton* mAOToggleButton; // ## Zi: Animation Overrider
bool mIsInLiteMode;
// Drag'n'Drop