aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Framework/IScene.cs22
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Inventory.cs13
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs26
5 files changed, 41 insertions, 32 deletions
diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs
index f1b4732..76b731f 100644
--- a/OpenSim/Framework/IScene.cs
+++ b/OpenSim/Framework/IScene.cs
@@ -102,12 +102,28 @@ namespace OpenSim.Framework
102 102
103 bool TryGetScenePresence(UUID agentID, out object scenePresence); 103 bool TryGetScenePresence(UUID agentID, out object scenePresence);
104 104
105 T RequestModuleInterface<T>(); 105 /// <summary>
106 T[] RequestModuleInterfaces<T>(); 106 /// Register an interface to a region module. This allows module methods to be called directly as
107 107 /// well as via events. If there is already a module registered for this interface, it is not replaced
108 /// (is this the best behaviour?)
109 /// </summary>
110 /// <param name="mod"></param>
108 void RegisterModuleInterface<M>(M mod); 111 void RegisterModuleInterface<M>(M mod);
112
109 void StackModuleInterface<M>(M mod); 113 void StackModuleInterface<M>(M mod);
110 114
115 /// <summary>
116 /// For the given interface, retrieve the region module which implements it.
117 /// </summary>
118 /// <returns>null if there is no registered module implementing that interface</returns>
119 T RequestModuleInterface<T>();
120
121 /// <summary>
122 /// For the given interface, retrieve an array of region modules that implement it.
123 /// </summary>
124 /// <returns>an empty array if there are no registered modules implementing that interface</returns>
125 T[] RequestModuleInterfaces<T>();
126
111// void AddCommand(object module, string command, string shorthelp, string longhelp, CommandDelegate callback); 127// void AddCommand(object module, string command, string shorthelp, string longhelp, CommandDelegate callback);
112 128
113 ISceneObject DeserializeObject(string representation); 129 ISceneObject DeserializeObject(string representation);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 663aa22..26eb729 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -82,16 +82,9 @@ namespace OpenSim.Region.Framework.Scenes
82 m_log.Info("[PRIM INVENTORY]: Starting scripts in scene"); 82 m_log.Info("[PRIM INVENTORY]: Starting scripts in scene");
83 83
84 IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>(); 84 IScriptModule[] engines = RequestModuleInterfaces<IScriptModule>();
85 if (engines != null) 85
86 { 86 foreach (IScriptModule engine in engines)
87 foreach (IScriptModule engine in engines) 87 engine.StartProcessing();
88 {
89 if (engine != null)
90 {
91 engine.StartProcessing();
92 }
93 }
94 }
95 } 88 }
96 89
97 public void AddUploadedInventoryItem(UUID agentID, InventoryItemBase item) 90 public void AddUploadedInventoryItem(UUID agentID, InventoryItemBase item)
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index dee2ecb..0336fe5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -449,7 +449,7 @@ namespace OpenSim.Region.Framework.Scenes
449 } 449 }
450 else 450 else
451 { 451 {
452 return new T[] { default(T) }; 452 return new T[] {};
453 } 453 }
454 } 454 }
455 455
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 9446741..d80944b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -232,8 +232,6 @@ namespace OpenSim.Region.Framework.Scenes
232 ArrayList ret = new ArrayList(); 232 ArrayList ret = new ArrayList();
233 233
234 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); 234 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
235 if (engines == null) // No engine at all
236 return ret;
237 235
238 foreach (IScriptModule e in engines) 236 foreach (IScriptModule e in engines)
239 { 237 {
@@ -329,7 +327,7 @@ namespace OpenSim.Region.Framework.Scenes
329 private void RestoreSavedScriptState(UUID oldID, UUID newID) 327 private void RestoreSavedScriptState(UUID oldID, UUID newID)
330 { 328 {
331 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); 329 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
332 if (engines == null) // No engine at all 330 if (engines.Length == 0) // No engine at all
333 return; 331 return;
334 332
335 if (m_part.ParentGroup.m_savedScriptState.ContainsKey(oldID)) 333 if (m_part.ParentGroup.m_savedScriptState.ContainsKey(oldID))
@@ -369,6 +367,7 @@ namespace OpenSim.Region.Framework.Scenes
369 367
370 m_part.ParentGroup.m_savedScriptState[oldID] = newDoc.OuterXml; 368 m_part.ParentGroup.m_savedScriptState[oldID] = newDoc.OuterXml;
371 } 369 }
370
372 foreach (IScriptModule e in engines) 371 foreach (IScriptModule e in engines)
373 { 372 {
374 if (e != null) 373 if (e != null)
@@ -377,6 +376,7 @@ namespace OpenSim.Region.Framework.Scenes
377 break; 376 break;
378 } 377 }
379 } 378 }
379
380 m_part.ParentGroup.m_savedScriptState.Remove(oldID); 380 m_part.ParentGroup.m_savedScriptState.Remove(oldID);
381 } 381 }
382 } 382 }
@@ -1129,7 +1129,7 @@ namespace OpenSim.Region.Framework.Scenes
1129 1129
1130 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); 1130 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
1131 1131
1132 if (engines == null) // No engine at all 1132 if (engines.Length == 0) // No engine at all
1133 return ret; 1133 return ret;
1134 1134
1135 List<TaskInventoryItem> scripts = GetInventoryScripts(); 1135 List<TaskInventoryItem> scripts = GetInventoryScripts();
@@ -1157,7 +1157,7 @@ namespace OpenSim.Region.Framework.Scenes
1157 public void ResumeScripts() 1157 public void ResumeScripts()
1158 { 1158 {
1159 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>(); 1159 IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces<IScriptModule>();
1160 if (engines == null) 1160 if (engines.Length == 0)
1161 return; 1161 return;
1162 1162
1163 List<TaskInventoryItem> scripts = GetInventoryScripts(); 1163 List<TaskInventoryItem> scripts = GetInventoryScripts();
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 7d901c9..c2d3501 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -3525,23 +3525,23 @@ namespace OpenSim.Region.Framework.Scenes
3525 /// <param name="args">The arguments for the event</param> 3525 /// <param name="args">The arguments for the event</param>
3526 public void SendScriptEventToAttachments(string eventName, Object[] args) 3526 public void SendScriptEventToAttachments(string eventName, Object[] args)
3527 { 3527 {
3528 if (m_scriptEngines != null) 3528 if (m_scriptEngines.Length == 0)
3529 return;
3530
3531 lock (m_attachments)
3529 { 3532 {
3530 lock (m_attachments) 3533 foreach (SceneObjectGroup grp in m_attachments)
3531 { 3534 {
3532 foreach (SceneObjectGroup grp in m_attachments) 3535 // 16384 is CHANGED_ANIMATION
3536 //
3537 // Send this to all attachment root prims
3538 //
3539 foreach (IScriptModule m in m_scriptEngines)
3533 { 3540 {
3534 // 16384 is CHANGED_ANIMATION 3541 if (m == null) // No script engine loaded
3535 // 3542 continue;
3536 // Send this to all attachment root prims
3537 //
3538 foreach (IScriptModule m in m_scriptEngines)
3539 {
3540 if (m == null) // No script engine loaded
3541 continue;
3542 3543
3543 m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] { (int)Changed.ANIMATION }); 3544 m.PostObjectEvent(grp.RootPart.UUID, "changed", new Object[] { (int)Changed.ANIMATION });
3544 }
3545 } 3545 }
3546 } 3546 }
3547 } 3547 }