From 285dfe305550dc3f47f934ef96ae0c1b0b87aa60 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Tue, 14 Apr 2009 03:22:02 +0000 Subject: Add the RegionLoaded(Scene) API to the new region module interface to allow region modules to use another region module's interfaces and events in a scene context --- .../RegionModulesControllerPlugin.cs | 20 ++++++++++++++++++++ .../CoreModules/World/Terrain/TerrainModule.cs | 4 ++++ .../Region/Framework/Interfaces/IRegionModuleBase.cs | 13 +++++++++++++ 3 files changed, 37 insertions(+) (limited to 'OpenSim') diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs index 49a400a..1914120 100644 --- a/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs +++ b/OpenSim/ApplicationPlugins/RegionModulesController/RegionModulesControllerPlugin.cs @@ -174,6 +174,26 @@ namespace OpenSim.ApplicationPlugins.RegionModulesController module.AddRegion(scene); scene.AddRegionModule(module.Name, module); } + + // This is needed for all module types. Modules will register + // Interfaces with scene in AddScene, and will also need a means + // to access interfaces registered by other modules. Without + // this extra method, a module attempting to use another modules's + // interface would be successful only depending on load order, + // which can't be depended upon, or modules would need to resort + // to ugly kludges to attempt to request interfaces when needed + // and unneccessary caching logic repeated in all modules. + // The extra function stub is just that much cleaner + // + foreach (ISharedRegionModule module in m_sharedInstances) + { + module.RegionLoaded(scene); + } + + foreach (INonSharedRegionModule module in list) + { + module.RegionLoaded(scene); + } } public void RemoveRegionFromModules (Scene scene) diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 9f1867f..5893a11 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs @@ -136,6 +136,10 @@ namespace OpenSim.Region.CoreModules.World.Terrain LoadPlugins(); } + public void RegionLoaded(Scene scene) + { + } + public void RemoveRegion(Scene scene) { lock (m_scene) diff --git a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs index 265b464..9d2327a 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs +++ b/OpenSim/Region/Framework/Interfaces/IRegionModuleBase.cs @@ -71,6 +71,19 @@ namespace OpenSim.Region.Framework.Interfaces /// A /// void RemoveRegion(Scene scene); + + /// + /// This will be called once for every scene loaded. In a shared module + /// this will be multiple times in one instance, while a nonshared + /// module instance will only be called once. + /// This method is called after AddRegion has been called in all + /// modules for that scene, providing an opportunity to request + /// another module's interface, or hook an event from another module. + /// + /// + /// A + /// + void RegionLoaded(Scene scene); } } -- cgit v1.1