diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 33 |
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 | ||
46 | namespace OpenSim.Region.Framework.Scenes | 46 | namespace 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); |