diff options
author | John Hurliman | 2009-10-29 16:31:48 -0700 |
---|---|---|
committer | John Hurliman | 2009-10-29 16:31:48 -0700 |
commit | aecaa5106394ea55b2442da74b72094f934a491c (patch) | |
tree | cd70e3b7d6254397dee675d799b91888214168d9 | |
parent | * Commented out two noisy debug lines in the LLUDP server (diff) | |
download | opensim-SC-aecaa5106394ea55b2442da74b72094f934a491c.zip opensim-SC-aecaa5106394ea55b2442da74b72094f934a491c.tar.gz opensim-SC-aecaa5106394ea55b2442da74b72094f934a491c.tar.bz2 opensim-SC-aecaa5106394ea55b2442da74b72094f934a491c.tar.xz |
* Fixed a NullReferenceException in GetMovementAnimation() and added more protection against NREs in AddNewMovement()
* Removed the three second limit on ImprovedTerseObjectUpdate. With the latest fixes I don't think this is necessary, and it generates a lot of unnecessary updates in a crowded sim
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 04c22d0..9730cd5 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -98,7 +98,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
98 | private Vector3 m_lastPosition; | 98 | private Vector3 m_lastPosition; |
99 | private Quaternion m_lastRotation; | 99 | private Quaternion m_lastRotation; |
100 | private Vector3 m_lastVelocity; | 100 | private Vector3 m_lastVelocity; |
101 | private int m_lastTerseSent; | 101 | //private int m_lastTerseSent; |
102 | 102 | ||
103 | private bool m_updateflag; | 103 | private bool m_updateflag; |
104 | private byte m_movementflag; | 104 | private byte m_movementflag; |
@@ -1120,7 +1120,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
1120 | else | 1120 | else |
1121 | { | 1121 | { |
1122 | if (!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || | 1122 | if (!m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || |
1123 | !m_velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || | 1123 | !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || |
1124 | !m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE)) | 1124 | !m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE)) |
1125 | { | 1125 | { |
1126 | if (CameraConstraintActive) | 1126 | if (CameraConstraintActive) |
@@ -2110,8 +2110,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
2110 | if (actor == null || !actor.IsColliding) | 2110 | if (actor == null || !actor.IsColliding) |
2111 | { | 2111 | { |
2112 | float fallElapsed = (float)(Environment.TickCount - m_animTickFall) / 1000f; | 2112 | float fallElapsed = (float)(Environment.TickCount - m_animTickFall) / 1000f; |
2113 | float fallVelocity = (actor != null) ? actor.Velocity.Z : 0.0f; | ||
2113 | 2114 | ||
2114 | if (m_animTickFall == 0 || (fallElapsed > FALL_DELAY && actor.Velocity.Z >= 0.0f)) | 2115 | if (m_animTickFall == 0 || (fallElapsed > FALL_DELAY && fallVelocity >= 0.0f)) |
2115 | { | 2116 | { |
2116 | // Just started falling | 2117 | // Just started falling |
2117 | m_animTickFall = Environment.TickCount; | 2118 | m_animTickFall = Environment.TickCount; |
@@ -2262,28 +2263,30 @@ namespace OpenSim.Region.Framework.Scenes | |||
2262 | direc.Normalize(); | 2263 | direc.Normalize(); |
2263 | 2264 | ||
2264 | direc *= 0.03f * 128f * m_speedModifier; | 2265 | direc *= 0.03f * 128f * m_speedModifier; |
2265 | if (m_physicsActor.Flying) | 2266 | |
2266 | { | 2267 | PhysicsActor actor = m_physicsActor; |
2267 | direc *= 4.0f; | 2268 | if (actor != null) |
2268 | //bool controlland = (((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) || ((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); | 2269 | { |
2269 | //bool colliding = (m_physicsActor.IsColliding==true); | 2270 | if (actor.Flying) |
2270 | //if (controlland) | 2271 | { |
2271 | // m_log.Info("[AGENT]: landCommand"); | 2272 | direc *= 4.0f; |
2272 | //if (colliding) | 2273 | //bool controlland = (((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0) || ((m_AgentControlFlags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)); |
2273 | // m_log.Info("[AGENT]: colliding"); | 2274 | //bool colliding = (m_physicsActor.IsColliding==true); |
2274 | //if (m_physicsActor.Flying && colliding && controlland) | 2275 | //if (controlland) |
2275 | //{ | 2276 | // m_log.Info("[AGENT]: landCommand"); |
2276 | // StopFlying(); | 2277 | //if (colliding) |
2277 | // m_log.Info("[AGENT]: Stop FLying"); | 2278 | // m_log.Info("[AGENT]: colliding"); |
2278 | //} | 2279 | //if (m_physicsActor.Flying && colliding && controlland) |
2279 | } | 2280 | //{ |
2280 | else | 2281 | // StopFlying(); |
2281 | { | 2282 | // m_log.Info("[AGENT]: Stop FLying"); |
2282 | if (!m_physicsActor.Flying && m_physicsActor.IsColliding) | 2283 | //} |
2284 | } | ||
2285 | else if (!actor.Flying && actor.IsColliding) | ||
2283 | { | 2286 | { |
2284 | if (direc.Z > 2.0f) | 2287 | if (direc.Z > 2.0f) |
2285 | { | 2288 | { |
2286 | direc.Z *= 3; | 2289 | direc.Z *= 3.0f; |
2287 | 2290 | ||
2288 | // TODO: PreJump and jump happen too quickly. Many times prejump gets ignored. | 2291 | // TODO: PreJump and jump happen too quickly. Many times prejump gets ignored. |
2289 | TrySetMovementAnimation("PREJUMP"); | 2292 | TrySetMovementAnimation("PREJUMP"); |
@@ -2307,7 +2310,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2307 | const float ROTATION_TOLERANCE = 0.01f; | 2310 | const float ROTATION_TOLERANCE = 0.01f; |
2308 | const float VELOCITY_TOLERANCE = 0.001f; | 2311 | const float VELOCITY_TOLERANCE = 0.001f; |
2309 | const float POSITION_TOLERANCE = 0.05f; | 2312 | const float POSITION_TOLERANCE = 0.05f; |
2310 | const int TIME_MS_TOLERANCE = 3000; | 2313 | //const int TIME_MS_TOLERANCE = 3000; |
2311 | 2314 | ||
2312 | SendPrimUpdates(); | 2315 | SendPrimUpdates(); |
2313 | 2316 | ||
@@ -2320,21 +2323,24 @@ namespace OpenSim.Region.Framework.Scenes | |||
2320 | if (m_isChildAgent == false) | 2323 | if (m_isChildAgent == false) |
2321 | { | 2324 | { |
2322 | PhysicsActor actor = m_physicsActor; | 2325 | PhysicsActor actor = m_physicsActor; |
2323 | Vector3 velocity = (actor != null) ? actor.Velocity : Vector3.Zero; | 2326 | |
2327 | // NOTE: Velocity is not the same as m_velocity. Velocity will attempt to | ||
2328 | // grab the latest PhysicsActor velocity, whereas m_velocity is often | ||
2329 | // storing a requested force instead of an actual traveling velocity | ||
2324 | 2330 | ||
2325 | // Throw away duplicate or insignificant updates | 2331 | // Throw away duplicate or insignificant updates |
2326 | if (!m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || | 2332 | if (!m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || |
2327 | !velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || | 2333 | !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || |
2328 | !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || | 2334 | !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE)) |
2329 | Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) | 2335 | //Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) |
2330 | { | 2336 | { |
2331 | SendTerseUpdateToAllClients(); | 2337 | SendTerseUpdateToAllClients(); |
2332 | 2338 | ||
2333 | // Update the "last" values | 2339 | // Update the "last" values |
2334 | m_lastPosition = m_pos; | 2340 | m_lastPosition = m_pos; |
2335 | m_lastRotation = m_bodyRot; | 2341 | m_lastRotation = m_bodyRot; |
2336 | m_lastVelocity = velocity; | 2342 | m_lastVelocity = Velocity; |
2337 | m_lastTerseSent = Environment.TickCount; | 2343 | //m_lastTerseSent = Environment.TickCount; |
2338 | } | 2344 | } |
2339 | 2345 | ||
2340 | // followed suggestion from mic bowman. reversed the two lines below. | 2346 | // followed suggestion from mic bowman. reversed the two lines below. |