diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 1ea4585..91044be 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -2367,9 +2367,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
2367 | 2367 | ||
2368 | if (m_isChildAgent == false) | 2368 | if (m_isChildAgent == false) |
2369 | { | 2369 | { |
2370 | Vector3 velocity = m_physicsActor.Velocity; | ||
2371 | |||
2370 | // Throw away duplicate or insignificant updates | 2372 | // Throw away duplicate or insignificant updates |
2371 | if (!m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || | 2373 | if (!m_bodyRot.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) || |
2372 | !m_velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || | 2374 | !velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) || |
2373 | !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || | 2375 | !m_pos.ApproxEquals(m_lastPosition, POSITION_TOLERANCE) || |
2374 | Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) | 2376 | Environment.TickCount - m_lastTerseSent > TIME_MS_TOLERANCE) |
2375 | { | 2377 | { |
@@ -2378,7 +2380,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2378 | // Update the "last" values | 2380 | // Update the "last" values |
2379 | m_lastPosition = m_pos; | 2381 | m_lastPosition = m_pos; |
2380 | m_lastRotation = m_bodyRot; | 2382 | m_lastRotation = m_bodyRot; |
2381 | m_lastVelocity = m_velocity; | 2383 | m_lastVelocity = velocity; |
2382 | m_lastTerseSent = Environment.TickCount; | 2384 | m_lastTerseSent = Environment.TickCount; |
2383 | } | 2385 | } |
2384 | 2386 | ||
@@ -2411,7 +2413,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
2411 | //m_log.DebugFormat("[SCENEPRESENCE]: TerseUpdate: Pos={0} Rot={1} Vel={2}", m_pos, m_bodyRot, m_velocity); | 2413 | //m_log.DebugFormat("[SCENEPRESENCE]: TerseUpdate: Pos={0} Rot={1} Vel={2}", m_pos, m_bodyRot, m_velocity); |
2412 | 2414 | ||
2413 | remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_regionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, | 2415 | remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_regionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, |
2414 | pos, m_velocity, Vector3.Zero, m_bodyRot, Vector4.UnitW, m_uuid, null, GetUpdatePriority(remoteClient))); | 2416 | pos, m_physicsActor.Velocity, Vector3.Zero, m_bodyRot, Vector4.UnitW, m_uuid, null, GetUpdatePriority(remoteClient))); |
2415 | 2417 | ||
2416 | m_scene.StatsReporter.AddAgentTime(Environment.TickCount - m_perfMonMS); | 2418 | m_scene.StatsReporter.AddAgentTime(Environment.TickCount - m_perfMonMS); |
2417 | m_scene.StatsReporter.AddAgentUpdates(1); | 2419 | m_scene.StatsReporter.AddAgentUpdates(1); |
@@ -3355,15 +3357,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
3355 | // as of this comment the interval is set in AddToPhysicalScene | 3357 | // as of this comment the interval is set in AddToPhysicalScene |
3356 | UpdateMovementAnimations(); | 3358 | UpdateMovementAnimations(); |
3357 | 3359 | ||
3360 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; | ||
3361 | Dictionary<uint, ContactPoint> coldata = collisionData.m_objCollisionList; | ||
3362 | |||
3358 | if (m_invulnerable) | 3363 | if (m_invulnerable) |
3359 | return; | 3364 | return; |
3360 | CollisionEventUpdate collisionData = (CollisionEventUpdate)e; | 3365 | |
3361 | Dictionary<uint, float> coldata = collisionData.m_objCollisionList; | ||
3362 | float starthealth = Health; | 3366 | float starthealth = Health; |
3363 | uint killerObj = 0; | 3367 | uint killerObj = 0; |
3364 | foreach (uint localid in coldata.Keys) | 3368 | foreach (uint localid in coldata.Keys) |
3365 | { | 3369 | { |
3366 | if (coldata[localid] <= 0.10f || m_invulnerable) | 3370 | if (coldata[localid].PenetrationDepth <= 0.10f || m_invulnerable) |
3367 | continue; | 3371 | continue; |
3368 | //if (localid == 0) | 3372 | //if (localid == 0) |
3369 | //continue; | 3373 | //continue; |
@@ -3373,9 +3377,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3373 | if (part != null && part.ParentGroup.Damage != -1.0f) | 3377 | if (part != null && part.ParentGroup.Damage != -1.0f) |
3374 | Health -= part.ParentGroup.Damage; | 3378 | Health -= part.ParentGroup.Damage; |
3375 | else | 3379 | else |
3376 | Health -= coldata[localid] * 5; | 3380 | Health -= coldata[localid].PenetrationDepth * 5.0f; |
3377 | 3381 | ||
3378 | if (Health <= 0) | 3382 | if (Health <= 0.0f) |
3379 | { | 3383 | { |
3380 | if (localid != 0) | 3384 | if (localid != 0) |
3381 | killerObj = localid; | 3385 | killerObj = localid; |