/// <summary> /// Setup modules for a scene. /// </summary> /// <param name="scene"></param> /// <param name="config"></param> /// <param name="modules"></param> public static void SetupSceneModules(Scene scene, IConfigSource config, params object[] modules) { List <IRegionModuleBase> newModules = new List <IRegionModuleBase>(); foreach (object module in modules) { if (module is IRegionModule) { IRegionModule m = (IRegionModule)module; m.Initialise(scene, config); scene.AddModule(m.Name, m); m.PostInitialise(); } else if (module is IRegionModuleBase) { // for the new system, everything has to be initialised first, // shared modules have to be post-initialised, then all get an AddRegion with the scene IRegionModuleBase m = (IRegionModuleBase)module; m.Initialise(config); newModules.Add(m); } } foreach (IRegionModuleBase module in newModules) { if (module is ISharedRegionModule) { ((ISharedRegionModule)module).PostInitialise(); } } foreach (IRegionModuleBase module in newModules) { module.AddRegion(scene); scene.AddRegionModule(module.Name, module); } // RegionLoaded is fired after all modules have been appropriately added to all scenes foreach (IRegionModuleBase module in newModules) { module.RegionLoaded(scene); } scene.SetModuleInterfaces(); }
public void InitializeModule(IRegionModule module, Scene scene) { module.Initialise(scene, m_config); scene.AddModule(module.Name, module); m_loadedModules.Add(module); }