diff options
author | Oren Hurvitz | 2013-11-25 19:22:09 +0200 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2014-03-11 00:55:58 +0000 |
commit | 0237d9113d3cc510fcd9f94d53631c254b8a0351 (patch) | |
tree | 41ad6cac40964b0b99b713fd59ede6e44fbcee7a | |
parent | After an object with KeyframeMotion is copied into inventory, resume the moti... (diff) | |
download | opensim-SC-0237d9113d3cc510fcd9f94d53631c254b8a0351.zip opensim-SC-0237d9113d3cc510fcd9f94d53631c254b8a0351.tar.gz opensim-SC-0237d9113d3cc510fcd9f94d53631c254b8a0351.tar.bz2 opensim-SC-0237d9113d3cc510fcd9f94d53631c254b8a0351.tar.xz |
Don't start KeyframeMotion timers until all the regions are ready. This prevents problems in megaregions (prims that think they've crossed over to other regions).
-rw-r--r-- | OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs index 29652aa..ab1e7fa 100644 --- a/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs +++ b/OpenSim/Region/Framework/Scenes/KeyframeMotion.cs | |||
@@ -47,7 +47,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
47 | { | 47 | { |
48 | public class KeyframeTimer | 48 | public class KeyframeTimer |
49 | { | 49 | { |
50 | private static Dictionary<Scene, KeyframeTimer>m_timers = | 50 | private static Dictionary<Scene, KeyframeTimer> m_timers = |
51 | new Dictionary<Scene, KeyframeTimer>(); | 51 | new Dictionary<Scene, KeyframeTimer>(); |
52 | 52 | ||
53 | private Timer m_timer; | 53 | private Timer m_timer; |
@@ -67,8 +67,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
67 | m_timer.Interval = TickDuration; | 67 | m_timer.Interval = TickDuration; |
68 | m_timer.AutoReset = true; | 68 | m_timer.AutoReset = true; |
69 | m_timer.Elapsed += OnTimer; | 69 | m_timer.Elapsed += OnTimer; |
70 | } | ||
70 | 71 | ||
71 | m_timer.Start(); | 72 | public void Start() |
73 | { | ||
74 | lock (m_timer) | ||
75 | { | ||
76 | if (!m_timer.Enabled) | ||
77 | m_timer.Start(); | ||
78 | } | ||
72 | } | 79 | } |
73 | 80 | ||
74 | private void OnTimer(object sender, ElapsedEventArgs ea) | 81 | private void OnTimer(object sender, ElapsedEventArgs ea) |
@@ -120,6 +127,25 @@ namespace OpenSim.Region.Framework.Scenes | |||
120 | { | 127 | { |
121 | timer = new KeyframeTimer(motion.Scene); | 128 | timer = new KeyframeTimer(motion.Scene); |
122 | m_timers[motion.Scene] = timer; | 129 | m_timers[motion.Scene] = timer; |
130 | |||
131 | if (!SceneManager.Instance.AllRegionsReady) | ||
132 | { | ||
133 | // Start the timers only once all the regions are ready. This is required | ||
134 | // when using megaregions, because the megaregion is correctly configured | ||
135 | // only after all the regions have been loaded. (If we don't do this then | ||
136 | // when the prim moves it might think that it crossed into a region.) | ||
137 | SceneManager.Instance.OnRegionsReadyStatusChange += delegate(SceneManager sm) | ||
138 | { | ||
139 | if (sm.AllRegionsReady) | ||
140 | timer.Start(); | ||
141 | }; | ||
142 | } | ||
143 | |||
144 | // Check again, in case the regions were started while we were adding the event handler | ||
145 | if (SceneManager.Instance.AllRegionsReady) | ||
146 | { | ||
147 | timer.Start(); | ||
148 | } | ||
123 | } | 149 | } |
124 | } | 150 | } |
125 | 151 | ||