aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs19
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs33
2 files changed, 32 insertions, 20 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
index f5623bd..14ae287 100644
--- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
+++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -278,6 +278,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
278 return "FALLDOWN"; 278 return "FALLDOWN";
279 } 279 }
280 280
281 // Check if the user has stopped walking just now
282 if (CurrentMovementAnimation == "WALK" && (move == Vector3.Zero))
283 return "STAND";
284
281 return CurrentMovementAnimation; 285 return CurrentMovementAnimation;
282 } 286 }
283 287
@@ -402,13 +406,16 @@ namespace OpenSim.Region.Framework.Scenes.Animation
402 /// </summary> 406 /// </summary>
403 public void UpdateMovementAnimations() 407 public void UpdateMovementAnimations()
404 { 408 {
405 CurrentMovementAnimation = DetermineMovementAnimation(); 409 lock (m_animations)
410 {
411 CurrentMovementAnimation = DetermineMovementAnimation();
406 412
407// m_log.DebugFormat( 413// m_log.DebugFormat(
408// "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()", 414// "[SCENE PRESENCE ANIMATOR]: Determined animation {0} for {1} in UpdateMovementAnimations()",
409// CurrentMovementAnimation, m_scenePresence.Name); 415// CurrentMovementAnimation, m_scenePresence.Name);
410 416
411 TrySetMovementAnimation(CurrentMovementAnimation); 417 TrySetMovementAnimation(CurrentMovementAnimation);
418 }
412 } 419 }
413 420
414 public UUID[] GetAnimationArray() 421 public UUID[] GetAnimationArray()
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 6b38027..64fe7a8 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -1,4 +1,4 @@
1/* 1/*
2 * Copyright (c) Contributors, http://opensimulator.org/ 2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
@@ -45,6 +45,7 @@ using TeleportFlags = OpenSim.Framework.Constants.TeleportFlags;
45 45
46namespace OpenSim.Region.Framework.Scenes 46namespace OpenSim.Region.Framework.Scenes
47{ 47{
48 [Flags]
48 enum ScriptControlled : uint 49 enum ScriptControlled : uint
49 { 50 {
50 CONTROL_ZERO = 0, 51 CONTROL_ZERO = 0,
@@ -1220,7 +1221,7 @@ namespace OpenSim.Region.Framework.Scenes
1220 { 1221 {
1221// m_log.DebugFormat( 1222// m_log.DebugFormat(
1222// "[SCENE PRESENCE]: In {0} received agent update from {1}, flags {2}", 1223// "[SCENE PRESENCE]: In {0} received agent update from {1}, flags {2}",
1223// Scene.RegionInfo.RegionName, remoteClient.Name, agentData.ControlFlags); 1224// Scene.RegionInfo.RegionName, remoteClient.Name, (AgentManager.ControlFlags)agentData.ControlFlags);
1224 1225
1225 if (IsChildAgent) 1226 if (IsChildAgent)
1226 { 1227 {
@@ -1320,14 +1321,8 @@ namespace OpenSim.Region.Framework.Scenes
1320 } 1321 }
1321 } 1322 }
1322 1323
1323 lock (scriptedcontrols) 1324 uint flagsForScripts = (uint)flags;
1324 { 1325 flags = RemoveIgnoredControls(flags, IgnoredControls);
1325 if (scriptedcontrols.Count > 0)
1326 {
1327 SendControlToScripts((uint)flags);
1328 flags = RemoveIgnoredControls(flags, IgnoredControls);
1329 }
1330 }
1331 1326
1332 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0) 1327 if ((flags & AgentManager.ControlFlags.AGENT_CONTROL_SIT_ON_GROUND) != 0)
1333 HandleAgentSitOnGround(); 1328 HandleAgentSitOnGround();
@@ -1420,7 +1415,7 @@ namespace OpenSim.Region.Framework.Scenes
1420 MovementFlag |= (byte)nudgehack; 1415 MovementFlag |= (byte)nudgehack;
1421 } 1416 }
1422 1417
1423// m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with {1}", Name, DCF); 1418 //m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with {1}", Name, DCF);
1424 MovementFlag += (byte)(uint)DCF; 1419 MovementFlag += (byte)(uint)DCF;
1425 update_movementflag = true; 1420 update_movementflag = true;
1426 } 1421 }
@@ -1433,7 +1428,7 @@ namespace OpenSim.Region.Framework.Scenes
1433 && ((MovementFlag & (byte)nudgehack) == nudgehack)) 1428 && ((MovementFlag & (byte)nudgehack) == nudgehack))
1434 ) // This or is for Nudge forward 1429 ) // This or is for Nudge forward
1435 { 1430 {
1436// m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with lack of {1}", Name, DCF); 1431 //m_log.DebugFormat("[SCENE PRESENCE]: Updating MovementFlag for {0} with lack of {1}", Name, DCF);
1437 MovementFlag -= ((byte)(uint)DCF); 1432 MovementFlag -= ((byte)(uint)DCF);
1438 update_movementflag = true; 1433 update_movementflag = true;
1439 1434
@@ -1514,8 +1509,18 @@ namespace OpenSim.Region.Framework.Scenes
1514// } 1509// }
1515// } 1510// }
1516 1511
1517// if (update_movementflag && ParentID == 0) 1512 if (update_movementflag && ParentID == 0)
1518// Animator.UpdateMovementAnimations(); 1513 Animator.UpdateMovementAnimations();
1514
1515 lock (scriptedcontrols)
1516 {
1517 if (scriptedcontrols.Count > 0)
1518 {
1519 // Notify the scripts only after calling UpdateMovementAnimations(), so that if a script
1520 // (e.g., a walking script) checks which animation is active it will be the correct animation.
1521 SendControlToScripts(flagsForScripts);
1522 }
1523 }
1519 } 1524 }
1520 1525
1521 m_scene.EventManager.TriggerOnClientMovement(this); 1526 m_scene.EventManager.TriggerOnClientMovement(this);