diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 402b9fb..d99567c 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -414,6 +414,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
414 | private void LoadPlugins() | 414 | private void LoadPlugins() |
415 | { | 415 | { |
416 | m_plugineffects = new Dictionary<string, ITerrainEffect>(); | 416 | m_plugineffects = new Dictionary<string, ITerrainEffect>(); |
417 | LoadPlugins(Assembly.GetCallingAssembly()); | ||
417 | string plugineffectsPath = "Terrain"; | 418 | string plugineffectsPath = "Terrain"; |
418 | 419 | ||
419 | // Load the files in the Terrain/ dir | 420 | // Load the files in the Terrain/ dir |
@@ -427,34 +428,39 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
427 | try | 428 | try |
428 | { | 429 | { |
429 | Assembly library = Assembly.LoadFrom(file); | 430 | Assembly library = Assembly.LoadFrom(file); |
430 | foreach (Type pluginType in library.GetTypes()) | 431 | LoadPlugins(library); |
431 | { | 432 | } |
432 | try | 433 | catch (BadImageFormatException) |
433 | { | 434 | { |
434 | if (pluginType.IsAbstract || pluginType.IsNotPublic) | 435 | } |
435 | continue; | 436 | } |
437 | } | ||
436 | 438 | ||
437 | string typeName = pluginType.Name; | 439 | private void LoadPlugins(Assembly library) |
440 | { | ||
441 | foreach (Type pluginType in library.GetTypes()) | ||
442 | { | ||
443 | try | ||
444 | { | ||
445 | if (pluginType.IsAbstract || pluginType.IsNotPublic) | ||
446 | continue; | ||
438 | 447 | ||
439 | if (pluginType.GetInterface("ITerrainEffect", false) != null) | 448 | string typeName = pluginType.Name; |
440 | { | ||
441 | ITerrainEffect terEffect = (ITerrainEffect) Activator.CreateInstance(library.GetType(pluginType.ToString())); | ||
442 | 449 | ||
443 | InstallPlugin(typeName, terEffect); | 450 | if (pluginType.GetInterface("ITerrainEffect", false) != null) |
444 | } | 451 | { |
445 | else if (pluginType.GetInterface("ITerrainLoader", false) != null) | 452 | ITerrainEffect terEffect = (ITerrainEffect)Activator.CreateInstance(library.GetType(pluginType.ToString())); |
446 | { | 453 | |
447 | ITerrainLoader terLoader = (ITerrainLoader) Activator.CreateInstance(library.GetType(pluginType.ToString())); | 454 | InstallPlugin(typeName, terEffect); |
448 | m_loaders[terLoader.FileExtension] = terLoader; | 455 | } |
449 | m_log.Info("L ... " + typeName); | 456 | else if (pluginType.GetInterface("ITerrainLoader", false) != null) |
450 | } | 457 | { |
451 | } | 458 | ITerrainLoader terLoader = (ITerrainLoader)Activator.CreateInstance(library.GetType(pluginType.ToString())); |
452 | catch (AmbiguousMatchException) | 459 | m_loaders[terLoader.FileExtension] = terLoader; |
453 | { | 460 | m_log.Info("L ... " + typeName); |
454 | } | ||
455 | } | 461 | } |
456 | } | 462 | } |
457 | catch (BadImageFormatException) | 463 | catch (AmbiguousMatchException) |
458 | { | 464 | { |
459 | } | 465 | } |
460 | } | 466 | } |
@@ -1178,7 +1184,8 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1178 | 1184 | ||
1179 | private void InterfaceRunPluginEffect(Object[] args) | 1185 | private void InterfaceRunPluginEffect(Object[] args) |
1180 | { | 1186 | { |
1181 | if ((string) args[0] == "list") | 1187 | string firstArg = (string)args[0]; |
1188 | if (firstArg == "list") | ||
1182 | { | 1189 | { |
1183 | m_log.Info("List of loaded plugins"); | 1190 | m_log.Info("List of loaded plugins"); |
1184 | foreach (KeyValuePair<string, ITerrainEffect> kvp in m_plugineffects) | 1191 | foreach (KeyValuePair<string, ITerrainEffect> kvp in m_plugineffects) |
@@ -1187,14 +1194,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1187 | } | 1194 | } |
1188 | return; | 1195 | return; |
1189 | } | 1196 | } |
1190 | if ((string) args[0] == "reload") | 1197 | if (firstArg == "reload") |
1191 | { | 1198 | { |
1192 | LoadPlugins(); | 1199 | LoadPlugins(); |
1193 | return; | 1200 | return; |
1194 | } | 1201 | } |
1195 | if (m_plugineffects.ContainsKey((string) args[0])) | 1202 | if (m_plugineffects.ContainsKey(firstArg)) |
1196 | { | 1203 | { |
1197 | m_plugineffects[(string) args[0]].RunEffect(m_channel); | 1204 | m_plugineffects[firstArg].RunEffect(m_channel); |
1198 | CheckForTerrainUpdates(); | 1205 | CheckForTerrainUpdates(); |
1199 | } | 1206 | } |
1200 | else | 1207 | else |