diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Framework/Console/ConsoleUtil.cs | 78 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | 22 |
2 files changed, 87 insertions, 13 deletions
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs index 794bfaf..b7a3494 100644 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ b/OpenSim/Framework/Console/ConsoleUtil.cs | |||
@@ -252,24 +252,80 @@ namespace OpenSim.Framework.Console | |||
252 | /// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue | 252 | /// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue |
253 | /// Other than that, component values must be numeric. | 253 | /// Other than that, component values must be numeric. |
254 | /// </param> | 254 | /// </param> |
255 | /// <param name='blankComponentFunc'></param> | 255 | /// <param name='blankComponentFunc'> |
256 | /// Behaviour if component is blank. If null then conversion fails on a blank component. | ||
257 | /// </param> | ||
256 | /// <param name='vector'></param> | 258 | /// <param name='vector'></param> |
257 | /// <returns></returns> | 259 | /// <returns></returns> |
258 | public static bool TryParseConsoleVector( | 260 | public static bool TryParseConsoleVector( |
259 | string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector) | 261 | string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector) |
260 | { | 262 | { |
261 | List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList(); | 263 | return Vector3.TryParse(CookVector(rawConsoleVector, 3, blankComponentFunc), out vector); |
262 | 264 | } | |
263 | if (components.Count < 1 || components.Count > 3) | 265 | |
266 | /// <summary> | ||
267 | /// Convert a vector input from the console to an OpenMetaverse.Vector2 | ||
268 | /// </summary> | ||
269 | /// <param name='rawConsoleVector'> | ||
270 | /// A string in the form <x>,<y> where there is no space between values. | ||
271 | /// Any component can be missing (e.g. ,40). blankComponentFunc is invoked to replace the blank with a suitable value | ||
272 | /// Also, if the blank component is at the end, then the comma can be missed off entirely (e.g. 40) | ||
273 | /// The strings "~" and "-~" are valid in components. The first substitutes float.MaxValue whilst the second is float.MinValue | ||
274 | /// Other than that, component values must be numeric. | ||
275 | /// </param> | ||
276 | /// <param name='blankComponentFunc'> | ||
277 | /// Behaviour if component is blank. If null then conversion fails on a blank component. | ||
278 | /// </param> | ||
279 | /// <param name='vector'></param> | ||
280 | /// <returns></returns> | ||
281 | public static bool TryParseConsole2DVector( | ||
282 | string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector2 vector) | ||
283 | { | ||
284 | // We don't use Vector2.TryParse() for now because for some reason it expects an input with 3 components | ||
285 | // rather than 2. | ||
286 | string cookedVector = CookVector(rawConsoleVector, 2, blankComponentFunc); | ||
287 | |||
288 | if (cookedVector == null) | ||
264 | { | 289 | { |
265 | vector = Vector3.Zero; | ||
266 | return false; | 290 | return false; |
267 | } | 291 | } |
292 | else | ||
293 | { | ||
294 | string[] cookedComponents = cookedVector.Split(VectorSeparatorChars); | ||
295 | |||
296 | vector = new Vector2(float.Parse(cookedComponents[0]), float.Parse(cookedComponents[1])); | ||
297 | |||
298 | return true; | ||
299 | } | ||
300 | |||
301 | //return Vector2.TryParse(CookVector(rawConsoleVector, 2, blankComponentFunc), out vector); | ||
302 | } | ||
303 | |||
304 | /// <summary> | ||
305 | /// Convert a raw console vector into a vector that can be be parsed by the relevant OpenMetaverse.TryParse() | ||
306 | /// </summary> | ||
307 | /// <param name='rawConsoleVector'></param> | ||
308 | /// <param name='dimensions'></param> | ||
309 | /// <param name='blankComponentFunc'></param> | ||
310 | /// <returns>null if conversion was not possible</returns> | ||
311 | private static string CookVector( | ||
312 | string rawConsoleVector, int dimensions, Func<string, string> blankComponentFunc) | ||
313 | { | ||
314 | List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList(); | ||
268 | 315 | ||
269 | for (int i = components.Count; i < 3; i++) | 316 | if (components.Count < 1 || components.Count > dimensions) |
270 | components.Add(""); | 317 | return null; |
271 | 318 | ||
272 | List<string> semiDigestedComponents | 319 | if (components.Count < dimensions) |
320 | { | ||
321 | if (blankComponentFunc == null) | ||
322 | return null; | ||
323 | else | ||
324 | for (int i = components.Count; i < dimensions; i++) | ||
325 | components.Add(""); | ||
326 | } | ||
327 | |||
328 | List<string> cookedComponents | ||
273 | = components.ConvertAll<string>( | 329 | = components.ConvertAll<string>( |
274 | c => | 330 | c => |
275 | { | 331 | { |
@@ -283,11 +339,7 @@ namespace OpenSim.Framework.Console | |||
283 | return c; | 339 | return c; |
284 | }); | 340 | }); |
285 | 341 | ||
286 | string semiDigestedConsoleVector = string.Join(VectorSeparator, semiDigestedComponents.ToArray()); | 342 | return string.Join(VectorSeparator, cookedComponents.ToArray()); |
287 | |||
288 | // m_log.DebugFormat("[CONSOLE UTIL]: Parsing {0} into OpenMetaverse.Vector3", semiDigestedConsoleVector); | ||
289 | |||
290 | return Vector3.TryParse(semiDigestedConsoleVector, out vector); | ||
291 | } | 343 | } |
292 | } | 344 | } |
293 | } \ No newline at end of file | 345 | } \ No newline at end of file |
diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 3901482..ae6fdac 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | |||
@@ -39,6 +39,7 @@ using Mono.Addins; | |||
39 | 39 | ||
40 | using OpenSim.Data; | 40 | using OpenSim.Data; |
41 | using OpenSim.Framework; | 41 | using OpenSim.Framework; |
42 | using OpenSim.Framework.Console; | ||
42 | using OpenSim.Region.CoreModules.Framework.InterfaceCommander; | 43 | using OpenSim.Region.CoreModules.Framework.InterfaceCommander; |
43 | using OpenSim.Region.CoreModules.World.Terrain.FileLoaders; | 44 | using OpenSim.Region.CoreModules.World.Terrain.FileLoaders; |
44 | using OpenSim.Region.CoreModules.World.Terrain.FloodBrushes; | 45 | using OpenSim.Region.CoreModules.World.Terrain.FloodBrushes; |
@@ -1203,6 +1204,21 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1203 | } | 1204 | } |
1204 | } | 1205 | } |
1205 | 1206 | ||
1207 | private void InterfaceShow(Object[] args) | ||
1208 | { | ||
1209 | Vector2 point; | ||
1210 | |||
1211 | if (!ConsoleUtil.TryParseConsole2DVector((string)args[0], null, out point)) | ||
1212 | { | ||
1213 | Console.WriteLine("ERROR: {0} is not a valid vector", args[0]); | ||
1214 | return; | ||
1215 | } | ||
1216 | |||
1217 | double height = m_channel[(int)point.X, (int)point.Y]; | ||
1218 | |||
1219 | Console.WriteLine("Terrain height at {0} is {1}", point, height); | ||
1220 | } | ||
1221 | |||
1206 | private void InterfaceShowDebugStats(Object[] args) | 1222 | private void InterfaceShowDebugStats(Object[] args) |
1207 | { | 1223 | { |
1208 | double max = Double.MinValue; | 1224 | double max = Double.MinValue; |
@@ -1355,6 +1371,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1355 | new Command("stats", CommandIntentions.COMMAND_STATISTICAL, InterfaceShowDebugStats, | 1371 | new Command("stats", CommandIntentions.COMMAND_STATISTICAL, InterfaceShowDebugStats, |
1356 | "Shows some information about the regions heightmap for debugging purposes."); | 1372 | "Shows some information about the regions heightmap for debugging purposes."); |
1357 | 1373 | ||
1374 | Command showCommand = | ||
1375 | new Command("show", CommandIntentions.COMMAND_NON_HAZARDOUS, InterfaceShow, | ||
1376 | "Shows terrain height at a given co-ordinate."); | ||
1377 | showCommand.AddArgument("point", "point in <x>,<y> format with no spaces (e.g. 45,45)", "String"); | ||
1378 | |||
1358 | Command experimentalBrushesCommand = | 1379 | Command experimentalBrushesCommand = |
1359 | new Command("newbrushes", CommandIntentions.COMMAND_HAZARDOUS, InterfaceEnableExperimentalBrushes, | 1380 | new Command("newbrushes", CommandIntentions.COMMAND_HAZARDOUS, InterfaceEnableExperimentalBrushes, |
1360 | "Enables experimental brushes which replace the standard terrain brushes. WARNING: This is a debug setting and may be removed at any time."); | 1381 | "Enables experimental brushes which replace the standard terrain brushes. WARNING: This is a debug setting and may be removed at any time."); |
@@ -1376,6 +1397,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
1376 | m_commander.RegisterCommand("bake", bakeRegionCommand); | 1397 | m_commander.RegisterCommand("bake", bakeRegionCommand); |
1377 | m_commander.RegisterCommand("revert", revertRegionCommand); | 1398 | m_commander.RegisterCommand("revert", revertRegionCommand); |
1378 | m_commander.RegisterCommand("newbrushes", experimentalBrushesCommand); | 1399 | m_commander.RegisterCommand("newbrushes", experimentalBrushesCommand); |
1400 | m_commander.RegisterCommand("show", showCommand); | ||
1379 | m_commander.RegisterCommand("stats", showDebugStatsCommand); | 1401 | m_commander.RegisterCommand("stats", showDebugStatsCommand); |
1380 | m_commander.RegisterCommand("effect", pluginRunCommand); | 1402 | m_commander.RegisterCommand("effect", pluginRunCommand); |
1381 | m_commander.RegisterCommand("flip", flipCommand); | 1403 | m_commander.RegisterCommand("flip", flipCommand); |