diff options
Diffstat (limited to 'OpenSim/Region/ClientStack')
3 files changed, 110 insertions, 96 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs index 414b9bf..87ded7b 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/GetMeshModule.cs | |||
@@ -220,7 +220,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
220 | PollServiceMeshEventArgs args; | 220 | PollServiceMeshEventArgs args; |
221 | if (m_pollservices.TryGetValue(user, out args)) | 221 | if (m_pollservices.TryGetValue(user, out args)) |
222 | { | 222 | { |
223 | args.UpdateThrottle(imagethrottle, p); | 223 | args.UpdateThrottle(imagethrottle); |
224 | } | 224 | } |
225 | } | 225 | } |
226 | 226 | ||
@@ -238,14 +238,13 @@ namespace OpenSim.Region.ClientStack.Linden | |||
238 | base(null, uri, null, null, null, null, pId, int.MaxValue) | 238 | base(null, uri, null, null, null, null, pId, int.MaxValue) |
239 | { | 239 | { |
240 | m_scene = scene; | 240 | m_scene = scene; |
241 | m_throttler = new MeshCapsDataThrottler(100000, 1400000, 10000, scene, pId); | 241 | m_throttler = new MeshCapsDataThrottler(100000); |
242 | // x is request id, y is userid | 242 | // x is request id, y is userid |
243 | HasEvents = (x, y) => | 243 | HasEvents = (x, y) => |
244 | { | 244 | { |
245 | lock (responses) | 245 | lock (responses) |
246 | { | 246 | { |
247 | bool ret = m_throttler.hasEvents(x, responses); | 247 | bool ret = m_throttler.hasEvents(x, responses); |
248 | m_throttler.ProcessTime(); | ||
249 | return ret; | 248 | return ret; |
250 | 249 | ||
251 | } | 250 | } |
@@ -271,8 +270,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
271 | } | 270 | } |
272 | finally | 271 | finally |
273 | { | 272 | { |
274 | m_throttler.ProcessTime(); | ||
275 | responses.Remove(x); | 273 | responses.Remove(x); |
274 | m_throttler.PassTime(); | ||
276 | } | 275 | } |
277 | } | 276 | } |
278 | }; | 277 | }; |
@@ -285,6 +284,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
285 | reqinfo.request = y; | 284 | reqinfo.request = y; |
286 | 285 | ||
287 | m_queue.Enqueue(reqinfo); | 286 | m_queue.Enqueue(reqinfo); |
287 | m_throttler.PassTime(); | ||
288 | }; | 288 | }; |
289 | 289 | ||
290 | // this should never happen except possible on shutdown | 290 | // this should never happen except possible on shutdown |
@@ -364,12 +364,15 @@ namespace OpenSim.Region.ClientStack.Linden | |||
364 | }; | 364 | }; |
365 | 365 | ||
366 | } | 366 | } |
367 | m_throttler.ProcessTime(); | 367 | m_throttler.PassTime(); |
368 | } | 368 | } |
369 | 369 | ||
370 | internal void UpdateThrottle(int pimagethrottle, ScenePresence p) | 370 | internal void UpdateThrottle(int pthrottle) |
371 | { | 371 | { |
372 | m_throttler.UpdateThrottle(pimagethrottle, p); | 372 | int tmp = 2 * pthrottle; |
373 | if(tmp < 10000) | ||
374 | tmp = 10000; | ||
375 | m_throttler.ThrottleBytes = tmp; | ||
373 | } | 376 | } |
374 | } | 377 | } |
375 | 378 | ||
@@ -423,24 +426,15 @@ namespace OpenSim.Region.ClientStack.Linden | |||
423 | 426 | ||
424 | internal sealed class MeshCapsDataThrottler | 427 | internal sealed class MeshCapsDataThrottler |
425 | { | 428 | { |
429 | private double lastTimeElapsed = 0; | ||
430 | private double BytesSent = 0; | ||
426 | 431 | ||
427 | private volatile int currenttime = 0; | 432 | public MeshCapsDataThrottler(int pBytes) |
428 | private volatile int lastTimeElapsed = 0; | ||
429 | private volatile int BytesSent = 0; | ||
430 | private int CapSetThrottle = 0; | ||
431 | private readonly Scene m_scene; | ||
432 | private ThrottleOutPacketType Throttle; | ||
433 | private readonly UUID User; | ||
434 | |||
435 | public MeshCapsDataThrottler(int pBytes, int max, int min, Scene pScene, UUID puser) | ||
436 | { | 433 | { |
434 | if(pBytes < 10000) | ||
435 | pBytes = 10000; | ||
437 | ThrottleBytes = pBytes; | 436 | ThrottleBytes = pBytes; |
438 | if(ThrottleBytes < 10000) | 437 | lastTimeElapsed = Util.GetTimeStampMS(); |
439 | ThrottleBytes = 10000; | ||
440 | lastTimeElapsed = Util.EnvironmentTickCount(); | ||
441 | Throttle = ThrottleOutPacketType.Asset; | ||
442 | m_scene = pScene; | ||
443 | User = puser; | ||
444 | } | 438 | } |
445 | 439 | ||
446 | public bool hasEvents(UUID key, Dictionary<UUID, aPollResponse> responses) | 440 | public bool hasEvents(UUID key, Dictionary<UUID, aPollResponse> responses) |
@@ -470,46 +464,22 @@ namespace OpenSim.Region.ClientStack.Linden | |||
470 | return haskey; | 464 | return haskey; |
471 | } | 465 | } |
472 | 466 | ||
473 | public void ProcessTime() | 467 | public void PassTime() |
474 | { | 468 | { |
475 | PassTime(); | 469 | double currenttime = Util.GetTimeStampMS(); |
476 | } | 470 | double timeElapsed = currenttime - lastTimeElapsed; |
477 | 471 | if(timeElapsed < 50.0) | |
478 | private void PassTime() | 472 | return; |
473 | int add = (int)(ThrottleBytes * timeElapsed * 0.001); | ||
474 | if (add >= 1000) | ||
479 | { | 475 | { |
480 | currenttime = Util.EnvironmentTickCount(); | ||
481 | int timeElapsed = Util.EnvironmentTickCountSubtract(currenttime, lastTimeElapsed); | ||
482 | if (timeElapsed >= 100) | ||
483 | { | ||
484 | lastTimeElapsed = currenttime; | 476 | lastTimeElapsed = currenttime; |
485 | BytesSent -= (ThrottleBytes * timeElapsed / 1000); | 477 | BytesSent -= add; |
486 | if (BytesSent < 0) BytesSent = 0; | 478 | if (BytesSent < 0) BytesSent = 0; |
487 | } | 479 | } |
488 | } | 480 | } |
489 | 481 | ||
490 | private void AlterThrottle(int setting, ScenePresence p) | 482 | public int ThrottleBytes; |
491 | { | ||
492 | p.ControllingClient.SetAgentThrottleSilent((int)Throttle,setting); | ||
493 | } | 483 | } |
494 | |||
495 | public int ThrottleBytes | ||
496 | { | ||
497 | get { return CapSetThrottle; } | ||
498 | set | ||
499 | { | ||
500 | if (value > 10000) | ||
501 | CapSetThrottle = value; | ||
502 | else | ||
503 | CapSetThrottle = 10000; | ||
504 | } | 484 | } |
505 | } | ||
506 | |||
507 | internal void UpdateThrottle(int pimagethrottle, ScenePresence p) | ||
508 | { | ||
509 | // Client set throttle ! | ||
510 | CapSetThrottle = 2 * pimagethrottle; | ||
511 | ProcessTime(); | ||
512 | } | ||
513 | } | ||
514 | } | ||
515 | } | 485 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs index 1a31157..d77cf0c 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs | |||
@@ -221,7 +221,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
221 | private HashSet<UUID> dropedResponses = new HashSet<UUID>(); | 221 | private HashSet<UUID> dropedResponses = new HashSet<UUID>(); |
222 | 222 | ||
223 | private Scene m_scene; | 223 | private Scene m_scene; |
224 | private CapsDataThrottler m_throttler = new CapsDataThrottler(100000, 1400000,10000); | 224 | private CapsDataThrottler m_throttler = new CapsDataThrottler(100000); |
225 | public PollServiceTextureEventArgs(UUID pId, Scene scene) : | 225 | public PollServiceTextureEventArgs(UUID pId, Scene scene) : |
226 | base(null, "", null, null, null, null, pId, int.MaxValue) | 226 | base(null, "", null, null, null, null, pId, int.MaxValue) |
227 | { | 227 | { |
@@ -232,7 +232,6 @@ namespace OpenSim.Region.ClientStack.Linden | |||
232 | lock (responses) | 232 | lock (responses) |
233 | { | 233 | { |
234 | bool ret = m_throttler.hasEvents(x, responses); | 234 | bool ret = m_throttler.hasEvents(x, responses); |
235 | m_throttler.ProcessTime(); | ||
236 | return ret; | 235 | return ret; |
237 | 236 | ||
238 | } | 237 | } |
@@ -258,6 +257,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
258 | finally | 257 | finally |
259 | { | 258 | { |
260 | responses.Remove(x); | 259 | responses.Remove(x); |
260 | m_throttler.PassTime(); | ||
261 | } | 261 | } |
262 | } | 262 | } |
263 | }; | 263 | }; |
@@ -282,6 +282,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
282 | } | 282 | } |
283 | } | 283 | } |
284 | m_queue.Enqueue(reqinfo); | 284 | m_queue.Enqueue(reqinfo); |
285 | m_throttler.PassTime(); | ||
285 | }; | 286 | }; |
286 | 287 | ||
287 | // this should never happen except possible on shutdown | 288 | // this should never happen except possible on shutdown |
@@ -381,14 +382,15 @@ namespace OpenSim.Region.ClientStack.Linden | |||
381 | response = response | 382 | response = response |
382 | }; | 383 | }; |
383 | } | 384 | } |
384 | m_throttler.ProcessTime(); | 385 | m_throttler.PassTime(); |
385 | } | 386 | } |
386 | 387 | ||
387 | internal void UpdateThrottle(int pimagethrottle) | 388 | internal void UpdateThrottle(int pimagethrottle) |
388 | { | 389 | { |
389 | m_throttler.ThrottleBytes = 2 * pimagethrottle; | 390 | int tmp = 2 * pimagethrottle; |
390 | if(m_throttler.ThrottleBytes < 10000) | 391 | if(tmp < 10000) |
391 | m_throttler.ThrottleBytes = 10000; | 392 | tmp = 10000; |
393 | m_throttler.ThrottleBytes = tmp; | ||
392 | } | 394 | } |
393 | } | 395 | } |
394 | 396 | ||
@@ -456,15 +458,14 @@ namespace OpenSim.Region.ClientStack.Linden | |||
456 | 458 | ||
457 | internal sealed class CapsDataThrottler | 459 | internal sealed class CapsDataThrottler |
458 | { | 460 | { |
459 | private volatile int currenttime = 0; | 461 | private double lastTimeElapsed = 0; |
460 | private volatile int lastTimeElapsed = 0; | ||
461 | private volatile int BytesSent = 0; | 462 | private volatile int BytesSent = 0; |
462 | public CapsDataThrottler(int pBytes, int max, int min) | 463 | public CapsDataThrottler(int pBytes) |
463 | { | 464 | { |
465 | if(pBytes < 10000) | ||
466 | pBytes = 10000; | ||
464 | ThrottleBytes = pBytes; | 467 | ThrottleBytes = pBytes; |
465 | if(ThrottleBytes < 10000) | 468 | lastTimeElapsed = Util.GetTimeStampMS(); |
466 | ThrottleBytes = 10000; | ||
467 | lastTimeElapsed = Util.EnvironmentTickCount(); | ||
468 | } | 469 | } |
469 | public bool hasEvents(UUID key, Dictionary<UUID, GetTextureModule.aPollResponse> responses) | 470 | public bool hasEvents(UUID key, Dictionary<UUID, GetTextureModule.aPollResponse> responses) |
470 | { | 471 | { |
@@ -497,20 +498,17 @@ namespace OpenSim.Region.ClientStack.Linden | |||
497 | return haskey; | 498 | return haskey; |
498 | } | 499 | } |
499 | 500 | ||
500 | public void ProcessTime() | 501 | public void PassTime() |
501 | { | 502 | { |
502 | PassTime(); | 503 | double currenttime = Util.GetTimeStampMS(); |
503 | } | 504 | double timeElapsed = currenttime - lastTimeElapsed; |
504 | 505 | if(timeElapsed < 50.0) | |
505 | private void PassTime() | 506 | return; |
507 | int add = (int)(ThrottleBytes * timeElapsed * 0.001); | ||
508 | if (add >= 1000) | ||
506 | { | 509 | { |
507 | currenttime = Util.EnvironmentTickCount(); | ||
508 | int timeElapsed = Util.EnvironmentTickCountSubtract(currenttime, lastTimeElapsed); | ||
509 | //processTimeBasedActions(responses); | ||
510 | if (timeElapsed >= 100) | ||
511 | { | ||
512 | lastTimeElapsed = currenttime; | 510 | lastTimeElapsed = currenttime; |
513 | BytesSent -= (ThrottleBytes * timeElapsed / 1000); | 511 | BytesSent -= add; |
514 | if (BytesSent < 0) BytesSent = 0; | 512 | if (BytesSent < 0) BytesSent = 0; |
515 | } | 513 | } |
516 | } | 514 | } |
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 01c1fb9..861b79e 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -4137,6 +4137,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4137 | Vector3 mypos = Vector3.Zero; | 4137 | Vector3 mypos = Vector3.Zero; |
4138 | ScenePresence mysp = (ScenePresence)SceneAgent; | 4138 | ScenePresence mysp = (ScenePresence)SceneAgent; |
4139 | 4139 | ||
4140 | bool orderedDequeue = m_scene.UpdatePrioritizationScheme == UpdatePrioritizationSchemes.SimpleAngularDistance; | ||
4140 | // we should have a presence | 4141 | // we should have a presence |
4141 | if(mysp == null) | 4142 | if(mysp == null) |
4142 | return; | 4143 | return; |
@@ -4151,8 +4152,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4151 | while (maxUpdatesBytes > 0) | 4152 | while (maxUpdatesBytes > 0) |
4152 | { | 4153 | { |
4153 | lock (m_entityUpdates.SyncRoot) | 4154 | lock (m_entityUpdates.SyncRoot) |
4154 | if (!m_entityUpdates.TryDequeue(out update, out timeinqueue)) | 4155 | { |
4155 | break; | 4156 | if(orderedDequeue) |
4157 | { | ||
4158 | if (!m_entityUpdates.TryOrderedDequeue(out update, out timeinqueue)) | ||
4159 | break; | ||
4160 | } | ||
4161 | else | ||
4162 | { | ||
4163 | if (!m_entityUpdates.TryDequeue(out update, out timeinqueue)) | ||
4164 | break; | ||
4165 | } | ||
4166 | } | ||
4156 | 4167 | ||
4157 | PrimUpdateFlags updateFlags = (PrimUpdateFlags)update.Flags; | 4168 | PrimUpdateFlags updateFlags = (PrimUpdateFlags)update.Flags; |
4158 | 4169 | ||
@@ -4850,6 +4861,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4850 | // OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>> propertyUpdates = | 4861 | // OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>> propertyUpdates = |
4851 | // new OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>>(); | 4862 | // new OpenSim.Framework.Lazy<List<ObjectPropertyUpdate>>(); |
4852 | 4863 | ||
4864 | bool orderedDequeue = m_scene.UpdatePrioritizationScheme == UpdatePrioritizationSchemes.SimpleAngularDistance; | ||
4853 | 4865 | ||
4854 | EntityUpdate iupdate; | 4866 | EntityUpdate iupdate; |
4855 | Int32 timeinqueue; // this is just debugging code & can be dropped later | 4867 | Int32 timeinqueue; // this is just debugging code & can be dropped later |
@@ -4857,8 +4869,18 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
4857 | while (maxUpdateBytes > 0) | 4869 | while (maxUpdateBytes > 0) |
4858 | { | 4870 | { |
4859 | lock (m_entityProps.SyncRoot) | 4871 | lock (m_entityProps.SyncRoot) |
4860 | if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue)) | 4872 | { |
4861 | break; | 4873 | if(orderedDequeue) |
4874 | { | ||
4875 | if (!m_entityProps.TryOrderedDequeue(out iupdate, out timeinqueue)) | ||
4876 | break; | ||
4877 | } | ||
4878 | else | ||
4879 | { | ||
4880 | if (!m_entityProps.TryDequeue(out iupdate, out timeinqueue)) | ||
4881 | break; | ||
4882 | } | ||
4883 | } | ||
4862 | 4884 | ||
4863 | ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate; | 4885 | ObjectPropertyUpdate update = (ObjectPropertyUpdate)iupdate; |
4864 | if (update.SendFamilyProps) | 4886 | if (update.SendFamilyProps) |
@@ -5526,6 +5548,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5526 | #endregion | 5548 | #endregion |
5527 | 5549 | ||
5528 | #region Helper Methods | 5550 | #region Helper Methods |
5551 | private void ClampVectorForUint(ref Vector3 v, float max) | ||
5552 | { | ||
5553 | float a,b; | ||
5554 | |||
5555 | a = Math.Abs(v.X); | ||
5556 | b = Math.Abs(v.Y); | ||
5557 | if(b > a) | ||
5558 | a = b; | ||
5559 | b= Math.Abs(v.Z); | ||
5560 | if(b > a) | ||
5561 | a = b; | ||
5562 | |||
5563 | if (a > max) | ||
5564 | { | ||
5565 | a = max / a; | ||
5566 | v.X *= a; | ||
5567 | v.Y *= a; | ||
5568 | v.Z *= a; | ||
5569 | } | ||
5570 | } | ||
5529 | 5571 | ||
5530 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedTerseBlock(ISceneEntity entity, bool sendTexture) | 5572 | protected ImprovedTerseObjectUpdatePacket.ObjectDataBlock CreateImprovedTerseBlock(ISceneEntity entity, bool sendTexture) |
5531 | { | 5573 | { |
@@ -5616,11 +5658,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5616 | pos += 12; | 5658 | pos += 12; |
5617 | 5659 | ||
5618 | // Velocity | 5660 | // Velocity |
5661 | ClampVectorForUint(ref velocity, 128f); | ||
5619 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.X, -128.0f, 128.0f), data, pos); pos += 2; | 5662 | 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; | 5663 | 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; | 5664 | Utils.UInt16ToBytes(Utils.FloatToUInt16(velocity.Z, -128.0f, 128.0f), data, pos); pos += 2; |
5622 | 5665 | ||
5623 | // Acceleration | 5666 | // Acceleration |
5667 | ClampVectorForUint(ref acceleration, 64f); | ||
5624 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.X, -64.0f, 64.0f), data, pos); pos += 2; | 5668 | 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; | 5669 | 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; | 5670 | Utils.UInt16ToBytes(Utils.FloatToUInt16(acceleration.Z, -64.0f, 64.0f), data, pos); pos += 2; |
@@ -5632,6 +5676,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5632 | Utils.UInt16ToBytes(Utils.FloatToUInt16(rotation.W, -1.0f, 1.0f), data, pos); pos += 2; | 5676 | Utils.UInt16ToBytes(Utils.FloatToUInt16(rotation.W, -1.0f, 1.0f), data, pos); pos += 2; |
5633 | 5677 | ||
5634 | // Angular Velocity | 5678 | // Angular Velocity |
5679 | ClampVectorForUint(ref angularVelocity, 64f); | ||
5635 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.X, -64.0f, 64.0f), data, pos); pos += 2; | 5680 | 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; | 5681 | 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; | 5682 | Utils.UInt16ToBytes(Utils.FloatToUInt16(angularVelocity.Z, -64.0f, 64.0f), data, pos); pos += 2; |
@@ -5753,7 +5798,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5753 | //update.JointPivot = Vector3.Zero; | 5798 | //update.JointPivot = Vector3.Zero; |
5754 | //update.JointType = 0; | 5799 | //update.JointType = 0; |
5755 | update.Material = part.Material; | 5800 | update.Material = part.Material; |
5756 | update.MediaURL = Utils.EmptyBytes; // FIXME: Support this in OpenSim | ||
5757 | /* | 5801 | /* |
5758 | if (data.ParentGroup.IsAttachment) | 5802 | if (data.ParentGroup.IsAttachment) |
5759 | { | 5803 | { |
@@ -5832,8 +5876,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
5832 | update.TextureAnim = part.TextureAnimation ?? Utils.EmptyBytes; | 5876 | update.TextureAnim = part.TextureAnimation ?? Utils.EmptyBytes; |
5833 | update.TextureEntry = part.Shape.TextureEntry ?? Utils.EmptyBytes; | 5877 | update.TextureEntry = part.Shape.TextureEntry ?? Utils.EmptyBytes; |
5834 | update.Scale = part.Shape.Scale; | 5878 | update.Scale = part.Shape.Scale; |
5835 | update.Text = Util.StringToBytes256(part.Text); | 5879 | update.Text = Util.StringToBytes(part.Text, 255); |
5836 | update.MediaURL = Util.StringToBytes256(part.MediaUrl); | 5880 | update.MediaURL = Util.StringToBytes(part.MediaUrl, 255); |
5837 | 5881 | ||
5838 | #region PrimFlags | 5882 | #region PrimFlags |
5839 | 5883 | ||
@@ -6234,20 +6278,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
6234 | /// <param name='x'></param> | 6278 | /// <param name='x'></param> |
6235 | private bool CheckAgentCameraUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) | 6279 | private bool CheckAgentCameraUpdateSignificance(AgentUpdatePacket.AgentDataBlock x) |
6236 | { | 6280 | { |
6237 | float vdelta = Vector3.Distance(x.CameraAtAxis, m_thisAgentUpdateArgs.CameraAtAxis); | 6281 | if(Math.Abs(x.CameraCenter.X - m_thisAgentUpdateArgs.CameraCenter.X) > VDELTA || |
6238 | if((vdelta > VDELTA)) | 6282 | Math.Abs(x.CameraCenter.Y - m_thisAgentUpdateArgs.CameraCenter.Y) > VDELTA || |
6239 | return true; | 6283 | Math.Abs(x.CameraCenter.Z - m_thisAgentUpdateArgs.CameraCenter.Z) > VDELTA || |
6240 | 6284 | ||
6241 | vdelta = Vector3.Distance(x.CameraCenter, m_thisAgentUpdateArgs.CameraCenter); | 6285 | Math.Abs(x.CameraAtAxis.X - m_thisAgentUpdateArgs.CameraAtAxis.X) > VDELTA || |
6242 | if((vdelta > VDELTA)) | 6286 | Math.Abs(x.CameraAtAxis.Y - m_thisAgentUpdateArgs.CameraAtAxis.Y) > VDELTA || |
6243 | return true; | 6287 | // Math.Abs(x.CameraAtAxis.Z - m_thisAgentUpdateArgs.CameraAtAxis.Z) > VDELTA || |
6244 | 6288 | ||
6245 | vdelta = Vector3.Distance(x.CameraLeftAxis, m_thisAgentUpdateArgs.CameraLeftAxis); | 6289 | Math.Abs(x.CameraLeftAxis.X - m_thisAgentUpdateArgs.CameraLeftAxis.X) > VDELTA || |
6246 | if((vdelta > VDELTA)) | 6290 | Math.Abs(x.CameraLeftAxis.Y - m_thisAgentUpdateArgs.CameraLeftAxis.Y) > VDELTA || |
6247 | return true; | 6291 | // Math.Abs(x.CameraLeftAxis.Z - m_thisAgentUpdateArgs.CameraLeftAxis.Z) > VDELTA || |
6248 | 6292 | ||
6249 | vdelta = Vector3.Distance(x.CameraUpAxis, m_thisAgentUpdateArgs.CameraUpAxis); | 6293 | Math.Abs(x.CameraUpAxis.X - m_thisAgentUpdateArgs.CameraUpAxis.X) > VDELTA || |
6250 | if((vdelta > VDELTA)) | 6294 | Math.Abs(x.CameraUpAxis.Y - m_thisAgentUpdateArgs.CameraUpAxis.Y) > VDELTA |
6295 | // Math.Abs(x.CameraLeftAxis.Z - m_thisAgentUpdateArgs.CameraLeftAxis.Z) > VDELTA || | ||
6296 | ) | ||
6251 | return true; | 6297 | return true; |
6252 | 6298 | ||
6253 | return false; | 6299 | return false; |