From b61cba8e01d11ee8754980bfb233aa25e026552f Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Fri, 11 Jan 2019 05:55:40 -0500 Subject: [PATCH] Clean up and optimize the AO Added the feature of selecting an animation from combo boxes and it playing automatically if it should be at this moment. Now for the stuff only developers will understand: FloaterAO is now a FloaterSingleton, because it should've been behaving that way all along. Refactors a lot, simplifies a lot, best view without space changes. Reduces a lot of redundant blocks. Creates some functions to make things like AOStates easier to get AOStates are now an enum instead of a bunch of const ints. Cleaned up includes. NULL -> nullptr, virtual->override, BOOL->bool, for->foreach Removed struct_tokens, it was redundant and actually just took up space. No longer set all the children invisible, their parent does a good job of that. Relate ComboBoxes to their states, so that we can easily get a setting and do a whole bunch of things with a lot less code. Remove unused parameters and functions and variables Remove unused boolean returns from functions. Don't clear combo boxes just because one id is null. --- indra/newview/aoremotectrl.cpp | 72 +- indra/newview/aoremotectrl.h | 10 +- indra/newview/floaterao.cpp | 1191 +++++------------ indra/newview/floaterao.h | 121 +- indra/newview/llagentcamera.cpp | 2 +- indra/newview/llmenucommands.cpp | 2 +- indra/newview/llvoavatar.cpp | 2 +- .../skins/default/xui/de/floater_ao.xml | 3 +- .../skins/default/xui/en-us/floater_ao.xml | 8 +- .../xui/en-us/panel_ao_remote_controls.xml | 3 +- .../xui/en-us/panel_ao_remote_expanded.xml | 2 +- .../skins/default/xui/es/floater_ao.xml | 3 +- 12 files changed, 389 insertions(+), 1030 deletions(-) diff --git a/indra/newview/aoremotectrl.cpp b/indra/newview/aoremotectrl.cpp index d9b782fca..5f57bcd20 100644 --- a/indra/newview/aoremotectrl.cpp +++ b/indra/newview/aoremotectrl.cpp @@ -33,7 +33,6 @@ #include "aoremotectrl.h" #include "floaterao.h" -#include "llbutton.h" #include "lloverlaybar.h" #include "lluictrlfactory.h" #include "llviewercontrol.h" @@ -46,80 +45,23 @@ AORemoteCtrl::AORemoteCtrl() setFocusRoot(TRUE); } -AORemoteCtrl::~AORemoteCtrl() -{ -} - -void AORemoteCtrl::draw() -{ - LLButton* expand_button = getChild("popup_btn"); - if (expand_button) - { - if (expand_button->getToggleState()) - { - expand_button->setImageOverlay("arrow_down.tga"); - } - else - { - expand_button->setImageOverlay("arrow_up.tga"); - } - } - - LLPanel::draw(); -} - void AORemoteCtrl::build() { - if (gSavedSettings.getBOOL("ShowAOSitPopup")) - { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_ao_remote_expanded.xml"); - } - else - { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_ao_remote.xml"); - } + LLUICtrlFactory::getInstance()->buildPanel(this, gSavedSettings.getBOOL("ShowAOSitPopup") ? "panel_ao_remote_expanded.xml" : "panel_ao_remote.xml"); } BOOL AORemoteCtrl::postBuild() { - - childSetAction("ao_btn", onClickToggleAO, this); - if (gSavedSettings.getBOOL("ShowAOSitPopup")) - { - childSetAction("ao_sit_btn", onClickToggleAOSit, this); - //childSetAction("ao_show_btn", onClickShowAO, this); - } - childSetAction("popup_btn", onClickPopupBtn, this); + /*if (LLUICtrl* ctrl = findChild("ao_show_btn")) + ctrl->setCommitCallback(boost::bind(&LLFloaterAO::showInstance, LLSD()));*/ + getChild("popup_btn")->setCommitCallback(boost::bind(&AORemoteCtrl::onClickPopupBtn, this)); return TRUE; } -// static -void AORemoteCtrl::onClickToggleAO(void* data) +void AORemoteCtrl::onClickPopupBtn() { - BOOL ao_enable = gSavedSettings.getBOOL("AOEnabled"); - gSavedSettings.setBOOL("AOEnabled", !ao_enable); -} - -//static -void AORemoteCtrl::onClickToggleAOSit(void* data) -{ - BOOL sit_enable = gSavedSettings.getBOOL("AOSitsEnabled"); - gSavedSettings.setBOOL("AOSitsEnabled", !sit_enable); -} - -//static -void AORemoteCtrl::onClickShowAO(void* data) -{ - LLFloaterAO::show(NULL); -} - -//static -void AORemoteCtrl::onClickPopupBtn(void* data) -{ - AORemoteCtrl* remotep = (AORemoteCtrl*)data; - - remotep->deleteAllChildren(); - remotep->build(); + deleteAllChildren(); + build(); gOverlayBar->layoutButtons(); } diff --git a/indra/newview/aoremotectrl.h b/indra/newview/aoremotectrl.h index ca74e0de6..417f7b329 100644 --- a/indra/newview/aoremotectrl.h +++ b/indra/newview/aoremotectrl.h @@ -37,18 +37,12 @@ class AORemoteCtrl : public LLPanel { public: AORemoteCtrl(); - virtual ~AORemoteCtrl(); - /*virtual*/ BOOL postBuild(); - /*virtual*/ void draw(); + BOOL postBuild() override; private: void build(); - - static void onClickToggleAO(void* data); - static void onClickToggleAOSit(void* data); - static void onClickShowAO(void* data); - static void onClickPopupBtn(void* data); + void onClickPopupBtn(); }; #endif // AOREMOTECTRL_H diff --git a/indra/newview/floaterao.cpp b/indra/newview/floaterao.cpp index e33657146..a75b02d21 100644 --- a/indra/newview/floaterao.cpp +++ b/indra/newview/floaterao.cpp @@ -16,13 +16,8 @@ #include "llstartup.h" #include "llpreviewnotecard.h" #include "llviewertexteditor.h" -#include "llcheckboxctrl.h" #include "llcombobox.h" -#include "llspinctrl.h" -#include "chatbar_as_cmdline.h" -//#include "llfloaterchat.h" #include "llfirstuse.h" -#include "lltrans.h" #include "llinventory.h" #include "llinventoryfunctions.h" @@ -31,10 +26,8 @@ #include "roles_constants.h" #include "llviewerregion.h" -#include "llpanelobjectinventory.h" #include "llinventorybridge.h" -#include "llboost.h" #include // Uncomment and use instead if we ever add the chatbar as a command line - MC @@ -90,7 +83,7 @@ private: std::string mFileName; }; -AOInvTimer* gAOInvTimer = NULL; +AOInvTimer* gAOInvTimer = nullptr; // ------------------------------------------------------- @@ -99,7 +92,7 @@ AOStandTimer* mAOStandTimer; AOStandTimer::AOStandTimer() : LLEventTimer( gSavedSettings.getF32("AOStandInterval") ) { - AOStandTimer::tick(); + tick(); } AOStandTimer::~AOStandTimer() { @@ -116,13 +109,13 @@ BOOL AOStandTimer::tick() LLFloaterAO::stand_iterator++; // LL_INFOS() << "tick" << LL_ENDL; LLFloaterAO::ChangeStand(); - return FALSE; + return false; // return LLFloaterAO::ChangeStand(); //timer is always active now .. } // ------------------------------------------------------- -AOInvTimer::AOInvTimer() : LLEventTimer( (F32)1.0 ) +AOInvTimer::AOInvTimer() : LLEventTimer( 1.0f ) { } AOInvTimer::~AOInvTimer() @@ -135,11 +128,8 @@ BOOL AOInvTimer::tick() if(LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) { // cmdline_printchat("Inventory fetched, loading AO."); - LLFloaterAO::init(); - gSavedSettings.getControl("AOEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::run)); - gSavedSettings.getControl("AOSitsEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::run)); - gSavedSettings.getControl("AOSwimEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::toggleSwim, boost::bind(is_underwater))); - return TRUE; + LLFloaterAO::getInstance(); // Initializes everything + return true; } } return !gSavedSettings.getBOOL("AOEnabled"); @@ -147,7 +137,7 @@ BOOL AOInvTimer::tick() // STUFF ------------------------------------------------------- -int LLFloaterAO::mAnimationState = 0; +AOState LLFloaterAO::mAnimationState = STATE_AGENT_IDLE; int LLFloaterAO::stand_iterator = 0; LLUUID LLFloaterAO::invfolderid = LLUUID::null; @@ -179,8 +169,8 @@ LLComboBox* mcomboBox_prejumps; struct struct_overrides { LLUUID orig_id; - LLUUID ao_id; - int state; + LLUUID ao_id = LLUUID::null; + AOState state; }; std::vector mAOOverrides; @@ -191,152 +181,95 @@ struct struct_stands }; std::vector mAOStands; -struct struct_tokens +LLFloaterAO::LLFloaterAO(const LLSD&) : LLFloater("floater_ao") { - std::string token; - int state; -}; -std::vector mAOTokens; + LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ao.xml", nullptr, false); + init(); + gSavedSettings.getControl("AOEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::run)); + gSavedSettings.getControl("AOSitsEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::run)); + sSwimming = is_underwater(); + gSavedSettings.getControl("AOSwimEnabled")->getSignal()->connect(boost::bind(&LLFloaterAO::toggleSwim, boost::bind(is_underwater))); +} -LLFloaterAO* LLFloaterAO::sInstance = NULL; - -LLFloaterAO::LLFloaterAO() -:LLFloater(std::string("floater_ao")) +void LLFloaterAO::onOpen() { -// init(); - llassert_always(sInstance == NULL); - LLUICtrlFactory::getInstance()->buildFloater(this, "floater_ao.xml"); - sInstance = this; + LLFirstUse::useAO(); } LLFloaterAO::~LLFloaterAO() { - sInstance=NULL; - mcomboBox_stands = 0; - mcomboBox_walks = 0; - mcomboBox_runs = 0; - mcomboBox_jumps = 0; - mcomboBox_sits = 0; - mcomboBox_gsits = 0; - mcomboBox_crouchs = 0; - mcomboBox_cwalks = 0; - mcomboBox_falls = 0; - mcomboBox_hovers = 0; - mcomboBox_flys = 0; - mcomboBox_flyslows = 0; - mcomboBox_flyups = 0; - mcomboBox_flydowns = 0; - mcomboBox_lands = 0; - mcomboBox_typings = 0; - mcomboBox_floats = 0; - mcomboBox_swims = 0; - mcomboBox_swimups = 0; - mcomboBox_swimdowns = 0; - mcomboBox_standups = 0; - mcomboBox_prejumps = 0; + mcomboBox_stands = nullptr; + mcomboBox_walks = nullptr; + mcomboBox_runs = nullptr; + mcomboBox_jumps = nullptr; + mcomboBox_sits = nullptr; + mcomboBox_gsits = nullptr; + mcomboBox_crouchs = nullptr; + mcomboBox_cwalks = nullptr; + mcomboBox_falls = nullptr; + mcomboBox_hovers = nullptr; + mcomboBox_flys = nullptr; + mcomboBox_flyslows = nullptr; + mcomboBox_flyups = nullptr; + mcomboBox_flydowns = nullptr; + mcomboBox_lands = nullptr; + mcomboBox_typings = nullptr; + mcomboBox_floats = nullptr; + mcomboBox_swims = nullptr; + mcomboBox_swimups = nullptr; + mcomboBox_swimdowns = nullptr; + mcomboBox_standups = nullptr; + mcomboBox_prejumps = nullptr; // LL_INFOS() << "floater destroyed" << LL_ENDL; } -void LLFloaterAO::show(void*) -{ - if (!sInstance) - { - sInstance = new LLFloaterAO(); - updateLayout(sInstance); - init(); - - sInstance->open(); - } - else - { - sInstance->close(); - } - LLFirstUse::useAO(); -} - -bool LLFloaterAO::getInstance() -{ - if (sInstance) - return true; - else - return false; -} - BOOL LLFloaterAO::postBuild() { - childSetAction("more_btn", onClickMore, this); - childSetAction("less_btn", onClickLess, this); + gSavedSettings.getControl("AOAdvanced")->getSignal()->connect(boost::bind(&LLFloaterAO::updateLayout, this, _2)); - childSetAction("reloadcard",onClickReloadCard,this); - childSetAction("opencard",onClickOpenCard,this); - childSetAction("newcard",onClickNewCard,this); - childSetAction("prevstand",onClickPrevStand,this); - childSetAction("nextstand",onClickNextStand,this); - getChild("standtime")->setCommitCallback(boost::bind(&LLFloaterAO::onSpinnerCommit,_1)); - mcomboBox_stands = getChild("stands"); - mcomboBox_walks = getChild("walks"); - mcomboBox_runs = getChild("runs"); - mcomboBox_jumps = getChild("jumps"); - mcomboBox_sits = getChild("sits"); - mcomboBox_gsits = getChild("gsits"); - mcomboBox_crouchs = getChild("crouchs"); - mcomboBox_cwalks = getChild("cwalks"); - mcomboBox_falls = getChild("falls"); - mcomboBox_hovers = getChild("hovers"); - mcomboBox_flys = getChild("flys"); - mcomboBox_flyslows = getChild("flyslows"); - mcomboBox_flyups = getChild("flyups"); - mcomboBox_flydowns = getChild("flydowns"); - mcomboBox_lands = getChild("lands"); - mcomboBox_typings = getChild("typings"); - mcomboBox_floats = getChild("floats"); - mcomboBox_swims = getChild("swims"); - mcomboBox_swimups = getChild("swimups"); - mcomboBox_swimdowns = getChild("swimdowns"); - mcomboBox_standups = getChild("standups"); - mcomboBox_prejumps = getChild("prejumps"); - getChild("stands")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("walks")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("runs")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("jumps")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("sits")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("gsits")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("crouchs")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("cwalks")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("falls")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("hovers")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("flys")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("flyslows")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("flyups")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("flydowns")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("lands")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("typings")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("floats")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("swims")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("swimups")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("swimdowns")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); - getChild("standups")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); - getChild("prejumps")->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + getChild("reloadcard")->setCommitCallback(boost::bind(&LLFloaterAO::onClickReloadCard)); + getChild("opencard")->setCommitCallback(boost::bind(&LLFloaterAO::onClickOpenCard)); + getChild("newcard")->setCommitCallback(boost::bind(&LLFloaterAO::onClickNewCard)); + getChild("prevstand")->setCommitCallback(boost::bind(&LLFloaterAO::onClickCycleStand, false)); + getChild("nextstand")->setCommitCallback(boost::bind(&LLFloaterAO::onClickCycleStand, true)); + getChild("standtime")->setCommitCallback(boost::bind(&LLFloaterAO::onSpinnerCommit)); - return TRUE; + (mcomboBox_stands = getChild("stands"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_walks = getChild("walks"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_runs = getChild("runs"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_jumps = getChild("jumps"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_sits = getChild("sits"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_gsits = getChild("gsits"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_crouchs = getChild("crouchs"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_cwalks = getChild("cwalks"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_falls = getChild("falls"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_hovers = getChild("hovers"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_flys = getChild("flys"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_flyslows = getChild("flyslows"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_flyups = getChild("flyups"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_flydowns = getChild("flydowns"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_lands = getChild("lands"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_typings = getChild("typings"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_floats = getChild("floats"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_swims = getChild("swims"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_swimups = getChild("swimups"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_swimdowns = getChild("swimdowns"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit, _1)); + (mcomboBox_standups = getChild("standups"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + (mcomboBox_prejumps = getChild("prejumps"))->setCommitCallback(boost::bind(&LLFloaterAO::onComboBoxCommit,_1)); + + updateLayout(gSavedSettings.getBOOL("AOAdvanced")); + + return true; } -void LLFloaterAO::onSpinnerCommit(LLUICtrl* ctrl) +void LLFloaterAO::onSpinnerCommit() { - LLSpinCtrl* spin = (LLSpinCtrl*) ctrl; - if(spin) - { - if (spin->getName() == "standtime") - { - if (mAOStandTimer) mAOStandTimer->reset(); - } - } + if (mAOStandTimer) mAOStandTimer->reset(); } void LLFloaterAO::onComboBoxCommit(LLUICtrl* ctrl) { - LLComboBox* box = (LLComboBox*)ctrl; - if(box) + if (LLComboBox* box = (LLComboBox*)ctrl) { if (box->getName() == "stands") { @@ -346,290 +279,80 @@ void LLFloaterAO::onComboBoxCommit(LLUICtrl* ctrl) } else { - int state = STATE_AGENT_IDLE; + AOState state = getStateFromCombo(box); std::string stranim = box->getValue().asString(); -// LL_INFOS() << "state " << (gAgentAvatarp->isSitting()) << " - " << getAnimationState() << LL_ENDL; - if (box->getName() == "walks") +// LL_INFOS() << "state " << state << " - " << getAnimationState() << LL_ENDL; + gAgent.sendAnimationRequest(GetAnimIDFromState(state), ANIM_REQUEST_STOP); + bool start_cond = getAnimationState() == state && gSavedSettings.getBOOL("AOEnabled"); + switch (state) { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_WALK), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultWalk",stranim); - state = STATE_AGENT_WALK; + case STATE_AGENT_SIT: + case STATE_AGENT_GROUNDSIT: + start_cond &= gAgentAvatarp && gAgentAvatarp->isSitting() && gSavedSettings.getBOOL("AOSitsEnabled"); + break; } - else if (box->getName() == "runs") + LLUUID anim = getAssetIDByName(stranim); + if (start_cond) gAgent.sendAnimationRequest(anim, ANIM_REQUEST_START); + gSavedPerAccountSettings.setString(ctrl->getControlName(), stranim); + for (auto& ao : mAOOverrides) { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_RUN), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultRun",stranim); - state = STATE_AGENT_RUN; - } - else if (box->getName() == "jumps") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_JUMP), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultJump",stranim); - state = STATE_AGENT_JUMP; - } - else if (box->getName() == "sits") - { - if (gAgentAvatarp && (gSavedSettings.getBOOL("AOEnabled")) && (gSavedSettings.getBOOL("AOSitsEnabled"))) + if (state == ao.state) { - if ((gAgentAvatarp->isSitting()) && (getAnimationState() == STATE_AGENT_SIT)) - { -// LL_INFOS() << "sitting " << GetAnimID(ANIM_AGENT_SIT) << " " << getAssetIDByName(stranim) << LL_ENDL; - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_SIT), ANIM_REQUEST_STOP); - gAgent.sendAnimationRequest(getAssetIDByName(stranim), ANIM_REQUEST_START); - } - } - gSavedPerAccountSettings.setString("AODefaultSit",stranim); - state = STATE_AGENT_SIT; - } - else if (box->getName() == "gsits") - { -// LL_INFOS() << "gsitting " << GetAnimID(ANIM_AGENT_SIT_GROUND) << " " << getAssetIDByName(stranim) << LL_ENDL; - if (gAgentAvatarp) - { - if ((gAgentAvatarp->isSitting()) && (getAnimationState() == STATE_AGENT_GROUNDSIT)) - { -// LL_INFOS() << "gsitting " << GetAnimID(ANIM_AGENT_SIT_GROUND) << " " << getAssetIDByName(stranim) << LL_ENDL; - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_SIT_GROUND), ANIM_REQUEST_STOP); - gAgent.sendAnimationRequest(getAssetIDByName(stranim), ANIM_REQUEST_START); - } - } - gSavedPerAccountSettings.setString("AODefaultGroundSit",stranim); - state = STATE_AGENT_GROUNDSIT; - } - else if (box->getName() == "crouchs") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_CROUCH), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultCrouch",stranim); - state = STATE_AGENT_CROUCH; - } - else if (box->getName() == "cwalks") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_CROUCHWALK), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultCrouchWalk",stranim); - state = STATE_AGENT_CROUCHWALK; - } - else if (box->getName() == "falls") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_FALLDOWN), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFall",stranim); - state = STATE_AGENT_FALLDOWN; - } - else if (box->getName() == "hovers") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultHover",stranim); - state = STATE_AGENT_HOVER; - } - else if (box->getName() == "flys") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_FLY), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFly",stranim); - state = STATE_AGENT_FLY; - } - else if (box->getName() == "flyslows") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_FLYSLOW), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFlySlow",stranim); - state = STATE_AGENT_FLYSLOW; - } - else if (box->getName() == "flyups") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER_UP), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFlyUp",stranim); - state = STATE_AGENT_HOVER_UP; - } - else if (box->getName() == "flydowns") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER_DOWN), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFlyDown",stranim); - state = STATE_AGENT_HOVER_DOWN; - } - else if (box->getName() == "lands") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_LAND), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultLand",stranim); - state = STATE_AGENT_LAND; - } - else if (box->getName() == "typings") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_TYPE), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultTyping",stranim); - state = STATE_AGENT_TYPING; - } - else if (box->getName() == "floats") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultFloat",stranim); - state = STATE_AGENT_FLOAT; - } - else if (box->getName() == "swims") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_FLY), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultSwim",stranim); - state = STATE_AGENT_SWIM; - } - else if (box->getName() == "swimups") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER_UP), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultSwimUp",stranim); - state = STATE_AGENT_SWIM_UP; - } - else if (box->getName() == "swimdowns") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_HOVER_DOWN), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultSwimDown",stranim); - state = STATE_AGENT_SWIM_DOWN; - } - else if (box->getName() == "standups") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_STAND), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultStandUp",stranim); - state = STATE_AGENT_STAND; - } - else if (box->getName() == "prejumps") - { - gAgent.sendAnimationRequest(GetAnimID(ANIM_AGENT_PRE_JUMP), ANIM_REQUEST_STOP); - gSavedPerAccountSettings.setString("AODefaultPreJump",stranim); - state = STATE_AGENT_PRE_JUMP; - } - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) - { - if (state == iter->state) - { - iter->ao_id = getAssetIDByName(stranim); + ao.ao_id = anim; + break; } } } } } -void LLFloaterAO::updateLayout(LLFloaterAO* floater) +void LLFloaterAO::updateLayout(bool advanced) { - if (floater) - { - BOOL advanced = gSavedSettings.getBOOL( "AOAdvanced"); - floater->reshape(advanced ? 800 : 200, floater->getRect().getHeight()); - - floater->childSetVisible("more_btn", !advanced); - floater->childSetVisible("less_btn", advanced); - - floater->childSetVisible("tabcontainer", advanced); - floater->childSetVisible("tabdefaultanims", advanced); - - floater->childSetVisible("textdefaultwalk", advanced); - floater->childSetVisible("textdefaultrun", advanced); - floater->childSetVisible("textdefaultjump", advanced); - floater->childSetVisible("textdefaultsit", advanced); - floater->childSetVisible("textdefaultgsit", advanced); - floater->childSetVisible("textdefaultcrouch", advanced); - floater->childSetVisible("textdefaultcrouchwalk", advanced); - floater->childSetVisible("textdefaultfall", advanced); - floater->childSetVisible("textdefaulthover", advanced); - floater->childSetVisible("textdefaultfly", advanced); - floater->childSetVisible("textdefaultflyslow", advanced); - floater->childSetVisible("textdefaultflyup", advanced); - floater->childSetVisible("textdefaultflydown", advanced); - floater->childSetVisible("textdefaultland", advanced); - floater->childSetVisible("textdefaulttyping", advanced); - floater->childSetVisible("textdefaultfloat", advanced); - floater->childSetVisible("textdefaultswim", advanced); - floater->childSetVisible("textdefaultswimup", advanced); - floater->childSetVisible("textdefaultswimdown", advanced); - floater->childSetVisible("textdefaultstandup", advanced); - floater->childSetVisible("textdefaultprejump", advanced); - - - floater->childSetVisible("walks", advanced); - floater->childSetVisible("runs", advanced); - floater->childSetVisible("jumps", advanced); - floater->childSetVisible("sits", advanced); - floater->childSetVisible("gsits", advanced); - floater->childSetVisible("crouchs", advanced); - floater->childSetVisible("falls", advanced); - floater->childSetVisible("hovers", advanced); - floater->childSetVisible("flys", advanced); - floater->childSetVisible("flyslows", advanced); - floater->childSetVisible("flyups", advanced); - floater->childSetVisible("flydowns", advanced); - floater->childSetVisible("lands", advanced); - floater->childSetVisible("typing", advanced); - floater->childSetVisible("floats", advanced); - floater->childSetVisible("swims", advanced); - floater->childSetVisible("swimups", advanced); - floater->childSetVisible("swimdowns", advanced); - floater->childSetVisible("standups", advanced); - floater->childSetVisible("prejumps", advanced); - } + reshape(advanced ? 800 : 200, getRect().getHeight()); + childSetVisible("tabcontainer", advanced); } void LLFloaterAO::init() { mAOStands.clear(); - mAOTokens.clear(); mAOOverrides.clear(); - struct_tokens tokenloader; - tokenloader.token = - tokenloader.token = "[ Sitting On Ground ]"; tokenloader.state = STATE_AGENT_GROUNDSIT; mAOTokens.push_back(tokenloader); // 0 - tokenloader.token = "[ Sitting ]"; tokenloader.state = STATE_AGENT_SIT; mAOTokens.push_back(tokenloader); // 1 - tokenloader.token = "[ Crouching ]"; tokenloader.state = STATE_AGENT_CROUCH; mAOTokens.push_back(tokenloader); // 3 - tokenloader.token = "[ Crouch Walking ]"; tokenloader.state = STATE_AGENT_CROUCHWALK; mAOTokens.push_back(tokenloader); // 4 - tokenloader.token = "[ Standing Up ]"; tokenloader.state = STATE_AGENT_STANDUP; mAOTokens.push_back(tokenloader); // 6 - tokenloader.token = "[ Falling ]"; tokenloader.state = STATE_AGENT_FALLDOWN; mAOTokens.push_back(tokenloader); // 7 - tokenloader.token = "[ Flying Down ]"; tokenloader.state = STATE_AGENT_HOVER_DOWN; mAOTokens.push_back(tokenloader); // 8 - tokenloader.token = "[ Flying Up ]"; tokenloader.state = STATE_AGENT_HOVER_UP; mAOTokens.push_back(tokenloader); // 9 - tokenloader.token = "[ Flying Slow ]"; tokenloader.state = STATE_AGENT_FLYSLOW; mAOTokens.push_back(tokenloader); // 10 - tokenloader.token = "[ Flying ]"; tokenloader.state = STATE_AGENT_FLY; mAOTokens.push_back(tokenloader); // 11 - tokenloader.token = "[ Hovering ]"; tokenloader.state = STATE_AGENT_HOVER; mAOTokens.push_back(tokenloader); // 12 - tokenloader.token = "[ Jumping ]"; tokenloader.state = STATE_AGENT_JUMP; mAOTokens.push_back(tokenloader); // 13 - tokenloader.token = "[ Pre Jumping ]"; tokenloader.state = STATE_AGENT_PRE_JUMP; mAOTokens.push_back(tokenloader); // 14 - tokenloader.token = "[ Running ]"; tokenloader.state = STATE_AGENT_RUN; mAOTokens.push_back(tokenloader); // 15 - tokenloader.token = "[ Turning Right ]"; tokenloader.state = STATE_AGENT_TURNRIGHT; mAOTokens.push_back(tokenloader); // 16 - tokenloader.token = "[ Turning Left ]"; tokenloader.state = STATE_AGENT_TURNLEFT; mAOTokens.push_back(tokenloader); // 17 - tokenloader.token = "[ Walking ]"; tokenloader.state = STATE_AGENT_WALK; mAOTokens.push_back(tokenloader); // 18 - tokenloader.token = "[ Landing ]"; tokenloader.state = STATE_AGENT_LAND; mAOTokens.push_back(tokenloader); // 19 - tokenloader.token = "[ Standing ]"; tokenloader.state = STATE_AGENT_STAND; mAOTokens.push_back(tokenloader); // 20 - tokenloader.token = "[ Swimming Down ]"; tokenloader.state = STATE_AGENT_SWIM_DOWN; mAOTokens.push_back(tokenloader); // 21 - tokenloader.token = "[ Swimming Up ]"; tokenloader.state = STATE_AGENT_SWIM_UP; mAOTokens.push_back(tokenloader); // 22 - tokenloader.token = "[ Swimming Forward ]"; tokenloader.state = STATE_AGENT_SWIM; mAOTokens.push_back(tokenloader); // 23 - tokenloader.token = "[ Floating ]"; tokenloader.state = STATE_AGENT_FLOAT; mAOTokens.push_back(tokenloader); // 24 - tokenloader.token = "[ Typing ]"; tokenloader.state = STATE_AGENT_TYPING; mAOTokens.push_back(tokenloader); // 25 - struct_overrides overrideloader; - overrideloader.orig_id = ANIM_AGENT_WALK; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_WALK; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_RUN; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_RUN; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_PRE_JUMP; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_PRE_JUMP; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_JUMP; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_JUMP; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_TURNLEFT; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_TURNLEFT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_TURNRIGHT; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_TURNRIGHT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_WALK; overrideloader.state = STATE_AGENT_WALK; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_RUN; overrideloader.state = STATE_AGENT_RUN; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_PRE_JUMP; overrideloader.state = STATE_AGENT_PRE_JUMP; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_JUMP; overrideloader.state = STATE_AGENT_JUMP; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_TURNLEFT; overrideloader.state = STATE_AGENT_TURNLEFT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_TURNRIGHT; overrideloader.state = STATE_AGENT_TURNRIGHT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_SIT; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_SIT_FEMALE; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_SIT_GENERIC; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_SIT_GROUND; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_GROUNDSIT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_SIT_GROUND_CONSTRAINED; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_GROUNDSIT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_SIT; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_SIT_FEMALE; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_SIT_GENERIC; overrideloader.state = STATE_AGENT_SIT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_SIT_GROUND; overrideloader.state = STATE_AGENT_GROUNDSIT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_SIT_GROUND_CONSTRAINED; overrideloader.state = STATE_AGENT_GROUNDSIT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_HOVER; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER_DOWN; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_HOVER_DOWN; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER_UP; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_HOVER_UP; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER; overrideloader.state = STATE_AGENT_HOVER; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER_DOWN; overrideloader.state = STATE_AGENT_HOVER_DOWN; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER_UP; overrideloader.state = STATE_AGENT_HOVER_UP; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_CROUCH; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_CROUCH; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_CROUCHWALK; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_CROUCHWALK; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_CROUCH; overrideloader.state = STATE_AGENT_CROUCH; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_CROUCHWALK; overrideloader.state = STATE_AGENT_CROUCHWALK; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_FALLDOWN; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_FALLDOWN; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_STANDUP; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_STANDUP; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_LAND; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_LAND; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_TYPE; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_TYPING; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_FALLDOWN; overrideloader.state = STATE_AGENT_FALLDOWN; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_STANDUP; overrideloader.state = STATE_AGENT_STANDUP; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_LAND; overrideloader.state = STATE_AGENT_LAND; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_TYPE; overrideloader.state = STATE_AGENT_TYPING; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_FLY; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_FLY; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_FLYSLOW; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_FLYSLOW; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_FLY; overrideloader.state = STATE_AGENT_FLY; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_FLYSLOW; overrideloader.state = STATE_AGENT_FLYSLOW; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_FLOAT; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER_DOWN; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SWIM_DOWN; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_HOVER_UP; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SWIM_UP; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER; overrideloader.state = STATE_AGENT_FLOAT; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER_DOWN; overrideloader.state = STATE_AGENT_SWIM_DOWN; mAOOverrides.push_back(overrideloader); + overrideloader.orig_id = ANIM_AGENT_HOVER_UP; overrideloader.state = STATE_AGENT_SWIM_UP; mAOOverrides.push_back(overrideloader); - overrideloader.orig_id = ANIM_AGENT_FLY; overrideloader.ao_id = LLUUID::null; overrideloader.state = STATE_AGENT_SWIM; mAOOverrides.push_back(overrideloader); - BOOL success = TRUE; + overrideloader.orig_id = ANIM_AGENT_FLY; overrideloader.state = STATE_AGENT_SWIM; mAOOverrides.push_back(overrideloader); + + bool success = true; if(LLStartUp::getStartupState() >= STATE_INVENTORY_SEND) { @@ -638,7 +361,7 @@ void LLFloaterAO::init() LLUUID configncitem = (LLUUID)gSavedPerAccountSettings.getString("AOConfigNotecardID"); if (configncitem.notNull()) { - success = FALSE; + success = false; const LLInventoryItem* item = gInventory.getItem(configncitem); if(item) { @@ -659,8 +382,8 @@ void LLFloaterAO::init() item->getType(), &onNotecardLoadComplete, (void*)new_uuid, - TRUE); - success = TRUE; + true); + success = true; } } } @@ -673,29 +396,17 @@ void LLFloaterAO::init() cmdline_printchat("Could not read the specified Config Notecard"); } -// mAnimationState = 0; +// mAnimationState = STATE_AGENT_IDLE; // mCurrentStandId = LLUUID::null; // setAnimationState(STATE_AGENT_IDLE); - -} - -void LLFloaterAO::onClickMore(void* data) -{ - gSavedSettings.setBOOL( "AOAdvanced", TRUE ); - updateLayout(sInstance); -} -void LLFloaterAO::onClickLess(void* data) -{ - gSavedSettings.setBOOL( "AOAdvanced", FALSE ); - updateLayout(sInstance); } void LLFloaterAO::run() { setAnimationState(STATE_AGENT_IDLE); // reset state - int state = getAnimationState(); // check if sitting or hovering - if ((state == STATE_AGENT_IDLE) || (state == STATE_AGENT_STAND)) + AOState state = getAnimationState(); // check if sitting or hovering + if (state == STATE_AGENT_IDLE || state == STATE_AGENT_STAND) { if (gSavedSettings.getBOOL("AOEnabled")) { @@ -711,13 +422,22 @@ void LLFloaterAO::run() } else { - stopMotion(getCurrentStandId(), FALSE, TRUE); //stop stand first then set state + stopMotion(getCurrentStandId(), true); //stop stand first then set state setAnimationState(STATE_AGENT_IDLE); } } else { - gAgent.sendAnimationRequest(GetAnimIDFromState(state), (gSavedSettings.getBOOL("AOEnabled") && (state != STATE_AGENT_SIT || gSavedSettings.getBOOL("AOSitsEnabled"))) ? ANIM_REQUEST_START : ANIM_REQUEST_STOP); + bool sit = false; + switch (state) + { + case STATE_AGENT_SIT: + case STATE_AGENT_GROUNDSIT: + sit = true; + stopMotion(getCurrentStandId(), true); // Stop the current stand + break; + } + gAgent.sendAnimationRequest(GetAnimIDFromState(state), (gSavedSettings.getBOOL("AOEnabled") && (!sit || gSavedSettings.getBOOL("AOSitsEnabled"))) ? ANIM_REQUEST_START : ANIM_REQUEST_STOP); } } @@ -732,7 +452,7 @@ void LLFloaterAO::typing(bool start) gAgent.sendAnimationRequests(anims, start ? ANIM_REQUEST_START : ANIM_REQUEST_STOP); } -int LLFloaterAO::flyToSwimState(const int state) +AOState LLFloaterAO::flyToSwimState(const AOState& state) { switch (state) { @@ -744,7 +464,7 @@ int LLFloaterAO::flyToSwimState(const int state) } } -int LLFloaterAO::swimToFlyState(const int state) +AOState LLFloaterAO::swimToFlyState(const AOState& state) { switch (state) { @@ -756,7 +476,7 @@ int LLFloaterAO::swimToFlyState(const int state) } } -int LLFloaterAO::getAnimationState() +AOState LLFloaterAO::getAnimationState() { if (gAgentAvatarp) { @@ -766,7 +486,7 @@ int LLFloaterAO::getAnimationState() return mAnimationState; } -void LLFloaterAO::setAnimationState(const int state) +void LLFloaterAO::setAnimationState(const AOState& state) { mAnimationState = sSwimming ? flyToSwimState(state) : state; } @@ -781,7 +501,7 @@ void LLFloaterAO::setCurrentStandId(const LLUUID& id) mCurrentStandId = id; } -bool LLFloaterAO::swimCheck(const int state) +bool LLFloaterAO::swimCheck(const AOState& state) { switch (state) { @@ -801,82 +521,93 @@ bool LLFloaterAO::swimCheck(const int state) LLUUID LLFloaterAO::GetAnimID(const LLUUID& id) { - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) + for (const auto& ao : mAOOverrides) { - if (swimCheck(iter->state) && iter->orig_id == id) + if (swimCheck(ao.state) && ao.orig_id == id) { - return iter->ao_id; + return ao.ao_id; } } return LLUUID::null; } -int LLFloaterAO::GetStateFromAnimID(const LLUUID& id) +AOState LLFloaterAO::GetStateFromAnimID(const LLUUID& id) { - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) + for (const auto& ao : mAOOverrides) { - if (swimCheck(iter->state) && iter->orig_id == id) return iter->state; + if (swimCheck(ao.state) && ao.orig_id == id) return ao.state; } return STATE_AGENT_IDLE; } -LLUUID LLFloaterAO::GetAnimIDFromState(const int state) +LLUUID LLFloaterAO::GetAnimIDFromState(const AOState& state) { - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) + for (const auto& ao : mAOOverrides) { - if (iter->state == state) return iter->ao_id; + if (ao.state == state) return ao.ao_id; } return LLUUID::null; } -int LLFloaterAO::GetStateFromToken(std::string strtoken) +AOState LLFloaterAO::GetStateFromToken(std::string strtoken) { - for (std::vector::iterator iter = mAOTokens.begin(); iter != mAOTokens.end(); ++iter) - { - if (iter->token == strtoken) return iter->state; - } + if (strtoken == "[ Sitting On Ground ]") return STATE_AGENT_GROUNDSIT; + if (strtoken == "[ Sitting ]") return STATE_AGENT_SIT; + if (strtoken == "[ Crouching ]") return STATE_AGENT_CROUCH; + if (strtoken == "[ Crouch Walking ]") return STATE_AGENT_CROUCHWALK; + if (strtoken == "[ Standing Up ]") return STATE_AGENT_STANDUP; + if (strtoken == "[ Falling ]") return STATE_AGENT_FALLDOWN; + if (strtoken == "[ Flying Down ]") return STATE_AGENT_HOVER_DOWN; + if (strtoken == "[ Flying Up ]") return STATE_AGENT_HOVER_UP; + if (strtoken == "[ Flying Slow ]") return STATE_AGENT_FLYSLOW; + if (strtoken == "[ Flying ]") return STATE_AGENT_FLY; + if (strtoken == "[ Hovering ]") return STATE_AGENT_HOVER; + if (strtoken == "[ Jumping ]") return STATE_AGENT_JUMP; + if (strtoken == "[ Pre Jumping ]") return STATE_AGENT_PRE_JUMP; + if (strtoken == "[ Running ]") return STATE_AGENT_RUN; + if (strtoken == "[ Turning Right ]") return STATE_AGENT_TURNRIGHT; + if (strtoken == "[ Turning Left ]") return STATE_AGENT_TURNLEFT; + if (strtoken == "[ Walking ]") return STATE_AGENT_WALK; + if (strtoken == "[ Landing ]") return STATE_AGENT_LAND; + if (strtoken == "[ Standing ]") return STATE_AGENT_STAND; + if (strtoken == "[ Swimming Down ]") return STATE_AGENT_SWIM_DOWN; + if (strtoken == "[ Swimming Up ]") return STATE_AGENT_SWIM_UP; + if (strtoken == "[ Swimming Forward ]") return STATE_AGENT_SWIM; + if (strtoken == "[ Floating ]") return STATE_AGENT_FLOAT; + if (strtoken == "[ Typing ]") return STATE_AGENT_TYPING; return STATE_AGENT_IDLE; } -void LLFloaterAO::onClickPrevStand(void* user_data) +void LLFloaterAO::onClickCycleStand(bool next) { - if (!(mAOStands.size() > 0)) return; - stand_iterator=stand_iterator-1; + if (mAOStands.empty()) return; + stand_iterator += (next ? 1 : -1); if (stand_iterator < 0) stand_iterator = int( mAOStands.size()-stand_iterator); if (stand_iterator > int( mAOStands.size()-1)) stand_iterator = 0; cmdline_printchat(llformat("Changing stand to %s.",mAOStands[stand_iterator].anim_name.c_str())); ChangeStand(); } -void LLFloaterAO::onClickNextStand(void* user_data) -{ - if (!(mAOStands.size() > 0)) return; - stand_iterator=stand_iterator+1; - if (stand_iterator < 0) stand_iterator = int( mAOStands.size()-stand_iterator); - if (stand_iterator > int( mAOStands.size()-1)) stand_iterator = 0; - cmdline_printchat(llformat("Changing stand to %s.",mAOStands[stand_iterator].anim_name.c_str())); - ChangeStand(); -} - -BOOL LLFloaterAO::ChangeStand() +void LLFloaterAO::ChangeStand() { if (gSavedSettings.getBOOL("AOEnabled")) { if (gAgentAvatarp) { - if (gSavedSettings.getBOOL("AONoStandsInMouselook") && gAgentCamera.cameraMouselook()) return FALSE; + if (gSavedSettings.getBOOL("AONoStandsInMouselook") && gAgentCamera.cameraMouselook()) return; if (gAgentAvatarp->isSitting()) { -// stopMotion(getCurrentStandId(), FALSE, TRUE); //stop stand first then set state +// stopMotion(getCurrentStandId(), true); //stop stand first then set state // if (getAnimationState() != STATE_AGENT_GROUNDSIT) setAnimationState(STATE_AGENT_SIT); // setCurrentStandId(LLUUID::null); - return FALSE; + return; } } - if ((getAnimationState() == STATE_AGENT_IDLE) || (getAnimationState() == STATE_AGENT_STAND))// stands have lowest priority + AOState state = getAnimationState(); + if (state == STATE_AGENT_IDLE || state == STATE_AGENT_STAND)// stands have lowest priority { - if (!(mAOStands.size() > 0)) return TRUE; + if (mAOStands.empty()) return; if (gSavedSettings.getBOOL("AOStandRandomize")) { stand_iterator = ll_rand(mAOStands.size()-1); @@ -890,23 +621,17 @@ BOOL LLFloaterAO::ChangeStand() if (mAOStands[stand_iterator].ao_id.notNull()) { - stopMotion(getCurrentStandId(), FALSE, TRUE); //stop stand first then set state - startMotion(mAOStands[stand_iterator].ao_id, 0, TRUE); + stopMotion(getCurrentStandId(), true); //stop stand first then set state + startMotion(mAOStands[stand_iterator].ao_id, true); setAnimationState(STATE_AGENT_STAND); setCurrentStandId(mAOStands[stand_iterator].ao_id); - if ((sInstance)&&(mcomboBox_stands)) mcomboBox_stands->selectNthItem(stand_iterator); + if (mcomboBox_stands) mcomboBox_stands->selectNthItem(stand_iterator); // LL_INFOS() << "changing stand to " << mAOStands[stand_iterator].anim_name << LL_ENDL; - return FALSE; } } } - else - { - stopMotion(getCurrentStandId(), FALSE, TRUE); - return TRUE; //stop if ao is off - } - return TRUE; + else stopMotion(getCurrentStandId(), true); } void LLFloaterAO::toggleSwim(bool underwater) @@ -919,7 +644,7 @@ void LLFloaterAO::toggleSwim(bool underwater) // Don't send requests if we have the AO disabled. if (enabled) { - int state = getAnimationState(); + AOState state = getAnimationState(); if (state != STATE_AGENT_IDLE && state != STATE_AGENT_STAND) // Don't bother if we're just standing or idle (Who pushed us?!) { // Stop flying/swimming @@ -930,90 +655,69 @@ void LLFloaterAO::toggleSwim(bool underwater) } } - -BOOL LLFloaterAO::startMotion(const LLUUID& id, F32 time_offset, BOOL stand) +void LLFloaterAO::doMotion(const LLUUID& id, bool start, bool stand) { + if (id.isNull()) return; + LLUUID anim = id; if (stand) { - if (id.notNull()) + if (start) { if (gAgentAvatarp && gAgentAvatarp->isSitting()) - return FALSE; - gAgent.sendAnimationRequest(id, ANIM_REQUEST_START); - return TRUE; + return; } + else setAnimationState(STATE_AGENT_IDLE); } else { - if (GetAnimID(id).notNull() && gSavedSettings.getBOOL("AOEnabled")) + anim = GetAnimID(id); + if (anim.isNull() || !gSavedSettings.getBOOL("AOEnabled")) return; + AOState state = GetStateFromAnimID(id); + if (start) { - stopMotion(getCurrentStandId(), FALSE, TRUE); //stop stand first then set state - setAnimationState(GetStateFromAnimID(id)); - -// LL_INFOS() << " state " << getAnimationState() << " start anim " << id << " overriding with " << GetAnimID(id) << LL_ENDL; - if ((GetStateFromAnimID(id) == STATE_AGENT_SIT) && !(gSavedSettings.getBOOL("AOSitsEnabled"))) return TRUE; - gAgent.sendAnimationRequest(GetAnimID(id), ANIM_REQUEST_START); - return TRUE; + stopMotion(getCurrentStandId(), true); //stop stand first then set state + setAnimationState(state); +// LL_INFOS() << " state " << getAnimationState() << " start anim " << id << " overriding with " << anim << LL_ENDL; + if (state == STATE_AGENT_SIT && !gSavedSettings.getBOOL("AOSitsEnabled")) return; + } + else + { +// LL_INFOS() << " state " << getAnimationState() << "/" << state << "(now 0) stop anim " << id << " overriding with " << anim << LL_ENDL; + if (getAnimationState() == state) setAnimationState(STATE_AGENT_IDLE); + ChangeStand(); // startMotion(getCurrentStandId(), true); } } - return FALSE; + gAgent.sendAnimationRequest(anim, start ? ANIM_REQUEST_START : ANIM_REQUEST_STOP); } -BOOL LLFloaterAO::stopMotion(const LLUUID& id, BOOL stop_immediate, BOOL stand) -{ - if (stand) - { - setAnimationState(STATE_AGENT_IDLE); - gAgent.sendAnimationRequest(id, ANIM_REQUEST_STOP); - return TRUE; - } - else - { - if (GetAnimID(id).notNull() && gSavedSettings.getBOOL("AOEnabled")) - { -// LL_INFOS() << " state " << getAnimationState() << "/" << GetStateFromAnimID(id) << "(now 0) stop anim " << id << " overriding with " << GetAnimID(id) << LL_ENDL; - if (getAnimationState() == GetStateFromAnimID(id)) - { - setAnimationState(STATE_AGENT_IDLE); - } - ChangeStand(); // startMotion(getCurrentStandId(), 0, TRUE); - gAgent.sendAnimationRequest(GetAnimID(id), ANIM_REQUEST_STOP); - return TRUE; - } - } - return FALSE; -} - -void LLFloaterAO::onClickReloadCard(void* user_data) +void LLFloaterAO::onClickReloadCard() { - if(LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) + if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) { - LLFloaterAO::init(); + init(); } } -void LLFloaterAO::onClickOpenCard(void* user_data) +void LLFloaterAO::onClickOpenCard() { - if(LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) + if (LLInventoryModelBackgroundFetch::instance().isEverythingFetched()) { LLUUID configncitem = (LLUUID)gSavedPerAccountSettings.getString("AOConfigNotecardID"); if (configncitem.notNull()) { - const LLInventoryItem* item = gInventory.getItem(configncitem); - if(item) + if (LLViewerInventoryItem* item = gInventory.getItem(configncitem)) { if (gAgent.allowOperation(PERM_COPY, item->getPermissions(),GP_OBJECT_MANIPULATE) || gAgent.isGodlike()) { if(!item->getAssetUUID().isNull()) - open_notecard((LLViewerInventoryItem*)item, std::string("Note: ") + item->getName(), LLUUID::null, FALSE); - // open_notecard((LLViewerInventoryItem*)item, std::string("Note: ") + item->getName(), LLUUID::null, FALSE, LLUUID::null, FALSE); + open_notecard(item, "Note: " + item->getName(), LLUUID::null, false); } } } } } -void LLFloaterAO::onClickNewCard(void* user_data) +void LLFloaterAO::onClickNewCard() { // load the template file from app_settings/ao_template.ini then // create a new properly-formatted notecard in the user's inventory @@ -1021,7 +725,7 @@ void LLFloaterAO::onClickNewCard(void* user_data) if (!ao_template.empty()) { LLPointer cb = new AONotecardCallback(ao_template); - create_inventory_item(gAgent.getID(), gAgent.getSessionID(), + create_inventory_item(gAgentID, gAgentSessionID, LLUUID::null, LLTransactionID::tnull, "New AO Notecard", "Drop this notecard in your AO window to use", LLAssetType::AT_NOTECARD, LLInventoryType::IT_NOTECARD, NOT_WEARABLE, PERM_ALL, cb); @@ -1034,10 +738,66 @@ void LLFloaterAO::onClickNewCard(void* user_data) struct AOAssetInfo { - std::string path; - std::string name; + std::string path, name; }; +AOState LLFloaterAO::getStateFromCombo(const LLComboBox* combo) +{ + if (combo == mcomboBox_stands) return STATE_AGENT_STAND; + if (combo == mcomboBox_walks) return STATE_AGENT_WALK; + if (combo == mcomboBox_runs) return STATE_AGENT_RUN; + if (combo == mcomboBox_jumps) return STATE_AGENT_JUMP; + if (combo == mcomboBox_sits) return STATE_AGENT_SIT; + if (combo == mcomboBox_gsits) return STATE_AGENT_GROUNDSIT; + if (combo == mcomboBox_crouchs) return STATE_AGENT_CROUCH; + if (combo == mcomboBox_cwalks) return STATE_AGENT_CROUCHWALK; + if (combo == mcomboBox_falls) return STATE_AGENT_FALLDOWN; + if (combo == mcomboBox_hovers) return STATE_AGENT_HOVER; + if (combo == mcomboBox_flys) return STATE_AGENT_FLY; + if (combo == mcomboBox_flyslows) return STATE_AGENT_FLYSLOW; + if (combo == mcomboBox_flyups) return STATE_AGENT_HOVER_UP; + if (combo == mcomboBox_flydowns) return STATE_AGENT_HOVER_DOWN; + if (combo == mcomboBox_lands) return STATE_AGENT_LAND; + if (combo == mcomboBox_typings) return STATE_AGENT_TYPING; + if (combo == mcomboBox_floats) return STATE_AGENT_FLOAT; + if (combo == mcomboBox_swims) return STATE_AGENT_SWIM; + if (combo == mcomboBox_swimups) return STATE_AGENT_SWIM_UP; + if (combo == mcomboBox_swimdowns) return STATE_AGENT_SWIM_DOWN; + if (combo == mcomboBox_standups) return STATE_AGENT_STANDUP; + if (combo == mcomboBox_prejumps) return STATE_AGENT_PRE_JUMP; + return STATE_AGENT_IDLE; +} + +LLComboBox* LLFloaterAO::getComboFromState(const AOState& state) +{ + switch (state) + { + case STATE_AGENT_STAND: return mcomboBox_stands; + case STATE_AGENT_WALK: return mcomboBox_walks; + case STATE_AGENT_RUN: return mcomboBox_runs; + case STATE_AGENT_JUMP: return mcomboBox_jumps; + case STATE_AGENT_SIT: return mcomboBox_sits; + case STATE_AGENT_GROUNDSIT: return mcomboBox_gsits; + case STATE_AGENT_CROUCH: return mcomboBox_crouchs; + case STATE_AGENT_CROUCHWALK: return mcomboBox_cwalks; + case STATE_AGENT_FALLDOWN: return mcomboBox_falls; + case STATE_AGENT_HOVER: return mcomboBox_hovers; + case STATE_AGENT_FLY: return mcomboBox_flys; + case STATE_AGENT_FLYSLOW: return mcomboBox_flyslows; + case STATE_AGENT_HOVER_UP: return mcomboBox_flyups; + case STATE_AGENT_HOVER_DOWN: return mcomboBox_flydowns; + case STATE_AGENT_LAND: return mcomboBox_lands; + case STATE_AGENT_TYPING: return mcomboBox_typings; + case STATE_AGENT_FLOAT: return mcomboBox_floats; + case STATE_AGENT_SWIM: return mcomboBox_swims; + case STATE_AGENT_SWIM_UP: return mcomboBox_swimups; + case STATE_AGENT_SWIM_DOWN: return mcomboBox_swimdowns; + case STATE_AGENT_STANDUP: return mcomboBox_standups; + case STATE_AGENT_PRE_JUMP: return mcomboBox_prejumps; + } + return nullptr; +} + void LLFloaterAO::onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLAssetType::EType type,void* user_data, S32 status, LLExtStat ext_status) { if(status == LL_ERR_NOERR) @@ -1082,224 +842,57 @@ void LLFloaterAO::onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLA if (mcomboBox_standups) mcomboBox_standups->clear(); if (mcomboBox_prejumps) mcomboBox_prejumps->clear(); - - struct_stands loader; - typedef boost::tokenizer > tokenizer; boost::char_separator sep("\n"); tokenizer tokline(card, sep); - for (tokenizer::iterator line = tokline.begin(); line != tokline.end(); ++line) + for (const auto& strline : tokline) { -// LL_INFOS() << *line << LL_ENDL; - std::string strline(*line); // LL_INFOS() << "uncommented line: " << strline << LL_ENDL; boost::regex type("^(\\s*)(\\[ )(.*)( \\])"); boost::smatch what; if (boost::regex_search(strline, what, type)) { -// LL_INFOS() << "type: " << what[0] << LL_ENDL; + std::string strtoken(what[0]); +// LL_INFOS() << "type: " << strtoken << LL_ENDL; // LL_INFOS() << "anims in type: " << boost::regex_replace(strline, type, "") << LL_ENDL; boost::char_separator sep("|,"); std::string stranimnames(boost::regex_replace(strline, type, "")); tokenizer tokanimnames(stranimnames, sep); - for (tokenizer::iterator anim = tokanimnames.begin(); anim != tokanimnames.end(); ++anim) + for (const auto& stranim : tokanimnames) { - std::string strtoken(what[0]); - std::string stranim(*anim); LLUUID animid(getAssetIDByName(stranim)); // LL_INFOS() << invfolderid.asString().c_str() << LL_ENDL; // LL_INFOS() << "anim: " << stranim.c_str() << " assetid: " << animid << LL_ENDL; - if (!(animid.notNull())) + if (animid.isNull()) { cmdline_printchat(llformat("Warning: animation '%s' could not be found (Section: %s).",stranim.c_str(),strtoken.c_str())); } else { - switch(GetStateFromToken(strtoken.c_str())) + const AOState state = GetStateFromToken(strtoken); + switch (state) { case STATE_AGENT_STAND: - loader.ao_id = animid; loader.anim_name = stranim.c_str(); mAOStands.push_back(loader); - if(mcomboBox_stands != NULL) mcomboBox_stands->add(stranim.c_str(), ADD_BOTTOM, TRUE); - break; - case STATE_AGENT_WALK: - { - if (sInstance && (mcomboBox_walks != NULL)) - { - //LL_INFOS() << "1 anim: " << stranim.c_str() << " assetid: " << animid << LL_ENDL; - if (!(mcomboBox_walks->selectByValue(stranim.c_str()))) mcomboBox_walks->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_RUN: - { - if (sInstance && (mcomboBox_runs != NULL)) - { - if (!(mcomboBox_runs->selectByValue(stranim.c_str()))) mcomboBox_runs->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_JUMP: - { - if (sInstance && (mcomboBox_jumps != NULL)) - { - if (!(mcomboBox_jumps->selectByValue(stranim.c_str()))) mcomboBox_jumps->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_SIT: - { - if (sInstance && (mcomboBox_sits != NULL)) - { - if (!(mcomboBox_sits->selectByValue(stranim.c_str()))) mcomboBox_sits->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_GROUNDSIT: - { - if (sInstance && (mcomboBox_gsits != NULL)) - { - if (!(mcomboBox_gsits->selectByValue(stranim.c_str()))) mcomboBox_gsits->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_CROUCH: - { - if (sInstance && (mcomboBox_crouchs != NULL)) - { - if (!(mcomboBox_crouchs->selectByValue(stranim.c_str()))) mcomboBox_crouchs->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_CROUCHWALK: - { - if (sInstance && (mcomboBox_cwalks != NULL)) - { - if (!(mcomboBox_cwalks->selectByValue(stranim.c_str()))) mcomboBox_cwalks->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_FALLDOWN: - { - if (sInstance && (mcomboBox_falls != NULL)) - { - if (!(mcomboBox_falls->selectByValue(stranim.c_str()))) mcomboBox_falls->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_HOVER: - { - if (sInstance && (mcomboBox_hovers != NULL)) - { - if (!(mcomboBox_hovers->selectByValue(stranim.c_str()))) mcomboBox_hovers->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_FLY: - { - if (sInstance && (mcomboBox_flys != NULL)) - { - if (!(mcomboBox_flys->selectByValue(stranim.c_str()))) mcomboBox_flys->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_FLYSLOW: - { - if (sInstance && (mcomboBox_flyslows != NULL)) - { - if (!(mcomboBox_flyslows->selectByValue(stranim.c_str()))) mcomboBox_flyslows->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_HOVER_UP: - { - if (sInstance && (mcomboBox_flyups != NULL)) - { - if (!(mcomboBox_flyups->selectByValue(stranim.c_str()))) mcomboBox_flyups->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_HOVER_DOWN: - { - if (sInstance && (mcomboBox_flydowns != NULL)) - { - if (!(mcomboBox_flydowns->selectByValue(stranim.c_str()))) mcomboBox_flydowns->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_LAND: - { - if (sInstance && (mcomboBox_lands != NULL)) - { - if (!(mcomboBox_lands->selectByValue(stranim.c_str()))) mcomboBox_lands->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_TYPING: - { - if (sInstance && (mcomboBox_typings != NULL)) - { - if (!(mcomboBox_typings->selectByValue(stranim.c_str()))) mcomboBox_typings->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_FLOAT: - { - if (sInstance && (mcomboBox_floats != NULL)) - { - if (!(mcomboBox_floats->selectByValue(stranim.c_str()))) mcomboBox_floats->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_SWIM: - { - if (sInstance && (mcomboBox_swims != NULL)) - { - if (!(mcomboBox_swims->selectByValue(stranim.c_str()))) mcomboBox_swims->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_SWIM_UP: - { - if (sInstance && (mcomboBox_swimups != NULL)) - { - if (!(mcomboBox_swimups->selectByValue(stranim.c_str()))) mcomboBox_swimups->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_SWIM_DOWN: - { - if (sInstance && (mcomboBox_swimdowns != NULL)) - { - if (!(mcomboBox_swimdowns->selectByValue(stranim.c_str()))) mcomboBox_swimdowns->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_STANDUP: - { - if (sInstance && (mcomboBox_standups != NULL)) - { - if (!(mcomboBox_standups->selectByValue(stranim.c_str()))) mcomboBox_standups->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; - case STATE_AGENT_PRE_JUMP: - { - if (sInstance && (mcomboBox_prejumps != NULL)) - { - if (!(mcomboBox_prejumps->selectByValue(stranim.c_str()))) mcomboBox_prejumps->add(stranim.c_str(), ADD_BOTTOM, TRUE); //check if exist - } - } - break; + mAOStands.push_back({ animid, stranim }); } - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) + + if (LLComboBox* combo = getComboFromState(state)) { - if (GetStateFromToken(strtoken.c_str()) == iter->state) + //LL_INFOS() << "1 anim: " << stranim.c_str() << " assetid: " << animid << LL_ENDL; + if (!combo->selectByValue(stranim)) //check if exist + combo->add(stranim, ADD_BOTTOM, true); + } + + for (auto& ao : mAOOverrides) + { + if (state == ao.state) { - iter->ao_id = animid; + ao.ao_id = animid; + break; } } } @@ -1308,158 +901,14 @@ void LLFloaterAO::onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLA } LL_INFOS() << "ao nc read sucess" << LL_ENDL; - for (std::vector::iterator iter = mAOOverrides.begin(); iter != mAOOverrides.end(); ++iter) + for (auto& ao : mAOOverrides) { - switch(iter->state) + if (LLComboBox* combo = getComboFromState(ao.state)) { - - case STATE_AGENT_WALK: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultWalk"); - SetDefault(mcomboBox_walks,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_RUN: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultRun"); - SetDefault(mcomboBox_runs,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_JUMP: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultJump"); - SetDefault(mcomboBox_jumps,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_SIT: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultSit"); - SetDefault(mcomboBox_sits,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_CROUCH: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultCrouch"); - SetDefault(mcomboBox_crouchs,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_GROUNDSIT: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultGroundSit"); - SetDefault(mcomboBox_gsits,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_CROUCHWALK: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultCrouchWalk"); - SetDefault(mcomboBox_cwalks,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_FALLDOWN: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFall"); - SetDefault(mcomboBox_falls,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_HOVER: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultHover"); - SetDefault(mcomboBox_hovers,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_FLY: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFly"); - SetDefault(mcomboBox_flys,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_HOVER_UP: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFlyUp"); - SetDefault(mcomboBox_flyups,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_FLYSLOW: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFlySlow"); - SetDefault(mcomboBox_flyslows,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_HOVER_DOWN: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFlyDown"); - SetDefault(mcomboBox_flydowns,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_LAND: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultLand"); - SetDefault(mcomboBox_lands,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_TYPING: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultTyping"); - SetDefault(mcomboBox_typings,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_FLOAT: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultFloating"); - SetDefault(mcomboBox_hovers,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_SWIM: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultSwim"); - SetDefault(mcomboBox_flys,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_SWIM_UP: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultSwimUp"); - SetDefault(mcomboBox_flyups,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_SWIM_DOWN: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultSwimDown"); - SetDefault(mcomboBox_flydowns,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_STANDUP: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultStandUp"); - SetDefault(mcomboBox_standups,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; - case STATE_AGENT_PRE_JUMP: - { - std::string defaultanim = gSavedPerAccountSettings.getString("AODefaultPreJump"); - SetDefault(mcomboBox_prejumps,iter->ao_id,defaultanim); - if (getAssetIDByName(defaultanim) != LLUUID::null) iter->ao_id = getAssetIDByName(defaultanim); - } - break; + std::string defaultanim = gSavedPerAccountSettings.getString(combo->getControlName()); + const LLUUID ao_id = getAssetIDByName(defaultanim); + if (ao_id != LLUUID::null) ao.ao_id = ao_id; + combo->selectByValue(defaultanim); } } run(); @@ -1476,24 +925,6 @@ void LLFloaterAO::onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLA } } -BOOL LLFloaterAO::SetDefault(void* userdata, LLUUID ao_id, std::string defaultanim) -{ - if (sInstance && (userdata)) - { - LLComboBox *box = (LLComboBox *) userdata; - if (ao_id.isNull()) - { - box->clear(); - box->removeall(); - } - else - { - box->selectByValue(defaultanim); - } - } - return TRUE; -} - class ObjectNameMatches : public LLInventoryCollectFunctor { public: @@ -1513,7 +944,7 @@ const LLUUID& LLFloaterAO::getAssetIDByName(const std::string& name) LLViewerInventoryCategory::cat_array_t cats; LLViewerInventoryItem::item_array_t items; - gInventory.collectDescendentsIf(LLUUID::null,cats,items,FALSE, ObjectNameMatches(name)); + gInventory.collectDescendentsIf(LLUUID::null,cats,items,false, ObjectNameMatches(name)); - return items.size() ? items[0]->getAssetUUID() : LLUUID::null; + return items.empty() ? LLUUID::null : items[0]->getAssetUUID(); }; diff --git a/indra/newview/floaterao.h b/indra/newview/floaterao.h index 56ff5d275..2aaa789c9 100644 --- a/indra/newview/floaterao.h +++ b/indra/newview/floaterao.h @@ -8,38 +8,42 @@ #include "lleventtimer.h" -const int STATE_AGENT_IDLE = 0; -const int STATE_AGENT_WALK = 1; -const int STATE_AGENT_RUN = 2; -const int STATE_AGENT_STAND = 3; +enum AOState +{ + STATE_AGENT_IDLE = 0, + STATE_AGENT_WALK = 1, + STATE_AGENT_RUN = 2, + STATE_AGENT_STAND = 3, -const int STATE_AGENT_PRE_JUMP = 4; -const int STATE_AGENT_JUMP = 5; -const int STATE_AGENT_TURNLEFT = 6; -const int STATE_AGENT_TURNRIGHT = 7; + STATE_AGENT_PRE_JUMP = 4, + STATE_AGENT_JUMP = 5, + STATE_AGENT_TURNLEFT = 6, + STATE_AGENT_TURNRIGHT = 7, -const int STATE_AGENT_SIT = 8; -const int STATE_AGENT_GROUNDSIT = 9; + STATE_AGENT_SIT = 8, + STATE_AGENT_GROUNDSIT = 9, -const int STATE_AGENT_HOVER = 10; -const int STATE_AGENT_HOVER_DOWN = 11; -const int STATE_AGENT_HOVER_UP = 12; + STATE_AGENT_HOVER = 10, + STATE_AGENT_HOVER_DOWN = 11, + STATE_AGENT_HOVER_UP = 12, -const int STATE_AGENT_CROUCH = 13; -const int STATE_AGENT_CROUCHWALK = 14; -const int STATE_AGENT_FALLDOWN = 15; -const int STATE_AGENT_STANDUP = 16; -const int STATE_AGENT_LAND = 17; + STATE_AGENT_CROUCH = 13, + STATE_AGENT_CROUCHWALK = 14, + STATE_AGENT_FALLDOWN = 15, + STATE_AGENT_STANDUP = 16, + STATE_AGENT_LAND = 17, -const int STATE_AGENT_FLY = 18; -const int STATE_AGENT_FLYSLOW = 19; + STATE_AGENT_FLY = 18, + STATE_AGENT_FLYSLOW = 19, -const int STATE_AGENT_TYPING = 20; + STATE_AGENT_TYPING = 20, -const int STATE_AGENT_SWIM_DOWN = 21; -const int STATE_AGENT_SWIM_UP = 22; -const int STATE_AGENT_SWIM = 23; -const int STATE_AGENT_FLOAT = 24; + STATE_AGENT_SWIM_DOWN = 21, + STATE_AGENT_SWIM_UP = 22, + STATE_AGENT_SWIM = 23, + STATE_AGENT_FLOAT = 24, + STATE_AGENT_END +}; @@ -49,8 +53,8 @@ class AOStandTimer : public LLEventTimer public: AOStandTimer(); ~AOStandTimer(); - virtual BOOL tick(); - virtual void reset(); + BOOL tick() override; + void reset(); }; class AOInvTimer : public LLEventTimer @@ -58,76 +62,69 @@ class AOInvTimer : public LLEventTimer public: AOInvTimer(); ~AOInvTimer(); - BOOL tick(); + BOOL tick() override; }; -class LLFloaterAO : public LLFloater +class LLFloaterAO : public LLFloater, public LLFloaterSingleton { public: - LLFloaterAO(); - virtual BOOL postBuild(); + LLFloaterAO(const LLSD&); + BOOL postBuild() override; + void onOpen() override; virtual ~LLFloaterAO(); - static void show(void*); static void init(); static void run(); - static void updateLayout(LLFloaterAO* floater); + void updateLayout(bool advanced); - //static BOOL loadAnims(); + //static bool loadAnims(); static void typing(bool start); - static int flyToSwimState(const int state); - static int swimToFlyState(const int state); - static int getAnimationState(); - static void setAnimationState(int state); - //static void setStates(const LLUUID& id, BOOL start); + static AOState flyToSwimState(const AOState& state); + static AOState swimToFlyState(const AOState& state); + static AOState getAnimationState(); + static void setAnimationState(const AOState& state); static LLUUID getCurrentStandId(); static void setCurrentStandId(const LLUUID& id); static int stand_iterator; - static BOOL ChangeStand(); + static void ChangeStand(); static void toggleSwim(bool underwater); - static BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f, BOOL stand = FALSE); - static BOOL stopMotion(const LLUUID& id, BOOL stop_immediate, BOOL stand = FALSE); + static void doMotion(const LLUUID& id, bool start, bool stand = false); + static void startMotion(const LLUUID& id, bool stand = false) { doMotion(id, true, stand); } + static void stopMotion(const LLUUID& id, bool stand = false) { doMotion(id, false, stand); } - static bool swimCheck(const int state); + static bool swimCheck(const AOState& state); static LLUUID GetAnimID(const LLUUID& id); - static int GetStateFromAnimID(const LLUUID& id); - static LLUUID GetAnimIDFromState(const int state); - static int GetStateFromToken(std::string strtoken); + static AOState GetStateFromAnimID(const LLUUID& id); + static LLUUID GetAnimIDFromState(const AOState& state); + static AOState GetStateFromToken(std::string strtoken); - static void onClickLess(void* data) ; - static void onClickMore(void* data) ; - - static void onClickPrevStand(void* userdata); - static void onClickNextStand(void* userdata); - static void onClickReloadCard(void* userdata); - static void onClickOpenCard(void* userdata); - static void onClickNewCard(void* userdata); + static void onClickCycleStand(bool next); + static void onClickReloadCard(); + static void onClickOpenCard(); + static void onClickNewCard(); static LLUUID invfolderid; static const LLUUID& getAssetIDByName(const std::string& name); - - static bool getInstance(); private: - static LLFloaterAO* sInstance; - static int mAnimationState; + static AOState mAnimationState; static LLUUID mCurrentStandId; - static void onSpinnerCommit(LLUICtrl* ctrl); + static void onSpinnerCommit(); static void onComboBoxCommit(LLUICtrl* ctrl); - static BOOL SetDefault(void *userdata, LLUUID ao_id, std::string defaultanim); - - BOOL mDirty; protected: + static AOState getStateFromCombo(const class LLComboBox* combo); + static LLComboBox* getComboFromState(const AOState& state); + static void onNotecardLoadComplete(LLVFS *vfs,const LLUUID& asset_uuid,LLAssetType::EType type,void* user_data, S32 status, LLExtStat ext_status); }; diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index c31c44514..41ca1e3d1 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2270,7 +2270,7 @@ void LLAgentCamera::changeCameraToMouselook(BOOL animate) mMouselookTimer.reset(); gFocusMgr.setKeyboardFocus(NULL); - if (gSavedSettings.getBOOL("AONoStandsInMouselook")) LLFloaterAO::stopMotion(LLFloaterAO::getCurrentStandId(), FALSE,TRUE); + if (gSavedSettings.getBOOL("AONoStandsInMouselook")) LLFloaterAO::stopMotion(LLFloaterAO::getCurrentStandId(), true); updateLastCamera(); mCameraMode = CAMERA_MODE_MOUSELOOK; diff --git a/indra/newview/llmenucommands.cpp b/indra/newview/llmenucommands.cpp index 28519fa0b..56ae324ea 100644 --- a/indra/newview/llmenucommands.cpp +++ b/indra/newview/llmenucommands.cpp @@ -165,7 +165,6 @@ struct MenuFloaterDict : public LLSingleton registerFloater("about", boost::bind(&LLFloaterAbout::show,(void*)NULL)); registerFloater("always run", boost::bind(toggle_always_run), boost::bind(&LLAgent::getAlwaysRun, &gAgent)); registerFloater("anims_explorer", boost::bind(LLFloaterExploreAnimations::show)); - registerFloater("ao", boost::bind(LLFloaterAO::show, (void*)NULL)); registerFloater("appearance", boost::bind(LLFloaterCustomize::show)); registerFloater("asset_blacklist", boost::bind(LLFloaterBlacklist::toggle), boost::bind(LLFloaterBlacklist::visible)); registerFloater("build", boost::bind(toggle_build)); @@ -213,6 +212,7 @@ struct MenuFloaterDict : public LLSingleton registerFloater ("about land"); registerFloater ("about region"); registerFloater ("active speakers"); + registerFloater ("ao"); registerFloater ("areasearch"); registerFloater ("autoreplace"); registerFloater ("avatar"); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b52b38cd1..eaf57a214 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5930,7 +5930,7 @@ void LLVOAvatar::processAnimationStateChanges() { if (AOEnabled && isSelf()) // AO is only for ME { - LLFloaterAO::startMotion(anim_it->first, 0,FALSE); // AO overrides the anim if needed + LLFloaterAO::startMotion(anim_it->first, false); // AO overrides the anim if needed } mPlayingAnimations[anim_it->first] = anim_it->second; diff --git a/indra/newview/skins/default/xui/de/floater_ao.xml b/indra/newview/skins/default/xui/de/floater_ao.xml index 22021d623..97029140c 100644 --- a/indra/newview/skins/default/xui/de/floater_ao.xml +++ b/indra/newview/skins/default/xui/de/floater_ao.xml @@ -20,8 +20,7 @@