diff options
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index b3e68ec..53c185b 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -5526,6 +5526,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5526 | #endregion | 5526 | #endregion |
5527 | 5527 | ||
5528 | #region Helper Methods | 5528 | #region Helper Methods |
5529 | private void ClampVectorForUint(ref Vector3 v, float max) | ||
5530 | { | ||
5531 | float a,b; | ||
5532 | |||
5533 | a = Math.Abs(v.X); | ||
5534 | b = Math.Abs(v.Y); | ||
5535 | if(b > a) | ||
5536 | a = b; | ||
5537 | b= Math.Abs(v.Z); | ||
5538 | if(b > a) | ||
5539 | a = b; | ||
5540 | |||
5541 | if (a > max) | ||
5542 | { | ||
5543 | a = max / a; | ||
5544 | v.X *= a; | ||
5545 | v.Y *= a; | ||
5546 | v.Z *= a; | ||
5547 | } | ||
5548 | } | ||
5529 | 5549 | ||
5530 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedTerseBlock(ISceneEntity entity, bool sendTexture) | 5550 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedTerseBlock(ISceneEntity entity, bool sendTexture) |
5531 | { | 5551 | { |
@@ -5616,11 +5636,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5616 | pos += 12; | 5636 | pos += 12; |
5617 | 5637 | ||
5618 | // Velocity | 5638 | // Velocity |
5639 | ClampVectorForUint(ref velocity, 128f); | ||
5619 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.X, -128.0f, 128.0f), data, pos); pos += 2; | 5640 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.X, -128.0f, 128.0f), data, pos); pos += 2; |
5620 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.Y, -128.0f, 128.0f), data, pos); pos += 2; | 5641 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.Y, -128.0f, 128.0f), data, pos); pos += 2; |
5621 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.Z, -128.0f, 128.0f), data, pos); pos += 2; | 5642 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.Z, -128.0f, 128.0f), data, pos); pos += 2; |
5622 | 5643 | ||
5623 | // Acceleration | 5644 | // Acceleration |
5645 | ClampVectorForUint(ref acceleration, 64f); | ||
5624 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.X, -64.0f, 64.0f), data, pos); pos += 2; | 5646 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.X, -64.0f, 64.0f), data, pos); pos += 2; |
5625 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.Y, -64.0f, 64.0f), data, pos); pos += 2; | 5647 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.Y, -64.0f, 64.0f), data, pos); pos += 2; |
5626 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.Z, -64.0f, 64.0f), data, pos); pos += 2; | 5648 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.Z, -64.0f, 64.0f), data, pos); pos += 2; |
@@ -5632,6 +5654,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5632 | Utils.UInt16ToBytes(Utils.FloatToUInt16(rotation.W, -1.0f, 1.0f), data, pos); pos += 2; | 5654 | Utils.UInt16ToBytes(Utils.FloatToUInt16(rotation.W, -1.0f, 1.0f), data, pos); pos += 2; |
5633 | 5655 | ||
5634 | // Angular Velocity | 5656 | // Angular Velocity |
5657 | ClampVectorForUint(ref angularVelocity, 64f); | ||
5635 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.X, -64.0f, 64.0f), data, pos); pos += 2; | 5658 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.X, -64.0f, 64.0f), data, pos); pos += 2; |
5636 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2; | 5659 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Y, -64.0f, 64.0f), data, pos); pos += 2; |
5637 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2; | 5660 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2; |