From 0a80dd0d8703108b1819db8ebdf88d14ef116eb9 Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Sat, 2 Mar 2019 13:18:46 -0500 Subject: [PATCH] Fix release blocker: Endless swimming anims on water/air transition --- indra/newview/floaterao.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/indra/newview/floaterao.cpp b/indra/newview/floaterao.cpp index edb1e30a7..5727a3610 100644 --- a/indra/newview/floaterao.cpp +++ b/indra/newview/floaterao.cpp @@ -653,10 +653,15 @@ void LLFloaterAO::toggleSwim(bool underwater) 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 - gAgent.sendAnimationRequest(GetAnimIDFromState(sSwimming ? swimToFlyState(state) : flyToSwimState(state)), ANIM_REQUEST_STOP); - // Start swimming/flying - gAgent.sendAnimationRequest(GetAnimIDFromState(state), ANIM_REQUEST_START); + // Stop all of the previous states + constexpr std::array swim_states = { STATE_AGENT_FLOAT, STATE_AGENT_SWIM, STATE_AGENT_SWIM_UP, STATE_AGENT_SWIM_DOWN }; + constexpr std::array fly_states = { STATE_AGENT_HOVER, STATE_AGENT_FLY, STATE_AGENT_HOVER_UP, STATE_AGENT_HOVER_DOWN }; + uuid_vec_t vec; + for (const auto& state : swim ? fly_states : swim_states) + vec.push_back(GetAnimIDFromState(state)); + gAgent.sendAnimationRequests(vec, ANIM_REQUEST_STOP); + // Process new animations + gAgentAvatarp->processAnimationStateChanges(); } } }