aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
authorTeravus Ovares2008-05-30 00:48:57 +0000
committerTeravus Ovares2008-05-30 00:48:57 +0000
commitcdfb1f3623fc99429f638a589e91929d518a1ab4 (patch)
tree27746a7b2745c47134154aaa2e50ec1579d2ce0a /OpenSim/Region/Environment
parent* Caches UUIDName requests (diff)
downloadopensim-SC-cdfb1f3623fc99429f638a589e91929d518a1ab4.zip
opensim-SC-cdfb1f3623fc99429f638a589e91929d518a1ab4.tar.gz
opensim-SC-cdfb1f3623fc99429f638a589e91929d518a1ab4.tar.bz2
opensim-SC-cdfb1f3623fc99429f638a589e91929d518a1ab4.tar.xz
* Updated sun module to only send sun updates to root agents. Because it was sending updates to both root and child agents, you'll still get sun jitter until this revision is adopted by every region nearby.
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs57
1 files changed, 54 insertions, 3 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs
index 1bdc702..6e8c28a 100644
--- a/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Sun/SunModule.cs
@@ -95,6 +95,7 @@ namespace OpenSim.Region.Environment.Modules
95 private LLVector3 Velocity = new LLVector3(0,0,0); 95 private LLVector3 Velocity = new LLVector3(0,0,0);
96 private LLQuaternion Tilt = new LLQuaternion(1,0,0,0); 96 private LLQuaternion Tilt = new LLQuaternion(1,0,0,0);
97 97
98 private Dictionary<LLUUID, ulong> m_rootAgents = new Dictionary<LLUUID, ulong>();
98 99
99 // Current time in elpased seconds since Jan 1st 1970 100 // Current time in elpased seconds since Jan 1st 1970
100 private ulong CurrentTime 101 private ulong CurrentTime
@@ -183,7 +184,10 @@ namespace OpenSim.Region.Environment.Modules
183 // Insert our event handling hooks 184 // Insert our event handling hooks
184 185
185 scene.EventManager.OnFrame += SunUpdate; 186 scene.EventManager.OnFrame += SunUpdate;
186 scene.EventManager.OnNewClient += SunToClient; 187 //scene.EventManager.OnNewClient += SunToClient;
188 scene.EventManager.OnMakeChildAgent += MakeChildAgent;
189 scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
190 scene.EventManager.OnClientClosed += ClientLoggedOut;
187 191
188 ready = true; 192 ready = true;
189 193
@@ -205,7 +209,10 @@ namespace OpenSim.Region.Environment.Modules
205 ready = false; 209 ready = false;
206 // Remove our hooks 210 // Remove our hooks
207 m_scene.EventManager.OnFrame -= SunUpdate; 211 m_scene.EventManager.OnFrame -= SunUpdate;
208 m_scene.EventManager.OnNewClient -= SunToClient; 212 // m_scene.EventManager.OnNewClient -= SunToClient;
213 m_scene.EventManager.OnMakeChildAgent -= MakeChildAgent;
214 m_scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel;
215 m_scene.EventManager.OnClientClosed += ClientLoggedOut;
209 } 216 }
210 217
211 public string Name 218 public string Name
@@ -243,7 +250,8 @@ namespace OpenSim.Region.Environment.Modules
243 List<ScenePresence> avatars = m_scene.GetAvatars(); 250 List<ScenePresence> avatars = m_scene.GetAvatars();
244 foreach (ScenePresence avatar in avatars) 251 foreach (ScenePresence avatar in avatars)
245 { 252 {
246 avatar.ControllingClient.SendSunPos(Position, Velocity, CurrentTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition); 253 if (!avatar.IsChildAgent)
254 avatar.ControllingClient.SendSunPos(Position, Velocity, CurrentTime, SecondsPerSunCycle, SecondsPerYear, OrbitalPosition);
247 } 255 }
248 256
249 // set estate settings for region access to sun position 257 // set estate settings for region access to sun position
@@ -303,5 +311,48 @@ namespace OpenSim.Region.Environment.Modules
303 // m_log.Debug("[SUN] Velocity("+Velocity.X+","+Velocity.Y+","+Velocity.Z+")"); 311 // m_log.Debug("[SUN] Velocity("+Velocity.X+","+Velocity.Y+","+Velocity.Z+")");
304 312
305 } 313 }
314
315 private void ClientLoggedOut(LLUUID AgentId)
316 {
317 lock (m_rootAgents)
318 {
319 if (m_rootAgents.ContainsKey(AgentId))
320 {
321 m_rootAgents.Remove(AgentId);
322 m_log.Info("[SUN]: Removing " + AgentId + ". Agent logged out.");
323 }
324 }
325 }
326
327 private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, LLUUID regionID)
328 {
329 lock (m_rootAgents)
330 {
331 if (m_rootAgents.ContainsKey(avatar.UUID))
332 {
333 m_rootAgents[avatar.UUID] = avatar.RegionHandle;
334 }
335 else
336 {
337 m_rootAgents.Add(avatar.UUID, avatar.RegionHandle);
338 SunToClient(avatar.ControllingClient);
339 }
340 }
341 //m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString());
342 }
343
344 private void MakeChildAgent(ScenePresence avatar)
345 {
346 lock (m_rootAgents)
347 {
348 if (m_rootAgents.ContainsKey(avatar.UUID))
349 {
350 if (m_rootAgents[avatar.UUID] == avatar.RegionHandle)
351 {
352 m_rootAgents.Remove(avatar.UUID);
353 }
354 }
355 }
356 }
306 } 357 }
307} 358}