From 352672eaf2d07a210d2d0de97944dac48250828d Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 17 Nov 2011 22:13:32 +0000 Subject: Make "terrain save" more friendly by telling the user if we have saved and putting out a useful complaint message if we haven't for some reason --- .../CoreModules/World/Terrain/TerrainModule.cs | 50 ++++++++++++++-------- 1 file changed, 32 insertions(+), 18 deletions(-) (limited to 'OpenSim/Region/CoreModules/World/Terrain') diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index c832520..428440e 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs @@ -86,6 +86,11 @@ namespace OpenSim.Region.CoreModules.World.Terrain private volatile bool m_tainted; private readonly Stack m_undo = new Stack(5); + /// + /// Human readable list of terrain file extensions that are supported. + /// + private string m_supportedFileExtensions = ""; + #region ICommandableModule Members public ICommander CommandInterface @@ -135,6 +140,15 @@ namespace OpenSim.Region.CoreModules.World.Terrain InstallDefaultEffects(); LoadPlugins(); + + // Generate user-readable extensions list + string supportedFilesSeparator = ""; + + foreach (KeyValuePair loader in m_loaders) + { + m_supportedFileExtensions += supportedFilesSeparator + loader.Key + " (" + loader.Value + ")"; + supportedFilesSeparator = ", "; + } } public void RegionLoaded(Scene scene) @@ -251,20 +265,20 @@ namespace OpenSim.Region.CoreModules.World.Terrain if (filename.EndsWith(loader.Key)) { loader.Value.SaveFile(filename, m_channel); + m_log.InfoFormat("[TERRAIN]: Saved terrain from {0} to {1}", m_scene.RegionInfo.RegionName, filename); return; } } } - catch (NotImplementedException) - { - m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented."); - throw new TerrainException(String.Format("Unable to save heightmap: saving of this file format not implemented")); - } catch (IOException ioe) { m_log.Error(String.Format("[TERRAIN]: Unable to save to {0}, {1}", filename, ioe.Message)); throw new TerrainException(String.Format("Unable to save heightmap: {0}", ioe.Message)); } + + m_log.ErrorFormat( + "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}", + m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions); } /// @@ -345,6 +359,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain float duration = 0.25f; if (action == 0) duration = 4.0f; + client_OnModifyTerrain(user, (float)pos.Z, duration, size, action, pos.Y, pos.X, pos.Y, pos.X, agentId); } @@ -534,6 +549,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain m_channel = channel; UpdateRevertMap(); } + return; } } @@ -566,10 +582,17 @@ namespace OpenSim.Region.CoreModules.World.Terrain fileWidth, fileHeight, (int)Constants.RegionSize, (int)Constants.RegionSize); + + m_log.InfoFormat("[TERRAIN]: Saved terrain from {0} to {1}", m_scene.RegionInfo.RegionName, filename); } + return; } } + + m_log.ErrorFormat( + "[TERRAIN]: Could not save terrain from {0} to {1}. Valid file extensions are {2}", + m_scene.RegionInfo.RegionName, filename, m_supportedFileExtensions); } } @@ -1124,32 +1147,23 @@ namespace OpenSim.Region.CoreModules.World.Terrain private void InstallInterfaces() { - // Load / Save - string supportedFileExtensions = ""; - string supportedFilesSeparator = ""; - foreach (KeyValuePair loader in m_loaders) - { - supportedFileExtensions += supportedFilesSeparator + loader.Key + " (" + loader.Value + ")"; - supportedFilesSeparator = ", "; - } - Command loadFromFileCommand = new Command("load", CommandIntentions.COMMAND_HAZARDOUS, InterfaceLoadFile, "Loads a terrain from a specified file."); loadFromFileCommand.AddArgument("filename", "The file you wish to load from, the file extension determines the loader to be used. Supported extensions include: " + - supportedFileExtensions, "String"); + m_supportedFileExtensions, "String"); Command saveToFileCommand = new Command("save", CommandIntentions.COMMAND_NON_HAZARDOUS, InterfaceSaveFile, "Saves the current heightmap to a specified file."); saveToFileCommand.AddArgument("filename", "The destination filename for your heightmap, the file extension determines the format to save in. Supported extensions include: " + - supportedFileExtensions, "String"); + m_supportedFileExtensions, "String"); Command loadFromTileCommand = new Command("load-tile", CommandIntentions.COMMAND_HAZARDOUS, InterfaceLoadTileFile, "Loads a terrain from a section of a larger file."); loadFromTileCommand.AddArgument("filename", "The file you wish to load from, the file extension determines the loader to be used. Supported extensions include: " + - supportedFileExtensions, "String"); + m_supportedFileExtensions, "String"); loadFromTileCommand.AddArgument("file width", "The width of the file in tiles", "Integer"); loadFromTileCommand.AddArgument("file height", "The height of the file in tiles", "Integer"); loadFromTileCommand.AddArgument("minimum X tile", "The X region coordinate of the first section on the file", @@ -1161,7 +1175,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain new Command("save-tile", CommandIntentions.COMMAND_HAZARDOUS, InterfaceSaveTileFile, "Saves the current heightmap to the larger file."); saveToTileCommand.AddArgument("filename", "The file you wish to save to, the file extension determines the loader to be used. Supported extensions include: " + - supportedFileExtensions, "String"); + m_supportedFileExtensions, "String"); saveToTileCommand.AddArgument("file width", "The width of the file in tiles", "Integer"); saveToTileCommand.AddArgument("file height", "The height of the file in tiles", "Integer"); saveToTileCommand.AddArgument("minimum X tile", "The X region coordinate of the first section on the file", -- cgit v1.1 From 9c928e9dc63a03e652aa5614fc1053351aad0ed1 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 17 Nov 2011 22:15:46 +0000 Subject: For TerrainModule.SaveToFile(), don't bother throwing the exception onwards after printing out the error, since this method is invoked by users. Still throwing the exception on the stream method since this invoked programatically --- OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs | 1 - 1 file changed, 1 deletion(-) (limited to 'OpenSim/Region/CoreModules/World/Terrain') diff --git a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs index 428440e..cf000a4 100644 --- a/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs +++ b/OpenSim/Region/CoreModules/World/Terrain/TerrainModule.cs @@ -273,7 +273,6 @@ namespace OpenSim.Region.CoreModules.World.Terrain catch (IOException ioe) { m_log.Error(String.Format("[TERRAIN]: Unable to save to {0}, {1}", filename, ioe.Message)); - throw new TerrainException(String.Format("Unable to save heightmap: {0}", ioe.Message)); } m_log.ErrorFormat( -- cgit v1.1