summaryrefslogtreecommitdiff
path: root/indra/llcharacter/llpose.cpp
diff options
context:
space:
mode:
authorandreykproductengine <akleshchev@productengine.com>2016-09-01 19:11:44 +0300
committerandreykproductengine <akleshchev@productengine.com>2016-09-01 19:11:44 +0300
commit9acf7f5733063ff735ad37d456e740211c191cc9 (patch)
tree1ef11936bc567ff54f4b52cac649d2d4f2f02087 /indra/llcharacter/llpose.cpp
parenta00165aad438f69062c3f6e4533c1f16bf8ecf3c (diff)
MAINT-6221 If two animations have the same priority, it's arbitrary which one will take precedence
Diffstat (limited to 'indra/llcharacter/llpose.cpp')
-rw-r--r--indra/llcharacter/llpose.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/indra/llcharacter/llpose.cpp b/indra/llcharacter/llpose.cpp
index b1a7ebb159..c430a73f6b 100644
--- a/indra/llcharacter/llpose.cpp
+++ b/indra/llcharacter/llpose.cpp
@@ -195,7 +195,7 @@ LLJointStateBlender::~LLJointStateBlender()
//-----------------------------------------------------------------------------
// addJointState()
//-----------------------------------------------------------------------------
-BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_state, S32 priority, BOOL additive_blend)
+BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_state, LLUUID source_id, S32 priority, BOOL additive_blend)
{
llassert(joint_state);
@@ -210,23 +210,26 @@ BOOL LLJointStateBlender::addJointState(const LLPointer<LLJointState>& joint_sta
mJointStates[i] = joint_state;
mPriorities[i] = priority;
mAdditiveBlends[i] = additive_blend;
+ mMoutionIds[i] = source_id;
return TRUE;
}
- else if (priority > mPriorities[i])
+ else if (priority > mPriorities[i] || (priority == mPriorities[i] && source_id > mMoutionIds[i]))
{
// we're at a higher priority than the current joint state in this slot
// so shift everyone over
- // previous joint states (newer motions) with same priority should stay in place
+ // previous joint states (newer motions) with same priority and source motion should stay in place
for (S32 j = JSB_NUM_JOINT_STATES - 1; j > i; j--)
{
mJointStates[j] = mJointStates[j - 1];
mPriorities[j] = mPriorities[j - 1];
mAdditiveBlends[j] = mAdditiveBlends[j - 1];
+ mMoutionIds[j] = mMoutionIds[j - 1];
}
// now store ourselves in this slot
mJointStates[i] = joint_state;
mPriorities[i] = priority;
mAdditiveBlends[i] = additive_blend;
+ mMoutionIds[i] = source_id;
return TRUE;
}
}
@@ -489,11 +492,11 @@ BOOL LLPoseBlender::addMotion(LLMotion* motion)
if (jsp->getPriority() == LLJoint::USE_MOTION_PRIORITY)
{
- joint_blender->addJointState(jsp, motion->getPriority(), motion->getBlendType() == LLMotion::ADDITIVE_BLEND);
+ joint_blender->addJointState(jsp, motion->getID(), motion->getPriority(), motion->getBlendType() == LLMotion::ADDITIVE_BLEND);
}
else
{
- joint_blender->addJointState(jsp, jsp->getPriority(), motion->getBlendType() == LLMotion::ADDITIVE_BLEND);
+ joint_blender->addJointState(jsp, motion->getID(), jsp->getPriority(), motion->getBlendType() == LLMotion::ADDITIVE_BLEND);
}
// add it to our list of active blenders