From 765b0e4382b1e7e413d33a8f0f7669259f7bf170 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 22:20:17 +0100
Subject: Rename "Bounce" to "Restitution" in PhysicsActor as well. It appears
these values are not even used.
---
OpenSim/Region/Physics/Manager/PhysicsActor.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index 9338130..dcb2c91 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -274,7 +274,7 @@ namespace OpenSim.Region.Physics.Manager
public virtual float Density { get; set; }
public virtual float GravModifier { get; set; }
public virtual float Friction { get; set; }
- public virtual float Bounce { get; set; }
+ public virtual float Restitution { get; set; }
///
/// Position of this actor.
--
cgit v1.1
From 8008938550f5f60b3233a09ca642ea6a45052704 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 7 Feb 2013 23:34:47 +0000
Subject: Actually plumb the new values to physics.
---
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 0d2da03..20a6626 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1689,6 +1689,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Density = Density;
}
}
@@ -1708,6 +1712,9 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.GravModifier = GravityModifier;
}
}
@@ -1726,6 +1733,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Friction = Friction;
}
}
@@ -1744,6 +1755,10 @@ namespace OpenSim.Region.Framework.Scenes
if (ParentGroup != null)
ParentGroup.HasGroupChanged = true;
+
+ PhysicsActor pa = PhysActor;
+ if (pa != null)
+ pa.Restitution = Restitution;
}
}
@@ -4657,6 +4672,11 @@ namespace OpenSim.Region.Framework.Scenes
pa.SOPName = this.Name; // save object into the PhysActor so ODE internals know the joint/body info
pa.SetMaterial(Material);
+ pa.Density = Density;
+ pa.GravModifier = GravityModifier;
+ pa.Friction = Friction;
+ pa.Restitution = Restitution;
+
if (VolumeDetectActive) // change if not the default only
pa.SetVolumeDetect(1);
--
cgit v1.1
From e31bc8dc963ff9bc09f0c2dbd68b8a43fee851d6 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 11 Feb 2013 23:07:04 +0100
Subject: Refactor KeyframeMotion to use one timer class per scene
---
OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 95 ++++++++++++++++++-----
1 file changed, 75 insertions(+), 20 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 5a1fd13..6dc6504 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -22,25 +22,36 @@ using log4net;
namespace OpenSim.Region.Framework.Scenes
{
- public static class KeyframeTimer
+ public class KeyframeTimer
{
- private static Timer m_timer;
- private static Dictionary m_motions = new Dictionary();
- private static object m_lockObject = new object();
- private static object m_timerLock = new object();
- public const double timerInterval = 50.0;
+ private static Dictionarym_timers =
+ new Dictionary();
- static KeyframeTimer()
+ private Timer m_timer;
+ private Dictionary m_motions = new Dictionary();
+ private object m_lockObject = new object();
+ private object m_timerLock = new object();
+ private const double m_tickDuration = 50.0;
+ private Scene m_scene;
+
+ public double TickDuration
+ {
+ get { return m_tickDuration; }
+ }
+
+ public KeyframeTimer(Scene scene)
{
m_timer = new Timer();
- m_timer.Interval = timerInterval;
+ m_timer.Interval = TickDuration;
m_timer.AutoReset = true;
m_timer.Elapsed += OnTimer;
+ m_scene = scene;
+
m_timer.Start();
}
- private static void OnTimer(object sender, ElapsedEventArgs ea)
+ private void OnTimer(object sender, ElapsedEventArgs ea)
{
if (!Monitor.TryEnter(m_timerLock))
return;
@@ -58,7 +69,7 @@ namespace OpenSim.Region.Framework.Scenes
{
try
{
- m.OnTimer();
+ m.OnTimer(TickDuration);
}
catch (Exception inner)
{
@@ -78,17 +89,44 @@ namespace OpenSim.Region.Framework.Scenes
public static void Add(KeyframeMotion motion)
{
- lock (m_lockObject)
+ KeyframeTimer timer;
+
+ if (motion.Scene == null)
+ return;
+
+ lock (m_timers)
{
- m_motions[motion] = null;
+ if (!m_timers.TryGetValue(motion.Scene, out timer))
+ {
+ timer = new KeyframeTimer(motion.Scene);
+ m_timers[motion.Scene] = timer;
+ }
+ }
+
+ lock (timer.m_lockObject)
+ {
+ timer.m_motions[motion] = null;
}
}
public static void Remove(KeyframeMotion motion)
{
- lock (m_lockObject)
+ KeyframeTimer timer;
+
+ if (motion.Scene == null)
+ return;
+
+ lock (m_timers)
{
- m_motions.Remove(motion);
+ if (!m_timers.TryGetValue(motion.Scene, out timer))
+ {
+ return;
+ }
+ }
+
+ lock (timer.m_lockObject)
+ {
+ timer.m_motions.Remove(motion);
}
}
}
@@ -156,6 +194,7 @@ namespace OpenSim.Region.Framework.Scenes
private DataFormat m_data = DataFormat.Translation | DataFormat.Rotation;
private bool m_running = false;
+
[NonSerialized()]
private bool m_selected = false;
@@ -163,6 +202,14 @@ namespace OpenSim.Region.Framework.Scenes
private int m_skipLoops = 0;
+ [NonSerialized()]
+ private Scene m_scene;
+
+ public Scene Scene
+ {
+ get { return m_scene; }
+ }
+
public DataFormat Data
{
get { return m_data; }
@@ -221,8 +268,12 @@ namespace OpenSim.Region.Framework.Scenes
newMotion.m_group = grp;
- if (grp != null && grp.IsSelected)
- newMotion.m_selected = true;
+ if (grp != null)
+ {
+ newMotion.m_scene = grp.Scene;
+ if (grp.IsSelected)
+ newMotion.m_selected = true;
+ }
newMotion.m_timerStopped = false;
newMotion.m_isCrossing = false;
@@ -246,6 +297,8 @@ namespace OpenSim.Region.Framework.Scenes
return;
m_group = grp;
+ m_scene = grp.Scene;
+
Vector3 grppos = grp.AbsolutePosition;
Vector3 offset = grppos - m_serializedPosition;
// avoid doing it more than once
@@ -278,6 +331,7 @@ namespace OpenSim.Region.Framework.Scenes
{
m_basePosition = grp.AbsolutePosition;
m_baseRotation = grp.GroupRotation;
+ m_scene = grp.Scene;
}
m_timerStopped = true;
@@ -297,6 +351,7 @@ namespace OpenSim.Region.Framework.Scenes
KeyframeMotion newmotion = new KeyframeMotion(null, m_mode, m_data);
newmotion.m_group = newgrp;
+ newmotion.m_scene = newgrp.Scene;
if (m_keyframes != null)
{
@@ -482,7 +537,7 @@ namespace OpenSim.Region.Framework.Scenes
}
}
- public void OnTimer()
+ public void OnTimer(double tickDuration)
{
if (m_skipLoops > 0)
{
@@ -546,16 +601,16 @@ namespace OpenSim.Region.Framework.Scenes
}
m_currentFrame = m_frames[0];
- m_currentFrame.TimeMS += (int)KeyframeTimer.timerInterval;
+ m_currentFrame.TimeMS += (int)tickDuration;
//force a update on a keyframe transition
update = true;
}
- m_currentFrame.TimeMS -= (int)KeyframeTimer.timerInterval;
+ m_currentFrame.TimeMS -= (int)tickDuration;
// Do the frame processing
- double steps = (double)m_currentFrame.TimeMS / KeyframeTimer.timerInterval;
+ double steps = (double)m_currentFrame.TimeMS / tickDuration;
if (steps <= 0.0)
{
--
cgit v1.1
From e85a6237bfc0f00de4a183e29e515fa5baf1aa7f Mon Sep 17 00:00:00 2001
From: Melanie
Date: Mon, 11 Feb 2013 23:49:05 +0100
Subject: Make keyframes use the sim's frame timer
---
OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 6dc6504..75b16dc 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -27,12 +27,11 @@ namespace OpenSim.Region.Framework.Scenes
private static Dictionarym_timers =
new Dictionary();
- private Timer m_timer;
private Dictionary m_motions = new Dictionary();
private object m_lockObject = new object();
- private object m_timerLock = new object();
private const double m_tickDuration = 50.0;
private Scene m_scene;
+ private int m_prevTick;
public double TickDuration
{
@@ -41,20 +40,18 @@ namespace OpenSim.Region.Framework.Scenes
public KeyframeTimer(Scene scene)
{
- m_timer = new Timer();
- m_timer.Interval = TickDuration;
- m_timer.AutoReset = true;
- m_timer.Elapsed += OnTimer;
+ m_prevTick = Util.EnvironmentTickCount();
m_scene = scene;
- m_timer.Start();
+ m_scene.EventManager.OnFrame += OnTimer;
}
- private void OnTimer(object sender, ElapsedEventArgs ea)
+ private void OnTimer()
{
- if (!Monitor.TryEnter(m_timerLock))
- return;
+ int thisTick = Util.EnvironmentTickCount();
+ int tickdiff = Util.EnvironmentTickCountSubtract(thisTick, m_prevTick);
+ m_prevTick = thisTick;
try
{
@@ -69,7 +66,7 @@ namespace OpenSim.Region.Framework.Scenes
{
try
{
- m.OnTimer(TickDuration);
+ m.OnTimer(tickdiff);
}
catch (Exception inner)
{
@@ -81,10 +78,6 @@ namespace OpenSim.Region.Framework.Scenes
{
// Keep running no matter what
}
- finally
- {
- Monitor.Exit(m_timerLock);
- }
}
public static void Add(KeyframeMotion motion)
--
cgit v1.1
From 04235e58e87ae42617111cad2884e42785914d4e Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 12 Feb 2013 01:02:16 +0100
Subject: Push updates from keyframe directly to the front of the output queue
rather than through the update system.
---
OpenSim/Framework/IClientAPI.cs | 3 ++-
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 20 ++++++++++++++++++++
OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 12 ++++++------
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 7 ++++++-
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 14 ++++++++++++--
5 files changed, 46 insertions(+), 10 deletions(-)
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 0465042..96d2735 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -698,7 +698,8 @@ namespace OpenSim.Framework
ExtraData = 1 << 20,
Sound = 1 << 21,
Joint = 1 << 22,
- FullUpdate = UInt32.MaxValue
+ Immediate = 1 << 23,
+ FullUpdate = UInt32.MaxValue & (uint)~((uint)1<<23)
}
public static class PrimUpdateFlagsExtensions
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
///
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
{
+ if ((updateFlags & PrimUpdateFlags.Immediate) != 0)
+ {
+ SendUnqueuedTerseUpdate((SceneObjectPart)entity);
+ return;
+ }
+
if (entity is SceneObjectPart)
{
SceneObjectPart e = (SceneObjectPart)entity;
@@ -4075,6 +4081,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ProcessEntityUpdates(-1);
}
+ public void SendUnqueuedTerseUpdate(SceneObjectPart part)
+ {
+ ImprovedTerseObjectUpdatePacket packet
+ = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
+ PacketType.ImprovedTerseObjectUpdate);
+ packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
+ packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
+ packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
+
+ packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
+
+ OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
+ }
+
#endregion Primitive Packet/Data Sending Methods
// 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
m_group.RootPart.Velocity = Vector3.Zero;
m_group.RootPart.AngularVelocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
// m_group.RootPart.ScheduleTerseUpdate();
m_frames.Clear();
}
@@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
m_group.RootPart.Velocity = Vector3.Zero;
m_group.RootPart.AngularVelocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
// m_group.RootPart.ScheduleTerseUpdate();
}
@@ -551,7 +551,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group.RootPart.Velocity != Vector3.Zero)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
}
return;
@@ -695,7 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
if (update)
{
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
}
}
@@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group.RootPart.Velocity != Vector3.Zero)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
// m_group.RootPart.ScheduleTerseUpdate();
}
}
@@ -743,7 +743,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group != null)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate();
+ m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
// m_group.RootPart.ScheduleTerseUpdate();
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
///
public void SendGroupRootTerseUpdate()
{
+ SendGroupRootTerseUpdate(0);
+ }
+
+ public void SendGroupRootTerseUpdate(PrimUpdateFlags flags)
+ {
if (IsDeleted)
return;
- RootPart.SendTerseUpdateToAllClients();
+ RootPart.SendTerseUpdateToAllClients(flags);
}
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
///
public void SendTerseUpdateToAllClients()
{
+ SendTerseUpdateToAllClients(0);
+ }
+
+ public void SendTerseUpdateToAllClients(PrimUpdateFlags flags)
+ {
if (ParentGroup == null || ParentGroup.Scene == null)
return;
@@ -3328,7 +3333,7 @@ namespace OpenSim.Region.Framework.Scenes
ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
{
- SendTerseUpdateToClient(client);
+ SendTerseUpdateToClient(client, flags);
});
}
@@ -5133,6 +5138,11 @@ namespace OpenSim.Region.Framework.Scenes
public void SendTerseUpdateToClient(IClientAPI remoteClient)
{
+ SendTerseUpdateToClient(remoteClient, 0);
+ }
+
+ public void SendTerseUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags flags)
+ {
if (ParentGroup.IsDeleted)
return;
@@ -5146,7 +5156,7 @@ namespace OpenSim.Region.Framework.Scenes
remoteClient.SendEntityUpdate(
this,
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
- | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
+ | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity | flags);
ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
}
--
cgit v1.1
From 048e904f051ccc38e7d00936b45288af3c6fc010 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 12 Feb 2013 01:13:30 +0100
Subject: Use actual time dilation for unqueued updates
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 8d46415..81a772b 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -4087,7 +4087,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
PacketType.ImprovedTerseObjectUpdate);
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
- packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
+ packet.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f);
packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
--
cgit v1.1
From 2065590232894acb8dae15ff935dfae1405326a5 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 12 Feb 2013 03:15:32 +0100
Subject: Revert "Use actual time dilation for unqueued updates"
This reverts commit 048e904f051ccc38e7d00936b45288af3c6fc010.
---
OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 81a772b..8d46415 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -4087,7 +4087,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
= (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
PacketType.ImprovedTerseObjectUpdate);
packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
- packet.RegionData.TimeDilation = Utils.FloatToUInt16(m_scene.TimeDilation, 0.0f, 1.0f);
+ packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
--
cgit v1.1
From 14c064c65da3d9cce045664f83daaeb7a79edcdd Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 12 Feb 2013 03:15:40 +0100
Subject: Revert "Push updates from keyframe directly to the front of the
output queue rather"
This reverts commit 04235e58e87ae42617111cad2884e42785914d4e.
---
OpenSim/Framework/IClientAPI.cs | 3 +--
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 20 --------------------
OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 12 ++++++------
OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 7 +------
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 14 ++------------
5 files changed, 10 insertions(+), 46 deletions(-)
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index 96d2735..0465042 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -698,8 +698,7 @@ namespace OpenSim.Framework
ExtraData = 1 << 20,
Sound = 1 << 21,
Joint = 1 << 22,
- Immediate = 1 << 23,
- FullUpdate = UInt32.MaxValue & (uint)~((uint)1<<23)
+ FullUpdate = UInt32.MaxValue
}
public static class PrimUpdateFlagsExtensions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 8d46415..ca15e3e 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3721,12 +3721,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
///
public void SendEntityUpdate(ISceneEntity entity, PrimUpdateFlags updateFlags)
{
- if ((updateFlags & PrimUpdateFlags.Immediate) != 0)
- {
- SendUnqueuedTerseUpdate((SceneObjectPart)entity);
- return;
- }
-
if (entity is SceneObjectPart)
{
SceneObjectPart e = (SceneObjectPart)entity;
@@ -4081,20 +4075,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
ProcessEntityUpdates(-1);
}
- public void SendUnqueuedTerseUpdate(SceneObjectPart part)
- {
- ImprovedTerseObjectUpdatePacket packet
- = (ImprovedTerseObjectUpdatePacket)PacketPool.Instance.GetPacket(
- PacketType.ImprovedTerseObjectUpdate);
- packet.RegionData.RegionHandle = m_scene.RegionInfo.RegionHandle;
- packet.RegionData.TimeDilation = Utils.FloatToUInt16(1.0f, 0.0f, 1.0f);
- packet.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1];
-
- packet.ObjectData[0] = CreateImprovedTerseBlock(part, false);
-
- OutPacket(packet, ThrottleOutPacketType.Task | ThrottleOutPacketType.HighPriority);
- }
-
#endregion Primitive Packet/Data Sending Methods
// 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 722c031..75b16dc 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -417,7 +417,7 @@ namespace OpenSim.Region.Framework.Scenes
m_group.RootPart.Velocity = Vector3.Zero;
m_group.RootPart.AngularVelocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
// m_group.RootPart.ScheduleTerseUpdate();
m_frames.Clear();
}
@@ -429,7 +429,7 @@ namespace OpenSim.Region.Framework.Scenes
m_group.RootPart.Velocity = Vector3.Zero;
m_group.RootPart.AngularVelocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
// m_group.RootPart.ScheduleTerseUpdate();
}
@@ -551,7 +551,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group.RootPart.Velocity != Vector3.Zero)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
}
return;
@@ -695,7 +695,7 @@ namespace OpenSim.Region.Framework.Scenes
if (update)
{
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
}
}
@@ -731,7 +731,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group.RootPart.Velocity != Vector3.Zero)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
// m_group.RootPart.ScheduleTerseUpdate();
}
}
@@ -743,7 +743,7 @@ namespace OpenSim.Region.Framework.Scenes
if (m_group != null)
{
m_group.RootPart.Velocity = Vector3.Zero;
- m_group.SendGroupRootTerseUpdate(PrimUpdateFlags.Immediate);
+ m_group.SendGroupRootTerseUpdate();
// m_group.RootPart.ScheduleTerseUpdate();
if (m_running)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 910f42e..ed1bbd8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -2638,15 +2638,10 @@ namespace OpenSim.Region.Framework.Scenes
///
public void SendGroupRootTerseUpdate()
{
- SendGroupRootTerseUpdate(0);
- }
-
- public void SendGroupRootTerseUpdate(PrimUpdateFlags flags)
- {
if (IsDeleted)
return;
- RootPart.SendTerseUpdateToAllClients(flags);
+ RootPart.SendTerseUpdateToAllClients();
}
public void QueueForUpdateCheck()
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 7e94eda..20a6626 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3315,11 +3315,6 @@ namespace OpenSim.Region.Framework.Scenes
///
public void SendTerseUpdateToAllClients()
{
- SendTerseUpdateToAllClients(0);
- }
-
- public void SendTerseUpdateToAllClients(PrimUpdateFlags flags)
- {
if (ParentGroup == null || ParentGroup.Scene == null)
return;
@@ -3333,7 +3328,7 @@ namespace OpenSim.Region.Framework.Scenes
ParentGroup.Scene.ForEachClient(delegate(IClientAPI client)
{
- SendTerseUpdateToClient(client, flags);
+ SendTerseUpdateToClient(client);
});
}
@@ -5138,11 +5133,6 @@ namespace OpenSim.Region.Framework.Scenes
public void SendTerseUpdateToClient(IClientAPI remoteClient)
{
- SendTerseUpdateToClient(remoteClient, 0);
- }
-
- public void SendTerseUpdateToClient(IClientAPI remoteClient, PrimUpdateFlags flags)
- {
if (ParentGroup.IsDeleted)
return;
@@ -5156,7 +5146,7 @@ namespace OpenSim.Region.Framework.Scenes
remoteClient.SendEntityUpdate(
this,
PrimUpdateFlags.Position | PrimUpdateFlags.Rotation | PrimUpdateFlags.Velocity
- | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity | flags);
+ | PrimUpdateFlags.Acceleration | PrimUpdateFlags.AngularVelocity);
ParentGroup.Scene.StatsReporter.AddObjectUpdates(1);
}
--
cgit v1.1
From d5b401a478d9756bd5ce0185896262f6985d2ade Mon Sep 17 00:00:00 2001
From: Melanie
Date: Tue, 12 Feb 2013 22:20:16 +0100
Subject: Revert "Make keyframes use the sim's frame timer"
This reverts commit e85a6237bfc0f00de4a183e29e515fa5baf1aa7f.
---
OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
index 75b16dc..6dc6504 100644
--- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
+++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs
@@ -27,11 +27,12 @@ namespace OpenSim.Region.Framework.Scenes
private static Dictionarym_timers =
new Dictionary();
+ private Timer m_timer;
private Dictionary m_motions = new Dictionary();
private object m_lockObject = new object();
+ private object m_timerLock = new object();
private const double m_tickDuration = 50.0;
private Scene m_scene;
- private int m_prevTick;
public double TickDuration
{
@@ -40,18 +41,20 @@ namespace OpenSim.Region.Framework.Scenes
public KeyframeTimer(Scene scene)
{
- m_prevTick = Util.EnvironmentTickCount();
+ m_timer = new Timer();
+ m_timer.Interval = TickDuration;
+ m_timer.AutoReset = true;
+ m_timer.Elapsed += OnTimer;
m_scene = scene;
- m_scene.EventManager.OnFrame += OnTimer;
+ m_timer.Start();
}
- private void OnTimer()
+ private void OnTimer(object sender, ElapsedEventArgs ea)
{
- int thisTick = Util.EnvironmentTickCount();
- int tickdiff = Util.EnvironmentTickCountSubtract(thisTick, m_prevTick);
- m_prevTick = thisTick;
+ if (!Monitor.TryEnter(m_timerLock))
+ return;
try
{
@@ -66,7 +69,7 @@ namespace OpenSim.Region.Framework.Scenes
{
try
{
- m.OnTimer(tickdiff);
+ m.OnTimer(TickDuration);
}
catch (Exception inner)
{
@@ -78,6 +81,10 @@ namespace OpenSim.Region.Framework.Scenes
{
// Keep running no matter what
}
+ finally
+ {
+ Monitor.Exit(m_timerLock);
+ }
}
public static void Add(KeyframeMotion motion)
--
cgit v1.1
From 4c7df6a1473e4e0a144e06f6e318251419f64af8 Mon Sep 17 00:00:00 2001
From: Melanie
Date: Thu, 14 Feb 2013 07:17:27 +0100
Subject: Small fix to sim features module
---
OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs
index 191bccf..8f38737 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/SimulatorFeaturesModule.cs
@@ -94,6 +94,8 @@ namespace OpenSim.Region.ClientStack.Linden
{
m_scene = s;
m_scene.EventManager.OnRegisterCaps += RegisterCaps;
+
+ m_scene.RegisterModuleInterface(this);
}
public void RemoveRegion(Scene s)
--
cgit v1.1