aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
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}