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 + + Comment + Use the viewer side Animation Overrider + Persist + 1 + Type + Boolean + Value + 0 + 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