aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs65
1 files changed, 47 insertions, 18 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index b468dde..973537e 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -403,12 +403,6 @@ namespace OpenSim.Region.Framework.Scenes
403 set { m_parentPosition = value; } 403 set { m_parentPosition = value; }
404 } 404 }
405 405
406 public int MaxPrimsPerFrame
407 {
408 get { return m_sceneViewer.MaxPrimsPerFrame; }
409 set { m_sceneViewer.MaxPrimsPerFrame = value; }
410 }
411
412 /// <summary> 406 /// <summary>
413 /// Absolute position of this avatar in 'region cordinates' 407 /// Absolute position of this avatar in 'region cordinates'
414 /// </summary> 408 /// </summary>
@@ -2456,11 +2450,10 @@ namespace OpenSim.Region.Framework.Scenes
2456 m_perfMonMS = Environment.TickCount; 2450 m_perfMonMS = Environment.TickCount;
2457 2451
2458 Vector3 pos = m_pos; 2452 Vector3 pos = m_pos;
2459 Vector3 vel = Velocity;
2460 Quaternion rot = m_bodyRot;
2461 pos.Z -= m_appearance.HipOffset; 2453 pos.Z -= m_appearance.HipOffset;
2462 remoteClient.SendAvatarTerseUpdate(m_regionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId, new Vector3(pos.X, pos.Y, pos.Z), 2454
2463 new Vector3(vel.X, vel.Y, vel.Z), rot, m_uuid); 2455 remoteClient.SendAvatarTerseUpdate(new SendAvatarTerseData(m_regionHandle, (ushort)(m_scene.TimeDilation * ushort.MaxValue), LocalId,
2456 pos, m_velocity, m_rotation, m_uuid, GetUpdatePriority(remoteClient)));
2464 2457
2465 m_scene.StatsReporter.AddAgentTime(Environment.TickCount - m_perfMonMS); 2458 m_scene.StatsReporter.AddAgentTime(Environment.TickCount - m_perfMonMS);
2466 m_scene.StatsReporter.AddAgentUpdates(1); 2459 m_scene.StatsReporter.AddAgentUpdates(1);
@@ -2474,7 +2467,7 @@ namespace OpenSim.Region.Framework.Scenes
2474 { 2467 {
2475 m_perfMonMS = Environment.TickCount; 2468 m_perfMonMS = Environment.TickCount;
2476 2469
2477 m_scene.Broadcast(SendTerseUpdateToClient); 2470 m_scene.ForEachClient(SendTerseUpdateToClient);
2478 2471
2479 m_lastVelocity = m_velocity; 2472 m_lastVelocity = m_velocity;
2480 lastPhysPos = AbsolutePosition; 2473 lastPhysPos = AbsolutePosition;
@@ -2566,9 +2559,9 @@ namespace OpenSim.Region.Framework.Scenes
2566 Vector3 pos = m_pos; 2559 Vector3 pos = m_pos;
2567 pos.Z -= m_appearance.HipOffset; 2560 pos.Z -= m_appearance.HipOffset;
2568 2561
2569 remoteAvatar.m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, 2562 remoteAvatar.m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid,
2570 LocalId, m_pos, m_appearance.Texture.GetBytes(), 2563 LocalId, m_pos, m_appearance.Texture.GetBytes(),
2571 m_parentID, rot); 2564 m_parentID, rot));
2572 m_scene.StatsReporter.AddAgentUpdates(1); 2565 m_scene.StatsReporter.AddAgentUpdates(1);
2573 } 2566 }
2574 2567
@@ -2637,8 +2630,8 @@ namespace OpenSim.Region.Framework.Scenes
2637 Vector3 pos = m_pos; 2630 Vector3 pos = m_pos;
2638 pos.Z -= m_appearance.HipOffset; 2631 pos.Z -= m_appearance.HipOffset;
2639 2632
2640 m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId, 2633 m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
2641 m_pos, m_appearance.Texture.GetBytes(), m_parentID, rot); 2634 m_pos, m_appearance.Texture.GetBytes(), m_parentID, rot));
2642 2635
2643 if (!m_isChildAgent) 2636 if (!m_isChildAgent)
2644 { 2637 {
@@ -2744,8 +2737,8 @@ namespace OpenSim.Region.Framework.Scenes
2744 } 2737 }
2745 2738
2746 Quaternion rot = m_bodyRot; 2739 Quaternion rot = m_bodyRot;
2747 m_controllingClient.SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId, 2740 m_controllingClient.SendAvatarData(new SendAvatarData(m_regionInfo.RegionHandle, m_firstname, m_lastname, m_grouptitle, m_uuid, LocalId,
2748 m_pos, m_appearance.Texture.GetBytes(), m_parentID, rot); 2741 m_pos, m_appearance.Texture.GetBytes(), m_parentID, rot));
2749 2742
2750 } 2743 }
2751 2744
@@ -2776,7 +2769,7 @@ namespace OpenSim.Region.Framework.Scenes
2776 if (m_isChildAgent) 2769 if (m_isChildAgent)
2777 return; 2770 return;
2778 2771
2779 m_scene.Broadcast( 2772 m_scene.ForEachClient(
2780 delegate(IClientAPI client) { client.SendAnimations(animations, seqs, m_controllingClient.AgentId, objectIDs); }); 2773 delegate(IClientAPI client) { client.SendAnimations(animations, seqs, m_controllingClient.AgentId, objectIDs); });
2781 } 2774 }
2782 2775
@@ -3882,5 +3875,41 @@ namespace OpenSim.Region.Framework.Scenes
3882 } 3875 }
3883 } 3876 }
3884 } 3877 }
3878
3879 public double GetUpdatePriority(IClientAPI client)
3880 {
3881 switch (Scene.UpdatePrioritizationScheme)
3882 {
3883 case Scene.UpdatePrioritizationSchemes.Time:
3884 return GetPriorityByTime();
3885 case Scene.UpdatePrioritizationSchemes.Distance:
3886 return GetPriorityByDistance(client);
3887 case Scene.UpdatePrioritizationSchemes.SimpleAngularDistance:
3888 return GetPriorityByDistance(client);
3889 default:
3890 throw new InvalidOperationException("UpdatePrioritizationScheme not defined.");
3891 }
3892 }
3893
3894 private double GetPriorityByTime()
3895 {
3896 return DateTime.Now.ToOADate();
3897 }
3898
3899 private double GetPriorityByDistance(IClientAPI client)
3900 {
3901 ScenePresence presence = Scene.GetScenePresence(client.AgentId);
3902 if (presence != null)
3903 {
3904 return GetPriorityByDistance((presence.IsChildAgent) ?
3905 presence.AbsolutePosition : presence.CameraPosition);
3906 }
3907 return double.NaN;
3908 }
3909
3910 private double GetPriorityByDistance(Vector3 position)
3911 {
3912 return Vector3.Distance(AbsolutePosition, position);
3913 }
3885 } 3914 }
3886} 3915}