diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | 47 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 15 |
2 files changed, 34 insertions, 28 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs index 6b1208c..2a6b8ea 100644 --- a/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs +++ b/OpenSim/Region/Framework/Scenes/Animation/ScenePresenceAnimator.cs | |||
@@ -54,11 +54,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
54 | /// <value> | 54 | /// <value> |
55 | /// The current movement animation | 55 | /// The current movement animation |
56 | /// </value> | 56 | /// </value> |
57 | public string CurrentMovementAnimation | 57 | public string CurrentMovementAnimation { get; private set; } |
58 | { | 58 | |
59 | get { return m_movementAnimation; } | ||
60 | } | ||
61 | protected string m_movementAnimation = "CROUCH"; | ||
62 | private int m_animTickFall; | 59 | private int m_animTickFall; |
63 | public int m_animTickJump; // ScenePresence has to see this to control +Z force | 60 | public int m_animTickJump; // ScenePresence has to see this to control +Z force |
64 | public bool m_jumping = false; | 61 | public bool m_jumping = false; |
@@ -79,6 +76,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
79 | public ScenePresenceAnimator(ScenePresence sp) | 76 | public ScenePresenceAnimator(ScenePresence sp) |
80 | { | 77 | { |
81 | m_scenePresence = sp; | 78 | m_scenePresence = sp; |
79 | CurrentMovementAnimation = "CROUCH"; | ||
82 | } | 80 | } |
83 | 81 | ||
84 | public void AddAnimation(UUID animID, UUID objectID) | 82 | public void AddAnimation(UUID animID, UUID objectID) |
@@ -146,6 +144,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
146 | { | 144 | { |
147 | if (!m_scenePresence.IsChildAgent) | 145 | if (!m_scenePresence.IsChildAgent) |
148 | { | 146 | { |
147 | // m_log.DebugFormat( | ||
148 | // "[SCENE PRESENCE ANIMATOR]: Setting movement animation {0} for {1}", | ||
149 | // anim, m_scenePresence.Name); | ||
150 | |||
149 | if (m_animations.TrySetDefaultAnimation( | 151 | if (m_animations.TrySetDefaultAnimation( |
150 | anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID)) | 152 | anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID)) |
151 | { | 153 | { |
@@ -158,20 +160,18 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
158 | SendAnimPack(); | 160 | SendAnimPack(); |
159 | } | 161 | } |
160 | } | 162 | } |
161 | // Don't leave this on since on teleports SP.HandleAgentUpdate() still hammers us for a while after it teleports | 163 | else |
162 | // else | 164 | { |
163 | // { | 165 | m_log.WarnFormat( |
164 | // m_log.WarnFormat( | 166 | "[SCENE PRESENCE ANIMATOR]: Tried to set movement animation {0} on child presence {1}", |
165 | // "[SCENE PRESENCE ANIMATOR]: Tried to set movement animation {0} on child presence {1}", | 167 | anim, m_scenePresence.Name); |
166 | // anim, m_scenePresence.Name); | 168 | } |
167 | // throw new Exception(string.Format("aaargh on setting {0}", anim)); | ||
168 | // } | ||
169 | } | 169 | } |
170 | 170 | ||
171 | /// <summary> | 171 | /// <summary> |
172 | /// This method determines the proper movement related animation | 172 | /// This method determines the proper movement related animation |
173 | /// </summary> | 173 | /// </summary> |
174 | public string GetMovementAnimation() | 174 | private string DetermineMovementAnimation() |
175 | { | 175 | { |
176 | const float FALL_DELAY = 800f; | 176 | const float FALL_DELAY = 800f; |
177 | const float PREJUMP_DELAY = 200f; | 177 | const float PREJUMP_DELAY = 200f; |
@@ -274,7 +274,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
274 | return "FALLDOWN"; | 274 | return "FALLDOWN"; |
275 | } | 275 | } |
276 | 276 | ||
277 | return m_movementAnimation; | 277 | return CurrentMovementAnimation; |
278 | } | 278 | } |
279 | 279 | ||
280 | #endregion Falling/Floating/Landing | 280 | #endregion Falling/Floating/Landing |
@@ -285,7 +285,6 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
285 | int jumptime; | 285 | int jumptime; |
286 | jumptime = Environment.TickCount - m_animTickJump; | 286 | jumptime = Environment.TickCount - m_animTickJump; |
287 | 287 | ||
288 | |||
289 | if ((move.Z > 0f) && (!m_jumping)) | 288 | if ((move.Z > 0f) && (!m_jumping)) |
290 | { | 289 | { |
291 | // Start jumping, prejump | 290 | // Start jumping, prejump |
@@ -329,7 +328,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
329 | 328 | ||
330 | #region Ground Movement | 329 | #region Ground Movement |
331 | 330 | ||
332 | if (m_movementAnimation == "FALLDOWN") | 331 | if (CurrentMovementAnimation == "FALLDOWN") |
333 | { | 332 | { |
334 | m_falling = false; | 333 | m_falling = false; |
335 | m_animTickFall = Environment.TickCount; | 334 | m_animTickFall = Environment.TickCount; |
@@ -342,16 +341,17 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
342 | else | 341 | else |
343 | return "LAND"; | 342 | return "LAND"; |
344 | } | 343 | } |
345 | else if ((m_movementAnimation == "LAND") || (m_movementAnimation == "SOFT_LAND") || (m_movementAnimation == "STANDUP")) | 344 | else if ((CurrentMovementAnimation == "LAND") || (CurrentMovementAnimation == "SOFT_LAND") || (CurrentMovementAnimation == "STANDUP")) |
346 | { | 345 | { |
347 | int landElapsed = Environment.TickCount - m_animTickFall; | 346 | int landElapsed = Environment.TickCount - m_animTickFall; |
348 | int limit = 1000; | 347 | int limit = 1000; |
349 | if(m_movementAnimation == "LAND") limit = 350; | 348 | if (CurrentMovementAnimation == "LAND") |
349 | limit = 350; | ||
350 | // NB if the above is set too long a weird anim reset from some place prevents STAND from being sent to client | 350 | // NB if the above is set too long a weird anim reset from some place prevents STAND from being sent to client |
351 | 351 | ||
352 | if ((m_animTickFall != 0) && (landElapsed <= limit)) | 352 | if ((m_animTickFall != 0) && (landElapsed <= limit)) |
353 | { | 353 | { |
354 | return m_movementAnimation; | 354 | return CurrentMovementAnimation; |
355 | } | 355 | } |
356 | else | 356 | else |
357 | { | 357 | { |
@@ -389,7 +389,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
389 | #endregion Ground Movement | 389 | #endregion Ground Movement |
390 | 390 | ||
391 | m_falling = false; | 391 | m_falling = false; |
392 | return m_movementAnimation; | 392 | |
393 | return CurrentMovementAnimation; | ||
393 | } | 394 | } |
394 | 395 | ||
395 | /// <summary> | 396 | /// <summary> |
@@ -397,8 +398,8 @@ namespace OpenSim.Region.Framework.Scenes.Animation | |||
397 | /// </summary> | 398 | /// </summary> |
398 | public void UpdateMovementAnimations() | 399 | public void UpdateMovementAnimations() |
399 | { | 400 | { |
400 | m_movementAnimation = GetMovementAnimation(); | 401 | CurrentMovementAnimation = DetermineMovementAnimation(); |
401 | TrySetMovementAnimation(m_movementAnimation); | 402 | TrySetMovementAnimation(CurrentMovementAnimation); |
402 | } | 403 | } |
403 | 404 | ||
404 | public UUID[] GetAnimationArray() | 405 | public UUID[] GetAnimationArray() |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index b93b67d..7156137 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1293,11 +1293,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
1293 | // "[SCENE PRESENCE]: In {0} received agent update from {1}", | 1293 | // "[SCENE PRESENCE]: In {0} received agent update from {1}", |
1294 | // Scene.RegionInfo.RegionName, remoteClient.Name); | 1294 | // Scene.RegionInfo.RegionName, remoteClient.Name); |
1295 | 1295 | ||
1296 | //if (IsChildAgent) | 1296 | if (IsChildAgent) |
1297 | //{ | 1297 | { |
1298 | // // m_log.Debug("DEBUG: HandleAgentUpdate: child agent"); | 1298 | // // m_log.Debug("DEBUG: HandleAgentUpdate: child agent"); |
1299 | // return; | 1299 | return; |
1300 | //} | 1300 | } |
1301 | 1301 | ||
1302 | ++m_movementUpdateCount; | 1302 | ++m_movementUpdateCount; |
1303 | if (m_movementUpdateCount < 1) | 1303 | if (m_movementUpdateCount < 1) |
@@ -3195,7 +3195,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3195 | } | 3195 | } |
3196 | catch { } | 3196 | catch { } |
3197 | 3197 | ||
3198 | Animator.Animations.FromArray(cAgent.Anims); | 3198 | // FIXME: Why is this null check necessary? Where are the cases where we get a null Anims object? |
3199 | if (cAgent.Anims != null) | ||
3200 | Animator.Animations.FromArray(cAgent.Anims); | ||
3199 | 3201 | ||
3200 | if (cAgent.AttachmentObjects != null && cAgent.AttachmentObjects.Count > 0) | 3202 | if (cAgent.AttachmentObjects != null && cAgent.AttachmentObjects.Count > 0) |
3201 | { | 3203 | { |
@@ -3280,6 +3282,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3280 | // Event called by the physics plugin to tell the avatar about a collision. | 3282 | // Event called by the physics plugin to tell the avatar about a collision. |
3281 | private void PhysicsCollisionUpdate(EventArgs e) | 3283 | private void PhysicsCollisionUpdate(EventArgs e) |
3282 | { | 3284 | { |
3285 | if (IsChildAgent) | ||
3286 | return; | ||
3287 | |||
3283 | //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) | 3288 | //if ((Math.Abs(Velocity.X) > 0.1e-9f) || (Math.Abs(Velocity.Y) > 0.1e-9f)) |
3284 | // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents( | 3289 | // The Physics Scene will send updates every 500 ms grep: PhysicsActor.SubscribeEvents( |
3285 | // as of this comment the interval is set in AddToPhysicalScene | 3290 | // as of this comment the interval is set in AddToPhysicalScene |