diff options
Diffstat (limited to 'OpenSim/Region')
4 files changed, 107 insertions, 95 deletions
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml index 6c73d91..2ddd0b6 100644 --- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml +++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml | |||
@@ -38,6 +38,8 @@ | |||
38 | <RegionModule id="GlynnTuckerAssetCache" type="OpenSim.Region.CoreModules.Asset.GlynnTuckerAssetCache" /> | 38 | <RegionModule id="GlynnTuckerAssetCache" type="OpenSim.Region.CoreModules.Asset.GlynnTuckerAssetCache" /> |
39 | <RegionModule id="CenomeMemoryAssetCache" type="OpenSim.Region.CoreModules.Asset.CenomeMemoryAssetCache"/> | 39 | <RegionModule id="CenomeMemoryAssetCache" type="OpenSim.Region.CoreModules.Asset.CenomeMemoryAssetCache"/> |
40 | <RegionModule id="LibraryModule" type="OpenSim.Region.CoreModules.Framework.Library.LibraryModule"/> | 40 | <RegionModule id="LibraryModule" type="OpenSim.Region.CoreModules.Framework.Library.LibraryModule"/> |
41 | <RegionModule id="SunModule" type="OpenSim.Region.CoreModules.SunModule"/> | ||
42 | <RegionModule id="WindModule" type="OpenSim.Region.CoreModules.WindModule"/> | ||
41 | <!-- Service connectors OUT modules --> | 43 | <!-- Service connectors OUT modules --> |
42 | <RegionModule id="LocalAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.LocalAssetServicesConnector" /> | 44 | <RegionModule id="LocalAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.LocalAssetServicesConnector" /> |
43 | <RegionModule id="RemoteAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.RemoteAssetServicesConnector" /> | 45 | <RegionModule id="RemoteAssetServicesConnector" type="OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset.RemoteAssetServicesConnector" /> |
diff --git a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs index df025bf..bdbf273 100644 --- a/OpenSim/Region/CoreModules/World/Sun/SunModule.cs +++ b/OpenSim/Region/CoreModules/World/Sun/SunModule.cs | |||
@@ -278,14 +278,6 @@ namespace OpenSim.Region.CoreModules | |||
278 | // This one puts an entry in the main help screen | 278 | // This one puts an entry in the main help screen |
279 | // m_scene.AddCommand("Regions", this, "sun", "sun", "Usage: sun [param] [value] - Get or Update Sun module paramater", null); | 279 | // m_scene.AddCommand("Regions", this, "sun", "sun", "Usage: sun [param] [value] - Get or Update Sun module paramater", null); |
280 | 280 | ||
281 | // This one enables the ability to type just "sun" without any parameters | ||
282 | // m_scene.AddCommand("Regions", this, "sun", "", "", HandleSunConsoleCommand); | ||
283 | foreach (KeyValuePair<string, string> kvp in GetParamList()) | ||
284 | { | ||
285 | string sunCommand = string.Format("sun {0}", kvp.Key); | ||
286 | m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand); | ||
287 | } | ||
288 | |||
289 | TimeZone local = TimeZone.CurrentTimeZone; | 281 | TimeZone local = TimeZone.CurrentTimeZone; |
290 | TicksUTCOffset = local.GetUtcOffset(local.ToLocalTime(DateTime.Now)).Ticks; | 282 | TicksUTCOffset = local.GetUtcOffset(local.ToLocalTime(DateTime.Now)).Ticks; |
291 | m_log.DebugFormat("[SUN]: localtime offset is {0}", TicksUTCOffset); | 283 | m_log.DebugFormat("[SUN]: localtime offset is {0}", TicksUTCOffset); |
@@ -385,6 +377,14 @@ namespace OpenSim.Region.CoreModules | |||
385 | 377 | ||
386 | scene.RegisterModuleInterface<ISunModule>(this); | 378 | scene.RegisterModuleInterface<ISunModule>(this); |
387 | 379 | ||
380 | // This one enables the ability to type just "sun" without any parameters | ||
381 | // m_scene.AddCommand("Regions", this, "sun", "", "", HandleSunConsoleCommand); | ||
382 | foreach (KeyValuePair<string, string> kvp in GetParamList()) | ||
383 | { | ||
384 | string sunCommand = string.Format("sun {0}", kvp.Key); | ||
385 | m_scene.AddCommand("Regions", this, sunCommand, string.Format("{0} [<value>]", sunCommand), kvp.Value, "", HandleSunConsoleCommand); | ||
386 | } | ||
387 | |||
388 | ready = true; | 388 | ready = true; |
389 | } | 389 | } |
390 | 390 | ||
diff --git a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs index 7b6fbda..0186a41 100644 --- a/OpenSim/Region/CoreModules/World/Wind/WindModule.cs +++ b/OpenSim/Region/CoreModules/World/Wind/WindModule.cs | |||
@@ -52,31 +52,31 @@ namespace OpenSim.Region.CoreModules | |||
52 | private bool m_ready = false; | 52 | private bool m_ready = false; |
53 | 53 | ||
54 | private bool m_enabled = false; | 54 | private bool m_enabled = false; |
55 | 55 | private IConfig m_windConfig; | |
56 | private IWindModelPlugin m_activeWindPlugin = null; | 56 | private IWindModelPlugin m_activeWindPlugin = null; |
57 | private const string m_dWindPluginName = "SimpleRandomWind"; | 57 | private string m_dWindPluginName = "SimpleRandomWind"; |
58 | private Dictionary<string, IWindModelPlugin> m_availableWindPlugins = new Dictionary<string, IWindModelPlugin>(); | 58 | private Dictionary<string, IWindModelPlugin> m_availableWindPlugins = new Dictionary<string, IWindModelPlugin>(); |
59 | 59 | ||
60 | // Simplified windSpeeds based on the fact that the client protocal tracks at a resolution of 16m | 60 | // Simplified windSpeeds based on the fact that the client protocal tracks at a resolution of 16m |
61 | private Vector2[] windSpeeds = new Vector2[16 * 16]; | 61 | private Vector2[] windSpeeds = new Vector2[16 * 16]; |
62 | 62 | ||
63 | #region IRegion Methods | 63 | #region INonSharedRegionModule Methods |
64 | 64 | ||
65 | public void Initialise(Scene scene, IConfigSource config) | 65 | public void Initialise(IConfigSource config) |
66 | { | 66 | { |
67 | IConfig windConfig = config.Configs["Wind"]; | 67 | m_windConfig = config.Configs["Wind"]; |
68 | string desiredWindPlugin = m_dWindPluginName; | 68 | string desiredWindPlugin = m_dWindPluginName; |
69 | 69 | ||
70 | if (windConfig != null) | 70 | if (m_windConfig != null) |
71 | { | 71 | { |
72 | m_enabled = windConfig.GetBoolean("enabled", true); | 72 | m_enabled = m_windConfig.GetBoolean("enabled", true); |
73 | 73 | ||
74 | m_frameUpdateRate = windConfig.GetInt("wind_update_rate", 150); | 74 | m_frameUpdateRate = m_windConfig.GetInt("wind_update_rate", 150); |
75 | 75 | ||
76 | // Determine which wind model plugin is desired | 76 | // Determine which wind model plugin is desired |
77 | if (windConfig.Contains("wind_plugin")) | 77 | if (m_windConfig.Contains("wind_plugin")) |
78 | { | 78 | { |
79 | desiredWindPlugin = windConfig.GetString("wind_plugin"); | 79 | m_dWindPluginName = m_windConfig.GetString("wind_plugin", m_dWindPluginName); |
80 | } | 80 | } |
81 | } | 81 | } |
82 | 82 | ||
@@ -84,104 +84,111 @@ namespace OpenSim.Region.CoreModules | |||
84 | { | 84 | { |
85 | m_log.InfoFormat("[WIND] Enabled with an update rate of {0} frames.", m_frameUpdateRate); | 85 | m_log.InfoFormat("[WIND] Enabled with an update rate of {0} frames.", m_frameUpdateRate); |
86 | 86 | ||
87 | m_scene = scene; | 87 | } |
88 | m_frame = 0; | ||
89 | |||
90 | // Register all the Wind Model Plug-ins | ||
91 | foreach (IWindModelPlugin windPlugin in AddinManager.GetExtensionObjects("/OpenSim/WindModule", false)) | ||
92 | { | ||
93 | m_log.InfoFormat("[WIND] Found Plugin: {0}", windPlugin.Name); | ||
94 | m_availableWindPlugins.Add(windPlugin.Name, windPlugin); | ||
95 | } | ||
96 | 88 | ||
97 | // Check for desired plugin | 89 | } |
98 | if (m_availableWindPlugins.ContainsKey(desiredWindPlugin)) | ||
99 | { | ||
100 | m_activeWindPlugin = m_availableWindPlugins[desiredWindPlugin]; | ||
101 | 90 | ||
102 | m_log.InfoFormat("[WIND] {0} plugin found, initializing.", desiredWindPlugin); | 91 | public void AddRegion(Scene scene) |
92 | { | ||
93 | if (!m_enabled) | ||
94 | return; | ||
103 | 95 | ||
104 | if (windConfig != null) | 96 | m_scene = scene; |
105 | { | 97 | m_frame = 0; |
106 | m_activeWindPlugin.Initialise(); | ||
107 | m_activeWindPlugin.WindConfig(m_scene, windConfig); | ||
108 | } | ||
109 | } | ||
110 | 98 | ||
99 | // Register all the Wind Model Plug-ins | ||
100 | foreach (IWindModelPlugin windPlugin in AddinManager.GetExtensionObjects("/OpenSim/WindModule", false)) | ||
101 | { | ||
102 | m_log.InfoFormat("[WIND] Found Plugin: {0}", windPlugin.Name); | ||
103 | m_availableWindPlugins.Add(windPlugin.Name, windPlugin); | ||
104 | } | ||
111 | 105 | ||
112 | // if the plug-in wasn't found, default to no wind. | 106 | // Check for desired plugin |
113 | if (m_activeWindPlugin == null) | 107 | if (m_availableWindPlugins.ContainsKey(m_dWindPluginName)) |
114 | { | 108 | { |
115 | m_log.ErrorFormat("[WIND] Could not find specified wind plug-in: {0}", desiredWindPlugin); | 109 | m_activeWindPlugin = m_availableWindPlugins[m_dWindPluginName]; |
116 | m_log.ErrorFormat("[WIND] Defaulting to no wind."); | ||
117 | } | ||
118 | 110 | ||
119 | // This one puts an entry in the main help screen | 111 | m_log.InfoFormat("[WIND] {0} plugin found, initializing.", m_dWindPluginName); |
120 | // m_scene.AddCommand("Regions", this, "wind", "wind", "Usage: wind <plugin> <param> [value] - Get or Update Wind paramaters", null); | ||
121 | |||
122 | // This one enables the ability to type just the base command without any parameters | ||
123 | // m_scene.AddCommand("Regions", this, "wind", "", "", HandleConsoleCommand); | ||
124 | 112 | ||
125 | // Get a list of the parameters for each plugin | 113 | if (m_windConfig != null) |
126 | foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values) | ||
127 | { | 114 | { |
128 | // m_scene.AddCommand("Regions", this, String.Format("wind base wind_plugin {0}", windPlugin.Name), String.Format("{0} - {1}", windPlugin.Name, windPlugin.Description), "", HandleConsoleBaseCommand); | 115 | m_activeWindPlugin.Initialise(); |
129 | m_scene.AddCommand( | 116 | m_activeWindPlugin.WindConfig(m_scene, m_windConfig); |
130 | "Regions", | ||
131 | this, | ||
132 | "wind base wind_update_rate", | ||
133 | "wind base wind_update_rate [<value>]", | ||
134 | "Get or set the wind update rate.", | ||
135 | "", | ||
136 | HandleConsoleBaseCommand); | ||
137 | |||
138 | foreach (KeyValuePair<string, string> kvp in windPlugin.WindParams()) | ||
139 | { | ||
140 | string windCommand = String.Format("wind {0} {1}", windPlugin.Name, kvp.Key); | ||
141 | m_scene.AddCommand("Regions", this, windCommand, string.Format("{0} [<value>]", windCommand), kvp.Value, "", HandleConsoleParamCommand); | ||
142 | } | ||
143 | } | 117 | } |
118 | } | ||
144 | 119 | ||
145 | // Register event handlers for when Avatars enter the region, and frame ticks | ||
146 | m_scene.EventManager.OnFrame += WindUpdate; | ||
147 | m_scene.EventManager.OnMakeRootAgent += OnAgentEnteredRegion; | ||
148 | 120 | ||
149 | // Register the wind module | 121 | // if the plug-in wasn't found, default to no wind. |
150 | m_scene.RegisterModuleInterface<IWindModule>(this); | 122 | if (m_activeWindPlugin == null) |
123 | { | ||
124 | m_log.ErrorFormat("[WIND] Could not find specified wind plug-in: {0}", m_dWindPluginName); | ||
125 | m_log.ErrorFormat("[WIND] Defaulting to no wind."); | ||
126 | } | ||
151 | 127 | ||
152 | // Generate initial wind values | 128 | // This one puts an entry in the main help screen |
153 | GenWindPos(); | 129 | // m_scene.AddCommand("Regions", this, "wind", "wind", "Usage: wind <plugin> <param> [value] - Get or Update Wind paramaters", null); |
154 | 130 | ||
155 | // Mark Module Ready for duty | 131 | // This one enables the ability to type just the base command without any parameters |
156 | m_ready = true; | 132 | // m_scene.AddCommand("Regions", this, "wind", "", "", HandleConsoleCommand); |
157 | 133 | ||
134 | // Get a list of the parameters for each plugin | ||
135 | foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values) | ||
136 | { | ||
137 | // m_scene.AddCommand("Regions", this, String.Format("wind base wind_plugin {0}", windPlugin.Name), String.Format("{0} - {1}", windPlugin.Name, windPlugin.Description), "", HandleConsoleBaseCommand); | ||
138 | m_scene.AddCommand( | ||
139 | "Regions", | ||
140 | this, | ||
141 | "wind base wind_update_rate", | ||
142 | "wind base wind_update_rate [<value>]", | ||
143 | "Get or set the wind update rate.", | ||
144 | "", | ||
145 | HandleConsoleBaseCommand); | ||
146 | |||
147 | foreach (KeyValuePair<string, string> kvp in windPlugin.WindParams()) | ||
148 | { | ||
149 | string windCommand = String.Format("wind {0} {1}", windPlugin.Name, kvp.Key); | ||
150 | m_scene.AddCommand("Regions", this, windCommand, string.Format("{0} [<value>]", windCommand), kvp.Value, "", HandleConsoleParamCommand); | ||
151 | } | ||
158 | } | 152 | } |
159 | 153 | ||
160 | } | 154 | // Register event handlers for when Avatars enter the region, and frame ticks |
155 | m_scene.EventManager.OnFrame += WindUpdate; | ||
156 | m_scene.EventManager.OnMakeRootAgent += OnAgentEnteredRegion; | ||
161 | 157 | ||
162 | public void PostInitialise() | 158 | // Register the wind module |
163 | { | 159 | m_scene.RegisterModuleInterface<IWindModule>(this); |
160 | |||
161 | // Generate initial wind values | ||
162 | GenWindPos(); | ||
163 | |||
164 | // Mark Module Ready for duty | ||
165 | m_ready = true; | ||
164 | } | 166 | } |
165 | 167 | ||
166 | public void Close() | 168 | public void RemoveRegion(Scene scene) |
167 | { | 169 | { |
168 | if (m_enabled) | 170 | if (!m_enabled) |
171 | return; | ||
172 | |||
173 | m_ready = false; | ||
174 | |||
175 | // REVIEW: If a region module is closed, is there a possibility that it'll re-open/initialize ?? | ||
176 | m_activeWindPlugin = null; | ||
177 | foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values) | ||
169 | { | 178 | { |
170 | m_ready = false; | 179 | windPlugin.Dispose(); |
180 | } | ||
171 | 181 | ||
172 | // REVIEW: If a region module is closed, is there a possibility that it'll re-open/initialize ?? | 182 | m_availableWindPlugins.Clear(); |
173 | m_activeWindPlugin = null; | ||
174 | foreach (IWindModelPlugin windPlugin in m_availableWindPlugins.Values) | ||
175 | { | ||
176 | windPlugin.Dispose(); | ||
177 | } | ||
178 | 183 | ||
179 | m_availableWindPlugins.Clear(); | 184 | // Remove our hooks |
185 | m_scene.EventManager.OnFrame -= WindUpdate; | ||
186 | m_scene.EventManager.OnMakeRootAgent -= OnAgentEnteredRegion; | ||
180 | 187 | ||
181 | // Remove our hooks | 188 | } |
182 | m_scene.EventManager.OnFrame -= WindUpdate; | 189 | |
183 | m_scene.EventManager.OnMakeRootAgent -= OnAgentEnteredRegion; | 190 | public void Close() |
184 | } | 191 | { |
185 | } | 192 | } |
186 | 193 | ||
187 | public string Name | 194 | public string Name |
@@ -189,11 +196,14 @@ namespace OpenSim.Region.CoreModules | |||
189 | get { return "WindModule"; } | 196 | get { return "WindModule"; } |
190 | } | 197 | } |
191 | 198 | ||
192 | public bool IsSharedModule | 199 | public Type ReplaceableInterface |
193 | { | 200 | { |
194 | get { return false; } | 201 | get { return null; } |
195 | } | 202 | } |
196 | 203 | ||
204 | public void RegionLoaded(Scene scene) | ||
205 | { | ||
206 | } | ||
197 | 207 | ||
198 | #endregion | 208 | #endregion |
199 | 209 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IWindModule.cs b/OpenSim/Region/Framework/Interfaces/IWindModule.cs index 10ecc32..4a26a71 100644 --- a/OpenSim/Region/Framework/Interfaces/IWindModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IWindModule.cs | |||
@@ -29,7 +29,7 @@ using OpenMetaverse; | |||
29 | 29 | ||
30 | namespace OpenSim.Region.Framework.Interfaces | 30 | namespace OpenSim.Region.Framework.Interfaces |
31 | { | 31 | { |
32 | public interface IWindModule : IRegionModule | 32 | public interface IWindModule : INonSharedRegionModule |
33 | { | 33 | { |
34 | 34 | ||
35 | /// <summary> | 35 | /// <summary> |