Allow default animation to be stopped to be replaced with another one.

Fixes Mantis #6327
connector_plugin
Melanie 2012-10-04 15:20:04 +02:00
parent aa52c8b20f
commit b977f962fa
2 changed files with 29 additions and 16 deletions

View File

@ -87,7 +87,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
{ {
if (m_defaultAnimation.AnimID == animID) if (m_defaultAnimation.AnimID == animID)
{ {
ResetDefaultAnimation(); m_defaultAnimation = new OpenSim.Framework.Animation(UUID.Zero, 1, UUID.Zero);
} }
else if (HasAnimation(animID)) else if (HasAnimation(animID))
{ {
@ -149,19 +149,26 @@ namespace OpenSim.Region.Framework.Scenes.Animation
{ {
lock (m_animations) lock (m_animations)
{ {
animIDs = new UUID[m_animations.Count + 1]; int defaultSize = 0;
sequenceNums = new int[m_animations.Count + 1]; if (m_defaultAnimation.AnimID != UUID.Zero)
objectIDs = new UUID[m_animations.Count + 1]; defaultSize++;
animIDs = new UUID[m_animations.Count + defaultSize];
sequenceNums = new int[m_animations.Count + defaultSize];
objectIDs = new UUID[m_animations.Count + defaultSize];
if (m_defaultAnimation.AnimID != UUID.Zero)
{
animIDs[0] = m_defaultAnimation.AnimID; animIDs[0] = m_defaultAnimation.AnimID;
sequenceNums[0] = m_defaultAnimation.SequenceNum; sequenceNums[0] = m_defaultAnimation.SequenceNum;
objectIDs[0] = m_defaultAnimation.ObjectID; objectIDs[0] = m_defaultAnimation.ObjectID;
}
for (int i = 0; i < m_animations.Count; ++i) for (int i = 0; i < m_animations.Count; ++i)
{ {
animIDs[i + 1] = m_animations[i].AnimID; animIDs[i + defaultSize] = m_animations[i].AnimID;
sequenceNums[i + 1] = m_animations[i].SequenceNum; sequenceNums[i + defaultSize] = m_animations[i].SequenceNum;
objectIDs[i + 1] = m_animations[i].ObjectID; objectIDs[i + defaultSize] = m_animations[i].ObjectID;
} }
} }
} }

View File

@ -407,6 +407,9 @@ namespace OpenSim.Region.Framework.Scenes.Animation
public void UpdateMovementAnimations() public void UpdateMovementAnimations()
{ {
lock (m_animations) lock (m_animations)
{
string newMovementAnimation = DetermineMovementAnimation();
if (CurrentMovementAnimation != newMovementAnimation)
{ {
CurrentMovementAnimation = DetermineMovementAnimation(); CurrentMovementAnimation = DetermineMovementAnimation();
@ -414,9 +417,12 @@ namespace OpenSim.Region.Framework.Scenes.Animation
// "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()", // "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()",
// CurrentMovementAnimation, m_scenePresence.Name); // CurrentMovementAnimation, m_scenePresence.Name);
// Only set it if it's actually changed, give a script
// a chance to stop a default animation
TrySetMovementAnimation(CurrentMovementAnimation); TrySetMovementAnimation(CurrentMovementAnimation);
} }
} }
}
public UUID[] GetAnimationArray() public UUID[] GetAnimationArray()
{ {