aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie2013-02-12 01:02:16 +0100
committerMelanie2013-02-12 01:02:16 +0100
commit04235e58e87ae42617111cad2884e42785914d4e (patch)
tree9cccb05ea7355be02d2e4d9bef5b9b1da3225afa /OpenSim/Region
parentMake keyframes use the sim's frame timer (diff)
downloadopensim-SC-04235e58e87ae42617111cad2884e42785914d4e.zip
opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.gz
opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.bz2
opensim-SC-04235e58e87ae42617111cad2884e42785914d4e.tar.xz
Push updates from keyframe directly to the front of the output queue rather
than through the update system.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs20
-rw-r--r--OpenSim/Region/Framework/Scenes/KeyframeMotion.cs12
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs14
4 files changed, 44 insertions, 9 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index ca15e3e..8d46415 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3721,6 +3721,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3721 /// </summary> 3721 /// </summary>
3722 public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags) 3722 public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
3723 { 3723 {
3724 if ((updateFlags & PrimUpdateFlags.Immediate) != 0)
3725 {
3726 SendUnqueuedTerseUpdate((SceneObjectPart)entity);
3727 return;
3728 }
3729
3724 if (entity is SceneObjectPart) 3730 if (entity is SceneObjectPart)
3725 { 3731 {
3726 SceneObjectPart e = (SceneObjectPart)entity; 3732 SceneObjectPart e = (SceneObjectPart)entity;
@@ -4075,6 +4081,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4075 ProcessEntityUpdates(-1); 4081 ProcessEntityUpdates(-1);
4076 } 4082 }
4077 4083
4084 public void SendUnqueuedTerseUpdate(SceneObjectPart part)
4085 {
4086 ImprovedTerseObjectUpdatePacket packet
4087 = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
4088 PacketType.ImprovedTerseObjectUpdate);
4089 packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
4090 packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
4091 packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
4092
4093 packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
4094
4095 OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
4096 }
4097
4078 #endregion Primitive Packet/Data Sending Methods 4098 #endregion Primitive Packet/Data Sending Methods
4079 4099
4080 // These are used to implement an adaptive backoff in the number 4100 // These are used to implement an adaptive backoff in the number
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 75b16dc..722c031 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -417,7 +417,7 @@ namespace OpenSim.Region.Framework.Scenes
417 417
418 m_group.RootPart.Velocity = Vector3.Zero; 418 m_group.RootPart.Velocity = Vector3.Zero;
419 m_group.RootPart.AngularVelocity = Vector3.Zero; 419 m_group.RootPart.AngularVelocity = Vector3.Zero;
420 m_group.SendGroupRootTerseUpdate(); 420 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
421// m_group.RootPart.ScheduleTerseUpdate(); 421// m_group.RootPart.ScheduleTerseUpdate();
422 m_frames.Clear(); 422 m_frames.Clear();
423 } 423 }
@@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
429 429
430 m_group.RootPart.Velocity = Vector3.Zero; 430 m_group.RootPart.Velocity = Vector3.Zero;
431 m_group.RootPart.AngularVelocity = Vector3.Zero; 431 m_group.RootPart.AngularVelocity = Vector3.Zero;
432 m_group.SendGroupRootTerseUpdate(); 432 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
433// m_group.RootPart.ScheduleTerseUpdate(); 433// m_group.RootPart.ScheduleTerseUpdate();
434 434
435 } 435 }
@@ -551,7 +551,7 @@ namespace OpenSim.Region.Framework.Scenes
551 if (m_group.RootPart.Velocity != Vector3.Zero) 551 if (m_group.RootPart.Velocity != Vector3.Zero)
552 { 552 {
553 m_group.RootPart.Velocity = Vector3.Zero; 553 m_group.RootPart.Velocity = Vector3.Zero;
554 m_group.SendGroupRootTerseUpdate(); 554 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
555 555
556 } 556 }
557 return; 557 return;
@@ -695,7 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
695 695
696 if (update) 696 if (update)
697 { 697 {
698 m_group.SendGroupRootTerseUpdate(); 698 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
699 } 699 }
700 } 700 }
701 701
@@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes
731 if (m_group.RootPart.Velocity != Vector3.Zero) 731 if (m_group.RootPart.Velocity != Vector3.Zero)
732 { 732 {
733 m_group.RootPart.Velocity = Vector3.Zero; 733 m_group.RootPart.Velocity = Vector3.Zero;
734 m_group.SendGroupRootTerseUpdate(); 734 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
735// m_group.RootPart.ScheduleTerseUpdate(); 735// m_group.RootPart.ScheduleTerseUpdate();
736 } 736 }
737 } 737 }
@@ -743,7 +743,7 @@ namespace OpenSim.Region.Framework.Scenes
743 if (m_group != null) 743 if (m_group != null)
744 { 744 {
745 m_group.RootPart.Velocity = Vector3.Zero; 745 m_group.RootPart.Velocity = Vector3.Zero;
746 m_group.SendGroupRootTerseUpdate(); 746 m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
747// m_group.RootPart.ScheduleTerseUpdate(); 747// m_group.RootPart.ScheduleTerseUpdate();
748 748
749 if (m_running) 749 if (m_running)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index ed1bbd8..910f42e 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -2638,10 +2638,15 @@ namespace OpenSim.Region.Framework.Scenes
2638 /// </summary> 2638 /// </summary>
2639 public void SendGroupRootTerseUpdate() 2639 public void SendGroupRootTerseUpdate()
2640 { 2640 {
2641 SendGroupRootTerseUpdate(0);
2642 }
2643
2644 public void SendGroupRootTerseUpdate(PrimUpdateFlags flags)
2645 {
2641 if (IsDeleted) 2646 if (IsDeleted)
2642 return; 2647 return;
2643 2648
2644 RootPart.SendTerseUpdateToAllClients(); 2649 RootPart.SendTerseUpdateToAllClients(flags);
2645 } 2650 }
2646 2651
2647 public void QueueForUpdateCheck() 2652 public void QueueForUpdateCheck()
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 20a6626..7e94eda 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3315,6 +3315,11 @@ namespace OpenSim.Region.Framework.Scenes
3315 /// </summary> 3315 /// </summary>
3316 public void SendTerseUpdateToAllClients() 3316 public void SendTerseUpdateToAllClients()
3317 { 3317 {
3318 SendTerseUpdateToAllClients(0);
3319 }
3320
3321 public void SendTerseUpdateToAllClients(PrimUpdateFlags flags)
3322 {
3318 if (ParentGroup == null || ParentGroup.Scene == null) 3323 if (ParentGroup == null || ParentGroup.Scene == null)
3319 return; 3324 return;
3320 3325
@@ -3328,7 +3333,7 @@ namespace OpenSim.Region.Framework.Scenes
3328 3333
3329 ParentGroup.Scene.ForEachClient(delegate(IClientAPI client) 3334 ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
3330 { 3335 {
3331 SendTerseUpdateToClient(client); 3336 SendTerseUpdateToClient(client, flags);
3332 }); 3337 });
3333 } 3338 }
3334 3339
@@ -5133,6 +5138,11 @@ namespace OpenSim.Region.Framework.Scenes
5133 5138
5134 public void SendTerseUpdateToClient(IClientAPI remoteClient) 5139 public void SendTerseUpdateToClient(IClientAPI remoteClient)
5135 { 5140 {
5141 SendTerseUpdateToClient(remoteClient, 0);
5142 }
5143
5144 public void SendTerseUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags flags)
5145 {
5136 if (ParentGroup.IsDeleted) 5146 if (ParentGroup.IsDeleted)
5137 return; 5147 return;
5138 5148
@@ -5146,7 +5156,7 @@ namespace OpenSim.Region.Framework.Scenes
5146 remoteClient.SendEntityUpdate( 5156 remoteClient.SendEntityUpdate(
5147 this, 5157 this,
5148 PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity 5158 PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
5149 | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity); 5159 | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity | flags);
5150 5160
5151 ParentGroup.Scene.StatsReporter.AddObjectUpdates(1); 5161 ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
5152 } 5162 }