Revert "Make keyframes use the sim's frame timer"

This reverts commit e85a6237bf.
avinationmerge
Melanie 2013-02-12 22:20:16 +01:00
parent 14c064c65d
commit d5b401a478
1 changed files with 15 additions and 8 deletions

View File

@ -27,11 +27,12 @@ namespace OpenSim.Region.Framework.Scenes
private static Dictionary<Scene, KeyframeTimer>m_timers = private static Dictionary<Scene, KeyframeTimer>m_timers =
new Dictionary<Scene, KeyframeTimer>(); new Dictionary<Scene, KeyframeTimer>();
private Timer m_timer;
private Dictionary<KeyframeMotion, object> m_motions = new Dictionary<KeyframeMotion, object>(); private Dictionary<KeyframeMotion, object> m_motions = new Dictionary<KeyframeMotion, object>();
private object m_lockObject = new object(); private object m_lockObject = new object();
private object m_timerLock = new object();
private const double m_tickDuration = 50.0; private const double m_tickDuration = 50.0;
private Scene m_scene; private Scene m_scene;
private int m_prevTick;
public double TickDuration public double TickDuration
{ {
@ -40,18 +41,20 @@ namespace OpenSim.Region.Framework.Scenes
public KeyframeTimer(Scene scene) 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 = scene;
m_scene.EventManager.OnFrame += OnTimer; m_timer.Start();
} }
private void OnTimer() private void OnTimer(object sender, ElapsedEventArgs ea)
{ {
int thisTick = Util.EnvironmentTickCount(); if (!Monitor.TryEnter(m_timerLock))
int tickdiff = Util.EnvironmentTickCountSubtract(thisTick, m_prevTick); return;
m_prevTick = thisTick;
try try
{ {
@ -66,7 +69,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
try try
{ {
m.OnTimer(tickdiff); m.OnTimer(TickDuration);
} }
catch (Exception inner) catch (Exception inner)
{ {
@ -78,6 +81,10 @@ namespace OpenSim.Region.Framework.Scenes
{ {
// Keep running no matter what // Keep running no matter what
} }
finally
{
Monitor.Exit(m_timerLock);
}
} }
public static void Add(KeyframeMotion motion) public static void Add(KeyframeMotion motion)