From 05e24c8f58e5cc41b3e7704b1912dfbe9703d4fe Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Mon, 21 Apr 2008 06:39:16 +0000 Subject: * Terrain Module code has been reformatted to comply with guidelines. * Fixed a variety of code quality issues. (Yes, I've found ReSharper.) --- .../Modules/Terrain/Effects/CookieCutter.cs | 27 +- .../Terrain/Effects/DefaultTerrainGenerator.cs | 10 +- .../Environment/Modules/Terrain/FileLoaders/BMP.cs | 8 +- .../Environment/Modules/Terrain/FileLoaders/GIF.cs | 8 +- .../Terrain/FileLoaders/GenericSystemDrawing.cs | 35 +- .../Modules/Terrain/FileLoaders/JPEG.cs | 24 +- .../Modules/Terrain/FileLoaders/LLRAW.cs | 22 +- .../Environment/Modules/Terrain/FileLoaders/PNG.cs | 8 +- .../Modules/Terrain/FileLoaders/RAW32.cs | 27 +- .../Modules/Terrain/FileLoaders/TIFF.cs | 8 +- .../Modules/Terrain/FileLoaders/Terragen.cs | 16 +- .../Modules/Terrain/FloodBrushes/FlattenArea.cs | 12 +- .../Modules/Terrain/FloodBrushes/LowerArea.cs | 7 +- .../Modules/Terrain/FloodBrushes/NoiseArea.cs | 7 +- .../Modules/Terrain/FloodBrushes/RaiseArea.cs | 4 +- .../Modules/Terrain/FloodBrushes/RevertArea.cs | 6 +- .../Modules/Terrain/FloodBrushes/SmoothArea.cs | 73 +-- .../Environment/Modules/Terrain/ITerrainEffect.cs | 2 +- .../Modules/Terrain/ITerrainFloodEffect.cs | 4 +- .../Environment/Modules/Terrain/ITerrainLoader.cs | 2 +- .../Environment/Modules/Terrain/ITerrainModule.cs | 5 +- .../Modules/Terrain/ITerrainPaintableEffect.cs | 2 +- .../Environment/Modules/Terrain/MapImageModule.cs | 71 +-- .../Modules/Terrain/PaintBrushes/ErodeSphere.cs | 26 +- .../Modules/Terrain/PaintBrushes/FlattenSphere.cs | 16 +- .../Modules/Terrain/PaintBrushes/LowerSphere.cs | 2 +- .../Modules/Terrain/PaintBrushes/NoiseSphere.cs | 4 +- .../Modules/Terrain/PaintBrushes/OlsenSphere.cs | 20 +- .../Modules/Terrain/PaintBrushes/RaiseSphere.cs | 2 +- .../Modules/Terrain/PaintBrushes/RevertSphere.cs | 4 +- .../Modules/Terrain/PaintBrushes/SmoothSphere.cs | 14 +- .../Modules/Terrain/PaintBrushes/WeatherSphere.cs | 17 +- .../Environment/Modules/Terrain/TerrainChannel.cs | 110 ++-- .../Environment/Modules/Terrain/TerrainModule.cs | 642 ++++++++++++--------- .../Environment/Modules/Terrain/TerrainUtil.cs | 24 +- 35 files changed, 678 insertions(+), 591 deletions(-) (limited to 'OpenSim/Region/Environment') diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs index 8e51d40..6d41eba 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs @@ -25,26 +25,24 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; -using System.Collections.Generic; -using System.Text; -using OpenSim.Region.Environment.Modules.Terrain; using OpenSim.Region.Environment.Interfaces; -using OpenSim.Framework; +using OpenSim.Region.Environment.Modules.Terrain.FloodBrushes; +using OpenSim.Region.Environment.Modules.Terrain.PaintBrushes; namespace OpenSim.Region.Environment.Modules.Terrain.Effects { - class CookieCutter : ITerrainEffect + internal class CookieCutter : ITerrainEffect { #region ITerrainEffect Members public void RunEffect(ITerrainChannel map) { - FloodBrushes.SmoothArea smooth = new FloodBrushes.SmoothArea(); - ITerrainPaintableEffect eroder = new PaintBrushes.WeatherSphere(); + SmoothArea smooth = new SmoothArea(); + ITerrainPaintableEffect eroder = new WeatherSphere(); - bool[,] cliffMask = new bool[map.Width, map.Height]; - bool[,] channelMask = new bool[map.Width, map.Height]; - bool[,] smoothMask = new bool[map.Width, map.Height]; + bool[,] cliffMask = new bool[map.Width,map.Height]; + bool[,] channelMask = new bool[map.Width,map.Height]; + bool[,] smoothMask = new bool[map.Width,map.Height]; Console.WriteLine("S1"); @@ -98,7 +96,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.Effects //smooth.FloodEffect(map, smoothMask, 4.0); } - private static void SetLowerChannel(ITerrainChannel map, bool[,] cliffMask, bool[,] channelMask, int x, int y, int numChannels, int channelWidth, int mapSize, int rp) + #endregion + + private static void SetLowerChannel(ITerrainChannel map, bool[,] cliffMask, bool[,] channelMask, int x, int y, int numChannels, int channelWidth, + int mapSize, int rp) { for (int i = 0; i < numChannels; i++) { @@ -119,7 +120,5 @@ namespace OpenSim.Region.Environment.Modules.Terrain.Effects } } } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs index 4f91ee5..2327275 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs @@ -24,16 +24,12 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; -using System.Collections.Generic; -using System.Text; -using OpenSim.Region.Environment.Modules.Terrain; -using OpenSim.Region.Environment.Interfaces; using OpenSim.Framework; +using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.Effects { - class DefaultTerrainGenerator : ITerrainEffect + internal class DefaultTerrainGenerator : ITerrainEffect { #region ITerrainEffect Members @@ -56,4 +52,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.Effects #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs index cad0edf..f975872 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/BMP.cs @@ -24,8 +24,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders @@ -36,7 +36,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders /// /// Uses the System.Drawing filesystem loader. /// - class BMP : GenericSystemDrawing + internal class BMP : GenericSystemDrawing { /// /// Exports a file to a image on the disk using a System.Drawing exporter. @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { Bitmap colours = CreateGrayscaleBitmapFromMap(map); - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp); + colours.Save(filename, ImageFormat.Bmp); } /// @@ -59,4 +59,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return "BMP"; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs index 7f07fd9..cf82000 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GIF.cs @@ -24,19 +24,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { - class GIF : GenericSystemDrawing + internal class GIF : GenericSystemDrawing { public override void SaveFile(string filename, ITerrainChannel map) { Bitmap colours = CreateGrayscaleBitmapFromMap(map); - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Gif); + colours.Save(filename, ImageFormat.Gif); } public override string ToString() @@ -44,4 +44,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return "GIF"; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs index 9bcf94d..47e0e4cb 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/GenericSystemDrawing.cs @@ -27,6 +27,7 @@ using System; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders @@ -72,6 +73,20 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders throw new NotImplementedException(); } + /// + /// Exports a file to a image on the disk using a System.Drawing exporter. + /// + /// The target filename + /// The terrain channel being saved + public virtual void SaveFile(string filename, ITerrainChannel map) + { + Bitmap colours = CreateGrayscaleBitmapFromMap(map); + + colours.Save(filename, ImageFormat.Png); + } + + #endregion + public override string ToString() { return "SYS.DRAWING"; @@ -100,7 +115,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders for (int x = 0; x < map.Width; x++) { // 512 is the largest possible height before colours clamp - int colorindex = (int)(Math.Max(Math.Min(1.0, map[x, y] / 128.0), 0.0) * (pallete - 1)); + int colorindex = (int) (Math.Max(Math.Min(1.0, map[x, y] / 128.0), 0.0) * (pallete - 1)); // Handle error conditions if (colorindex > pallete - 1 || colorindex < 0) @@ -137,7 +152,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders for (int x = 0; x < map.Width; x++) { // 512 is the largest possible height before colours clamp - int colorindex = (int)(Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1)); + int colorindex = (int) (Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1)); // Handle error conditions if (colorindex > pallete - 1 || colorindex < 0) @@ -148,19 +163,5 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders } return bmp; } - - /// - /// Exports a file to a image on the disk using a System.Drawing exporter. - /// - /// The target filename - /// The terrain channel being saved - public virtual void SaveFile(string filename, ITerrainChannel map) - { - Bitmap colours = CreateGrayscaleBitmapFromMap(map); - - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Png); - } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/JPEG.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/JPEG.cs index d6430cd..f25b29b 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/JPEG.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/JPEG.cs @@ -26,8 +26,8 @@ */ using System; -using System.IO; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders @@ -46,6 +46,15 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders throw new NotImplementedException(); } + public void SaveFile(string filename, ITerrainChannel map) + { + Bitmap colours = CreateBitmapFromMap(map); + + colours.Save(filename, ImageFormat.Jpeg); + } + + #endregion + public override string ToString() { return "JPEG"; @@ -70,20 +79,11 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders for (int x = 0; x < map.Width; x++) { // 512 is the largest possible height before colours clamp - int colorindex = (int)(Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1)); + int colorindex = (int) (Math.Max(Math.Min(1.0, map[x, y] / 512.0), 0.0) * (pallete - 1)); bmp.SetPixel(x, map.Height - y - 1, colours[colorindex]); } } return bmp; } - - public void SaveFile(string filename, ITerrainChannel map) - { - Bitmap colours = CreateBitmapFromMap(map); - - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg); - } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/LLRAW.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/LLRAW.cs index 7436dc5..fda46f0 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/LLRAW.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/LLRAW.cs @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { for (x = 0; x < retval.Width; x++) { - retval[x, y] = (double)bs.ReadByte() * ((double)bs.ReadByte() / 127.0); + retval[x, y] = (double) bs.ReadByte() * ((double) bs.ReadByte() / 127.0); bs.ReadBytes(11); // Advance the stream to next bytes. } } @@ -58,11 +58,6 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return retval; } - public override string ToString() - { - return "LL/SL RAW"; - } - public ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h) { throw new NotImplementedException(); @@ -81,7 +76,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { for (j = 0; j < 256; j++) { - lookupHeightTable[i + (j * 256)] = ((double)i * ((double)j / 127.0)); + lookupHeightTable[i + (j * 256)] = ((double) i * ((double) j / 127.0)); } } @@ -103,9 +98,9 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders } } - byte red = (byte)(index & 0xFF); - byte green = (byte)((index >> 8) & 0xFF); - byte blue = 20; + byte red = (byte) (index & 0xFF); + byte green = (byte) ((index >> 8) & 0xFF); + byte blue = 20; byte alpha1 = 0; // Land Parcels byte alpha2 = 0; // For Sale Land byte alpha3 = 0; // Public Edit Object @@ -138,5 +133,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders } #endregion + + public override string ToString() + { + return "LL/SL RAW"; + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs index d7f34ee..16f1e3c 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/PNG.cs @@ -24,19 +24,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { - class PNG : GenericSystemDrawing + internal class PNG : GenericSystemDrawing { public override void SaveFile(string filename, ITerrainChannel map) { Bitmap colours = CreateGrayscaleBitmapFromMap(map); - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Png); + colours.Save(filename, ImageFormat.Png); } public override string ToString() @@ -44,4 +44,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return "PNG"; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs index 7575b1b..d496069 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/RAW32.cs @@ -25,7 +25,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; using System.IO; using OpenSim.Region.Environment.Interfaces; @@ -57,11 +56,6 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return retval; } - public override string ToString() - { - return "RAW32"; - } - public ITerrainChannel LoadFile(string filename, int offsetX, int offsetY, int fileWidth, int fileHeight, int sectionWidth, int sectionHeight) { TerrainChannel retval = new TerrainChannel(sectionWidth, sectionHeight); @@ -69,7 +63,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders FileInfo file = new FileInfo(filename); FileStream s = file.Open(FileMode.Open, FileAccess.Read); BinaryReader bs = new BinaryReader(s); - + int currFileXOffset = 0; int currFileYOffset = 0; @@ -79,7 +73,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { // read a whole strip of regions int heightsToRead = sectionHeight * (fileWidth * sectionWidth); - bs.ReadBytes( heightsToRead * 4); // because the floats are 4 bytes in the file + bs.ReadBytes(heightsToRead * 4); // because the floats are 4 bytes in the file currFileYOffset++; } @@ -90,13 +84,13 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders for (y = 0; y < sectionHeight; y++) { currFileXOffset = 0; - + // if our region isn't the first X section of the areas to be landscaped, then // advance the stream to the X start pos of our section in the file // i.e. eat X upto where we start while (currFileXOffset < offsetX) { - bs.ReadBytes( sectionWidth * 4); // 4 bytes = single + bs.ReadBytes(sectionWidth * 4); // 4 bytes = single currFileXOffset++; } @@ -111,14 +105,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders // if our region isn't the last X section of the areas to be landscaped, then // advance the stream to the end of this Y column - while (currFileXOffset < fileWidth ) + while (currFileXOffset < fileWidth) { // eat the next regions x line bs.ReadBytes(sectionWidth * 4); // 4 bytes = single currFileXOffset++; } - - } bs.Close(); @@ -138,7 +130,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { for (x = 0; x < map.Width; x++) { - bs.Write((float)map[x, y]); + bs.Write((float) map[x, y]); } } @@ -147,5 +139,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders } #endregion + + public override string ToString() + { + return "RAW32"; + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs index 8eb53fc..39c2428 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/TIFF.cs @@ -24,19 +24,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; using System.Drawing; +using System.Drawing.Imaging; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { - class TIFF : GenericSystemDrawing + internal class TIFF : GenericSystemDrawing { public override void SaveFile(string filename, ITerrainChannel map) { Bitmap colours = CreateGrayscaleBitmapFromMap(map); - colours.Save(filename, System.Drawing.Imaging.ImageFormat.Tiff); + colours.Save(filename, ImageFormat.Tiff); } public override string ToString() @@ -44,4 +44,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders return "TIFF"; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs index 6a3c354..9f9edbc 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FileLoaders/Terragen.cs @@ -37,7 +37,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders /// Built from specification at /// http://www.planetside.co.uk/terragen/dev/tgterrain.html /// - class Terragen : ITerrainLoader + internal class Terragen : ITerrainLoader { #region ITerrainLoader Members @@ -84,7 +84,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders { for (y = 0; y < h; y++) { - retval[x, y] = (double)baseHeight + (double)bs.ReadInt16() * (double)heightScale / 65536.0; + retval[x, y] = (double) baseHeight + (double) bs.ReadInt16() * (double) heightScale / 65536.0; } } break; @@ -107,16 +107,16 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FileLoaders throw new NotImplementedException(); } - public override string ToString() - { - return "Terragen"; - } - public ITerrainChannel LoadFile(string filename, int x, int y, int fileWidth, int fileHeight, int w, int h) { throw new NotImplementedException(); } #endregion + + public override string ToString() + { + return "Terragen"; + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/FlattenArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/FlattenArea.cs index 76abc36..1e0b151 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/FlattenArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/FlattenArea.cs @@ -25,10 +25,6 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using System; -using System.Collections.Generic; -using System.Text; -using OpenSim.Region.Environment.Modules.Terrain; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes @@ -41,14 +37,14 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { double sum = 0.0; double steps = 0.0; - double avg = 0.0; + double avg; int x, y; for (x = 0; x < map.Width; x++) { for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) { sum += map[x, y]; steps += 1.0; @@ -64,7 +60,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) map[x, y] = (map[x, y] * (1.0 - str)) + (avg * str); } } @@ -72,4 +68,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/LowerArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/LowerArea.cs index 4bb7ab1..410d0cf 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/LowerArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/LowerArea.cs @@ -35,12 +35,13 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes public void FloodEffect(ITerrainChannel map, bool[,] fillArea, double strength) { - int x, y; + int x; for (x = 0; x < map.Width; x++) { + int y; for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) { map[x, y] -= strength; } @@ -50,4 +51,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/NoiseArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/NoiseArea.cs index 284ce42..2ea1b90 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/NoiseArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/NoiseArea.cs @@ -25,6 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes @@ -40,9 +41,9 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) { - double noise = TerrainUtil.PerlinNoise2D((double)x / (double)Framework.Constants.RegionSize, (double)y / (double)Framework.Constants.RegionSize, 8, 1.0); + double noise = TerrainUtil.PerlinNoise2D((double) x / Constants.RegionSize, (double) y / Constants.RegionSize, 8, 1.0); map[x, y] += noise * strength; } @@ -52,4 +53,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RaiseArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RaiseArea.cs index 7a9a3e5..4ea06c8 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RaiseArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RaiseArea.cs @@ -40,7 +40,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) { map[x, y] += strength; } @@ -50,4 +50,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RevertArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RevertArea.cs index 45f2d83..198b309 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RevertArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/RevertArea.cs @@ -31,7 +31,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { public class RevertArea : ITerrainFloodEffect { - ITerrainChannel m_revertmap; + private readonly ITerrainChannel m_revertmap; public RevertArea(ITerrainChannel revertmap) { @@ -47,7 +47,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { for (y = 0; y < map.Height; y++) { - if (fillArea[x, y] == true) + if (fillArea[x, y]) { map[x, y] = (map[x, y] * (1.0 - strength)) + (m_revertmap[x, y] * strength); } @@ -57,4 +57,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/SmoothArea.cs b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/SmoothArea.cs index ba4943d..49d8883 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/SmoothArea.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/FloodBrushes/SmoothArea.cs @@ -31,39 +31,6 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes { public class SmoothArea : ITerrainFloodEffect { - private double GetBilinearInterpolate(double x, double y, ITerrainChannel map) - { - int w = map.Width; - int h = map.Height; - - if (x > w - 2.0) - x = w - 2.0; - if (y > h - 2.0) - y = h - 2.0; - if (x < 0.0) - x = 0.0; - if (y < 0.0) - y = 0.0; - - int stepSize = 1; - double h00 = map[(int)x, (int)y]; - double h10 = map[(int)x + stepSize, (int)y]; - double h01 = map[(int)x, (int)y + stepSize]; - double h11 = map[(int)x + stepSize, (int)y + stepSize]; - double h1 = h00; - double h2 = h10; - double h3 = h01; - double h4 = h11; - double a00 = h1; - double a10 = h2 - h1; - double a01 = h3 - h1; - double a11 = h1 - h2 - h3 + h4; - double partialx = x - (int)x; - double partialz = y - (int)y; - double hi = a00 + (a10 * partialx) + (a01 * partialz) + (a11 * partialx * partialz); - return hi; - } - #region ITerrainFloodEffect Members public void FloodEffect(ITerrainChannel map, bool[,] fillArea, double strength) @@ -71,9 +38,8 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes double area = strength; double step = strength / 4.0; - double[,] manipulate = new double[map.Width, map.Height]; + double[,] manipulate = new double[map.Width,map.Height]; int x, y; - double n, l; for (x = 0; x < map.Width; x++) { for (y = 0; y < map.Height; y++) @@ -84,8 +50,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes double average = 0.0; int avgsteps = 0; + double n; for (n = 0.0 - area; n < area; n += step) { + double l; for (l = 0.0 - area; l < area; l += step) { avgsteps++; @@ -109,5 +77,38 @@ namespace OpenSim.Region.Environment.Modules.Terrain.FloodBrushes } #endregion + + private static double GetBilinearInterpolate(double x, double y, ITerrainChannel map) + { + int w = map.Width; + int h = map.Height; + + if (x > w - 2.0) + x = w - 2.0; + if (y > h - 2.0) + y = h - 2.0; + if (x < 0.0) + x = 0.0; + if (y < 0.0) + y = 0.0; + + int stepSize = 1; + double h00 = map[(int) x, (int) y]; + double h10 = map[(int) x + stepSize, (int) y]; + double h01 = map[(int) x, (int) y + stepSize]; + double h11 = map[(int) x + stepSize, (int) y + stepSize]; + double h1 = h00; + double h2 = h10; + double h3 = h01; + double h4 = h11; + double a00 = h1; + double a10 = h2 - h1; + double a01 = h3 - h1; + double a11 = h1 - h2 - h3 + h4; + double partialx = x - (int) x; + double partialz = y - (int) y; + double hi = a00 + (a10 * partialx) + (a01 * partialz) + (a11 * partialx * partialz); + return hi; + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/ITerrainEffect.cs b/OpenSim/Region/Environment/Modules/Terrain/ITerrainEffect.cs index 5063e46..96e92f2 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/ITerrainEffect.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/ITerrainEffect.cs @@ -33,4 +33,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain { void RunEffect(ITerrainChannel map); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/ITerrainFloodEffect.cs b/OpenSim/Region/Environment/Modules/Terrain/ITerrainFloodEffect.cs index e866876..7d33bf8 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/ITerrainFloodEffect.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/ITerrainFloodEffect.cs @@ -25,8 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using OpenSim.Region.Environment.Interfaces; using System; +using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain { @@ -34,4 +34,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain { void FloodEffect(ITerrainChannel map, Boolean[,] fillArea, double strength); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/ITerrainLoader.cs b/OpenSim/Region/Environment/Modules/Terrain/ITerrainLoader.cs index 2c391df..992ed1e 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/ITerrainLoader.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/ITerrainLoader.cs @@ -35,4 +35,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain ITerrainChannel LoadFile(string filename, int fileStartX, int fileStartY, int fileWidth, int fileHeight, int sectionWidth, int sectionHeight); void SaveFile(string filename, ITerrainChannel map); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/ITerrainModule.cs b/OpenSim/Region/Environment/Modules/Terrain/ITerrainModule.cs index 3d00b2d..9e79d17 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/ITerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/ITerrainModule.cs @@ -1,9 +1,8 @@ -using System; -namespace OpenSim.Region.Environment.Modules.Terrain +namespace OpenSim.Region.Environment.Modules.Terrain { public interface ITerrainModule { void LoadFromFile(string filename); void SaveToFile(string filename); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/ITerrainPaintableEffect.cs b/OpenSim/Region/Environment/Modules/Terrain/ITerrainPaintableEffect.cs index f2edff6..07fcb72 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/ITerrainPaintableEffect.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/ITerrainPaintableEffect.cs @@ -33,4 +33,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain { void PaintEffect(ITerrainChannel map, double x, double y, double strength, double duration); } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs b/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs index 96b5d52..763735f 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/MapImageModule.cs @@ -26,20 +26,40 @@ */ using System; -using System.Collections.Generic; using System.Drawing; -using libsecondlife; using Nini.Config; -using OpenSim.Framework; +using OpenJPEGNet; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; -using OpenSim.Region.Environment.Modules.ModuleFramework; namespace OpenSim.Region.Environment.Modules.Terrain { - class MapImageModule : IMapImageGenerator, IRegionModule + internal class MapImageModule : IMapImageGenerator, IRegionModule { private Scene m_scene; + + #region IMapImageGenerator Members + + public byte[] WriteJpeg2000Image(string gradientmap) + { + byte[] imageData = null; + + Bitmap bmp = TerrainToBitmap(gradientmap); + + try + { + imageData = OpenJPEG.EncodeFromImage(bmp, true); + } + catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke + { + Console.WriteLine("Failed generating terrain map: " + e); + } + + return imageData; + } + + #endregion + #region IRegionModule Members public void Initialise(Scene scene, IConfigSource source) @@ -66,24 +86,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain get { return false; } } - - public byte[] WriteJpeg2000Image(string gradientmap) - { - byte[] imageData = null; - - Bitmap bmp = TerrainToBitmap(gradientmap); - - try - { - imageData = OpenJPEGNet.OpenJPEG.EncodeFromImage(bmp, true); - } - catch (Exception e) // LEGIT: Catching problems caused by OpenJPEG p/invoke - { - Console.WriteLine("Failed generating terrain map: " + e.ToString()); - } - - return imageData; - } + #endregion private void ShadeBuildings(ref Bitmap map) { @@ -95,18 +98,20 @@ namespace OpenSim.Region.Environment.Modules.Terrain { if (entity is SceneObjectGroup) { - SceneObjectGroup sog = (SceneObjectGroup)entity; + SceneObjectGroup sog = (SceneObjectGroup) entity; foreach (SceneObjectPart primitive in sog.Children.Values) { - int x, y, w, h, dx, dy; - x = (int)(primitive.AbsolutePosition.X - (primitive.Scale.X / 2)); - y = (int)(primitive.AbsolutePosition.Y - (primitive.Scale.Y / 2)); - w = (int)primitive.Scale.X; - h = (int)primitive.Scale.Y; + int x, y, w, h; + x = (int) (primitive.AbsolutePosition.X - (primitive.Scale.X / 2)); + y = (int) (primitive.AbsolutePosition.Y - (primitive.Scale.Y / 2)); + w = (int) primitive.Scale.X; + h = (int) primitive.Scale.Y; + int dx; for (dx = x; dx < x + w; dx++) { + int dy; for (dy = y; dy < y + h; dy++) { if (x < 0 || y < 0) @@ -117,8 +122,6 @@ namespace OpenSim.Region.Environment.Modules.Terrain map.SetPixel(dx, dy, Color.DarkGray); } } - - } } } @@ -148,7 +151,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain for (int x = 0; x < copy.Width; x++) { // 512 is the largest possible height before colours clamp - int colorindex = (int)(Math.Max(Math.Min(1.0, copy[x, y] / 512.0), 0.0) * (pallete - 1)); + int colorindex = (int) (Math.Max(Math.Min(1.0, copy[x, y] / 512.0), 0.0) * (pallete - 1)); // Handle error conditions if (colorindex > pallete - 1 || colorindex < 0) @@ -161,7 +164,5 @@ namespace OpenSim.Region.Environment.Modules.Terrain return bmp; } } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/ErodeSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/ErodeSphere.cs index a8942dc..cfb1f60 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/ErodeSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/ErodeSphere.cs @@ -25,8 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using OpenSim.Region.Environment.Interfaces; using System; +using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes { @@ -35,18 +35,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes /// public class ErodeSphere : ITerrainPaintableEffect { - NeighbourSystem type = NeighbourSystem.Moore; // Parameter - - double rainHeight = 0.2; - int rounds = 10; - double waterSaturation = 0.30; // Can carry 1% of water in height + private double rainHeight = 0.2; + private int rounds = 10; + private NeighbourSystem type = NeighbourSystem.Moore; // Parameter + private double waterSaturation = 0.30; // Can carry 1% of water in height #region Supporting Functions - private enum NeighbourSystem - { - Moore, - VonNeumann - } ; private int[] Neighbours(NeighbourSystem type, int index) { @@ -146,6 +140,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes return coord; } + private enum NeighbourSystem + { + Moore, + VonNeumann + } ; + #endregion #region ITerrainPaintableEffect Members @@ -266,7 +266,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes // Calculate how much water we can move double waterMin = Math.Min(water[x, y], altitudeDelta); double waterDelta = waterMin * ((water[coords[0], coords[1]] + map[coords[0], coords[1]]) - / altitudeTotal); + / altitudeTotal); double sedimentDelta = sediment[x, y] * (waterDelta / water[x, y]); @@ -309,4 +309,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/FlattenSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/FlattenSphere.cs index 9bfb981..d907ed2 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/FlattenSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/FlattenSphere.cs @@ -31,12 +31,6 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes { public class FlattenSphere : ITerrainPaintableEffect { - private double SphericalFactor(double x, double y, double rx, double ry, double size) - { - double z = size * size - ((x - rx) * (x - rx) + (y - ry) * (y - ry)); - return z; - } - // TODO: unused // private double GetBilinearInterpolate(double x, double y, ITerrainChannel map) // { @@ -78,7 +72,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes strength = TerrainUtil.MetersToSphericalStrength(strength); int x, y; - double[,] tweak = new double[map.Width, map.Height]; + double[,] tweak = new double[map.Width,map.Height]; double area = strength; double step = strength / 4.0; @@ -123,5 +117,11 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes } #endregion + + private double SphericalFactor(double x, double y, double rx, double ry, double size) + { + double z = size * size - ((x - rx) * (x - rx) + (y - ry) * (y - ry)); + return z; + } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/LowerSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/LowerSphere.cs index 9185b5d..ead1a49 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/LowerSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/LowerSphere.cs @@ -64,4 +64,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/NoiseSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/NoiseSphere.cs index 9b45b34..e3babbf 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/NoiseSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/NoiseSphere.cs @@ -57,7 +57,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes z *= z; z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); - double noise = TerrainUtil.PerlinNoise2D((double)x / (double)Framework.Constants.RegionSize, (double)y / (double)Framework.Constants.RegionSize, 8, 1.0); + double noise = TerrainUtil.PerlinNoise2D((double) x / (double) Constants.RegionSize, (double) y / (double) Constants.RegionSize, 8, 1.0); if (z > 0.0) map[x, y] += noise * z * duration; @@ -67,4 +67,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/OlsenSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/OlsenSphere.cs index 23dea8a..153fc15 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/OlsenSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/OlsenSphere.cs @@ -25,8 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -using OpenSim.Region.Environment.Interfaces; using System; +using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes { @@ -38,16 +38,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes /// public class OlsenSphere : ITerrainPaintableEffect { - NeighbourSystem type = NeighbourSystem.Moore; // Parameter - - double nConst = 1024.0; + private double nConst = 1024.0; + private NeighbourSystem type = NeighbourSystem.Moore; // Parameter #region Supporting Functions - private enum NeighbourSystem - { - Moore, - VonNeumann - } ; private int[] Neighbours(NeighbourSystem type, int index) { @@ -153,6 +147,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes return z; } + private enum NeighbourSystem + { + Moore, + VonNeumann + } ; + #endregion #region ITerrainPaintableEffect Members @@ -222,4 +222,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs index f90c407..8d61a7e 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs @@ -64,4 +64,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RevertSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RevertSphere.cs index 382c756..ee0edb5 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RevertSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RevertSphere.cs @@ -32,7 +32,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes { public class RevertSphere : ITerrainPaintableEffect { - ITerrainChannel m_revertmap; + private ITerrainChannel m_revertmap; public RevertSphere(ITerrainChannel revertmap) { @@ -79,4 +79,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/SmoothSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/SmoothSphere.cs index db5fb72..86a01cc 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/SmoothSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/SmoothSphere.cs @@ -38,24 +38,24 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes strength = TerrainUtil.MetersToSphericalStrength(strength); int x, y; - double[,] tweak = new double[map.Width, map.Height]; - + double[,] tweak = new double[map.Width,map.Height]; + double n, l; double area = strength; double step = strength / 4.0; - + // compute delta map for (x = 0; x < map.Width; x++) { for (y = 0; y < map.Height; y++) { double z = TerrainUtil.SphericalFactor(x, y, rx, ry, strength); - + if (z > 0) // add in non-zero amount { double average = 0.0; int avgsteps = 0; - + for (n = 0.0 - area; n < area; n += step) { for (l = 0.0 - area; l < area; l += step) @@ -74,7 +74,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes for (y = 0; y < map.Height; y++) { double z = TerrainUtil.SphericalFactor(x, y, rx, ry, strength); - + if (z > 0) // add in non-zero amount { double da = z; @@ -90,4 +90,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/WeatherSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/WeatherSphere.cs index 79c9c63..f46ba8f 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/WeatherSphere.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/WeatherSphere.cs @@ -34,15 +34,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes /// public class WeatherSphere : ITerrainPaintableEffect { - NeighbourSystem type = NeighbourSystem.Moore; // Parameter - double talus = 0.2; // Number of meters max difference before stop eroding. Tweakage required. + private double talus = 0.2; // Number of meters max difference before stop eroding. Tweakage required. + private NeighbourSystem type = NeighbourSystem.Moore; // Parameter #region Supporting Functions - private enum NeighbourSystem - { - Moore, - VonNeumann - } ; private int[] Neighbours(NeighbourSystem type, int index) { @@ -142,6 +137,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes return coord; } + private enum NeighbourSystem + { + Moore, + VonNeumann + } ; + #endregion #region ITerrainPaintableEffect Members @@ -203,4 +204,4 @@ namespace OpenSim.Region.Environment.Modules.Terrain.PaintBrushes #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs index 01f6bdf..1344715 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs @@ -35,34 +35,70 @@ namespace OpenSim.Region.Environment.Modules.Terrain /// public class TerrainChannel : ITerrainChannel { + private readonly bool[,] taint; private double[,] map; - private bool[,] taint; - public int Width + public TerrainChannel() { - get { return map.GetLength(0); } + map = new double[Constants.RegionSize,Constants.RegionSize]; + taint = new bool[Constants.RegionSize / 16,Constants.RegionSize / 16]; + + int x; + for (x = 0; x < Constants.RegionSize; x++) + { + int y; + for (y = 0; y < Constants.RegionSize; y++) + { + map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10; + double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01; + if (map[x, y] < spherFac) + { + map[x, y] = spherFac; + } + } + } } - public int Height + public TerrainChannel(double[,] import) { - get { return map.GetLength(1); } + map = import; + taint = new bool[import.GetLength(0),import.GetLength(1)]; } - public TerrainChannel Copy() + public TerrainChannel(bool createMap) { - TerrainChannel copy = new TerrainChannel(false); - copy.map = (double[,])this.map.Clone(); + if (createMap) + { + map = new double[Constants.RegionSize,Constants.RegionSize]; + taint = new bool[Constants.RegionSize / 16,Constants.RegionSize / 16]; + } + } - return copy; + public TerrainChannel(int w, int h) + { + map = new double[w,h]; + taint = new bool[w / 16,h / 16]; + } + + #region ITerrainChannel Members + + public int Width + { + get { return map.GetLength(0); } + } + + public int Height + { + get { return map.GetLength(1); } } public ITerrainChannel MakeCopy() { TerrainChannel copy = new TerrainChannel(false); - copy.map = (double[,])this.map.Clone(); + copy.map = (double[,]) map.Clone(); return copy; - } + } public float[] GetFloatsSerialised() { @@ -71,7 +107,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain for (i = 0; i < Width * Height; i++) { - heights[i] = (float)map[i % Width, i / Width]; + heights[i] = (float) map[i % Width, i / Width]; } return heights; @@ -84,10 +120,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain public double this[int x, int y] { - get - { - return map[x, y]; - } + get { return map[x, y]; } set { if (map[x, y] != value) @@ -100,7 +133,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain public bool Tainted(int x, int y) { - if (taint[x / 16, y / 16] != false) + if (taint[x / 16, y / 16]) { taint[x / 16, y / 16] = false; return true; @@ -111,45 +144,14 @@ namespace OpenSim.Region.Environment.Modules.Terrain } } - public TerrainChannel() - { - map = new double[Constants.RegionSize, Constants.RegionSize]; - taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16]; + #endregion - int x, y; - for (x = 0; x < Constants.RegionSize; x++) - { - for (y = 0; y < Constants.RegionSize; y++) - { - map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10; - double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01; - if (map[x, y] < spherFac) - { - map[x, y] = spherFac; - } - } - } - } - - public TerrainChannel(double[,] import) - { - map = import; - taint = new bool[import.GetLength(0), import.GetLength(1)]; - } - - public TerrainChannel(bool createMap) + public TerrainChannel Copy() { - if (createMap) - { - map = new double[Constants.RegionSize, Constants.RegionSize]; - taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16]; - } - } + TerrainChannel copy = new TerrainChannel(false); + copy.map = (double[,]) map.Clone(); - public TerrainChannel(int w, int h) - { - map = new double[w, h]; - taint = new bool[w / 16, h / 16]; + return copy; } } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs index 27bfb36..987c3d0 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainModule.cs @@ -27,18 +27,29 @@ using System; using System.Collections.Generic; -using System.Drawing; +using System.IO; +using System.Reflection; using libsecondlife; +using log4net; using Nini.Config; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Modules.ModuleFramework; +using OpenSim.Region.Environment.Modules.Terrain.Effects; +using OpenSim.Region.Environment.Modules.Terrain.FileLoaders; +using OpenSim.Region.Environment.Modules.Terrain.FloodBrushes; +using OpenSim.Region.Environment.Modules.Terrain.PaintBrushes; +using OpenSim.Region.Environment.Scenes; namespace OpenSim.Region.Environment.Modules.Terrain { - public class TerrainModule : IRegionModule, ICommandableModule, OpenSim.Region.Environment.Modules.Terrain.ITerrainModule + public class TerrainModule : IRegionModule, ICommandableModule, ITerrainModule { + #region StandardTerrainEffects enum + + /// + /// A standard set of terrain brushes and effects recognised by viewers + /// public enum StandardTerrainEffects : byte { Flatten = 0, @@ -54,68 +65,100 @@ namespace OpenSim.Region.Environment.Modules.Terrain Olsen = 253 } - private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + #endregion - private Commander m_commander = new Commander("Terrain"); + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Dictionary m_painteffects = - new Dictionary(); - private Dictionary m_floodeffects = + private readonly Commander m_commander = new Commander("Terrain"); + + private readonly Dictionary m_floodeffects = new Dictionary(); - private Dictionary m_loaders = new Dictionary(); - Scene m_scene; - ITerrainChannel m_channel; - ITerrainChannel m_revert; - bool m_tainted = false; - private IConfigSource m_gConfig; - private void InstallDefaultEffects() - { - // Draggable Paint Brush Effects - m_painteffects[StandardTerrainEffects.Raise] = new PaintBrushes.RaiseSphere(); - m_painteffects[StandardTerrainEffects.Lower] = new PaintBrushes.LowerSphere(); - m_painteffects[StandardTerrainEffects.Smooth] = new PaintBrushes.SmoothSphere(); - m_painteffects[StandardTerrainEffects.Noise] = new PaintBrushes.NoiseSphere(); - m_painteffects[StandardTerrainEffects.Flatten] = new PaintBrushes.FlattenSphere(); - m_painteffects[StandardTerrainEffects.Revert] = new PaintBrushes.RevertSphere(m_revert); - m_painteffects[StandardTerrainEffects.Erode] = new PaintBrushes.ErodeSphere(); - m_painteffects[StandardTerrainEffects.Weather] = new PaintBrushes.WeatherSphere(); - m_painteffects[StandardTerrainEffects.Olsen] = new PaintBrushes.OlsenSphere(); + private readonly Dictionary m_loaders = new Dictionary(); - // Area of effect selection effects - m_floodeffects[StandardTerrainEffects.Raise] = new FloodBrushes.RaiseArea(); - m_floodeffects[StandardTerrainEffects.Lower] = new FloodBrushes.LowerArea(); - m_floodeffects[StandardTerrainEffects.Smooth] = new FloodBrushes.SmoothArea(); - m_floodeffects[StandardTerrainEffects.Noise] = new FloodBrushes.NoiseArea(); - m_floodeffects[StandardTerrainEffects.Flatten] = new FloodBrushes.FlattenArea(); - m_floodeffects[StandardTerrainEffects.Revert] = new FloodBrushes.RevertArea(m_revert); + private readonly Dictionary m_painteffects = + new Dictionary(); - // Filesystem load/save loaders - m_loaders[".r32"] = new FileLoaders.RAW32(); - m_loaders[".f32"] = m_loaders[".r32"]; - m_loaders[".ter"] = new FileLoaders.Terragen(); - m_loaders[".raw"] = new FileLoaders.LLRAW(); - m_loaders[".jpg"] = new FileLoaders.JPEG(); - m_loaders[".jpeg"] = m_loaders[".jpg"]; - m_loaders[".bmp"] = new FileLoaders.BMP(); - m_loaders[".png"] = new FileLoaders.PNG(); - m_loaders[".gif"] = new FileLoaders.GIF(); - m_loaders[".tif"] = new FileLoaders.TIFF(); - m_loaders[".tiff"] = m_loaders[".tif"]; + private ITerrainChannel m_channel; + private ITerrainChannel m_revert; + private Scene m_scene; + private bool m_tainted = false; + + #region ICommandableModule Members + + public ICommander CommandInterface + { + get { return m_commander; } } - public void UpdateRevertMap() + #endregion + + #region IRegionModule Members + + /// + /// Creates and initialises a terrain module for a region + /// + /// Region initialising + /// Config for the region + public void Initialise(Scene scene, IConfigSource config) { - int x, y; - for (x = 0; x < m_channel.Width; x++) + m_scene = scene; + + // Install terrain module in the simulator + if (m_scene.Heightmap == null) { - for (y = 0; y < m_channel.Height; y++) + lock (m_scene) { - m_revert[x, y] = m_channel[x, y]; + m_channel = new TerrainChannel(); + m_scene.Heightmap = m_channel; + m_revert = new TerrainChannel(); + UpdateRevertMap(); } } + else + { + m_channel = m_scene.Heightmap; + m_revert = new TerrainChannel(); + UpdateRevertMap(); + } + + m_scene.RegisterModuleInterface(this); + m_scene.EventManager.OnNewClient += EventManager_OnNewClient; + m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; + m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick; + } + + /// + /// Enables terrain module when called + /// + public void PostInitialise() + { + InstallDefaultEffects(); + InstallInterfaces(); + } + + public void Close() + { + } + + public string Name + { + get { return "TerrainModule"; } } + public bool IsSharedModule + { + get { return false; } + } + + #endregion + + #region ITerrainModule Members + + /// + /// Loads a terrain file from disk and installs it in the scene. + /// + /// Filename to terrain file. Type is determined by extension. public void LoadFromFile(string filename) { foreach (KeyValuePair loader in m_loaders) @@ -133,12 +176,14 @@ namespace OpenSim.Region.Environment.Modules.Terrain } catch (NotImplementedException) { - m_log.Error("[TERRAIN]: Unable to load heightmap, the " + loader.Value.ToString() + " parser does not support file loading. (May be save only)"); + m_log.Error("[TERRAIN]: Unable to load heightmap, the " + loader.Value + + " parser does not support file loading. (May be save only)"); return; } - catch (System.IO.FileNotFoundException) + catch (FileNotFoundException) { - m_log.Error("[TERRAIN]: Unable to load heightmap, file not found. (A directory permissions error may also cause this)"); + m_log.Error( + "[TERRAIN]: Unable to load heightmap, file not found. (A directory permissions error may also cause this)"); return; } } @@ -149,10 +194,97 @@ namespace OpenSim.Region.Environment.Modules.Terrain m_log.Error("[TERRAIN]: Unable to load heightmap, no file loader availible for that format."); } + /// + /// Saves the current heightmap to a specified file. + /// + /// The destination filename + public void SaveToFile(string filename) + { + try + { + foreach (KeyValuePair loader in m_loaders) + { + if (filename.EndsWith(loader.Key)) + { + loader.Value.SaveFile(filename, m_channel); + return; + } + } + } + catch (NotImplementedException) + { + m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented."); + } + } + + #endregion + + /// + /// Installs into terrain module the standard suite of brushes + /// + private void InstallDefaultEffects() + { + // Draggable Paint Brush Effects + m_painteffects[StandardTerrainEffects.Raise] = new RaiseSphere(); + m_painteffects[StandardTerrainEffects.Lower] = new LowerSphere(); + m_painteffects[StandardTerrainEffects.Smooth] = new SmoothSphere(); + m_painteffects[StandardTerrainEffects.Noise] = new NoiseSphere(); + m_painteffects[StandardTerrainEffects.Flatten] = new FlattenSphere(); + m_painteffects[StandardTerrainEffects.Revert] = new RevertSphere(m_revert); + m_painteffects[StandardTerrainEffects.Erode] = new ErodeSphere(); + m_painteffects[StandardTerrainEffects.Weather] = new WeatherSphere(); + m_painteffects[StandardTerrainEffects.Olsen] = new OlsenSphere(); + + // Area of effect selection effects + m_floodeffects[StandardTerrainEffects.Raise] = new RaiseArea(); + m_floodeffects[StandardTerrainEffects.Lower] = new LowerArea(); + m_floodeffects[StandardTerrainEffects.Smooth] = new SmoothArea(); + m_floodeffects[StandardTerrainEffects.Noise] = new NoiseArea(); + m_floodeffects[StandardTerrainEffects.Flatten] = new FlattenArea(); + m_floodeffects[StandardTerrainEffects.Revert] = new RevertArea(m_revert); + + // Filesystem load/save loaders + m_loaders[".r32"] = new RAW32(); + m_loaders[".f32"] = m_loaders[".r32"]; + m_loaders[".ter"] = new Terragen(); + m_loaders[".raw"] = new LLRAW(); + m_loaders[".jpg"] = new JPEG(); + m_loaders[".jpeg"] = m_loaders[".jpg"]; + m_loaders[".bmp"] = new BMP(); + m_loaders[".png"] = new PNG(); + m_loaders[".gif"] = new GIF(); + m_loaders[".tif"] = new TIFF(); + m_loaders[".tiff"] = m_loaders[".tif"]; + } + + /// + /// Saves the current state of the region into the revert map buffer. + /// + public void UpdateRevertMap() + { + int x; + for (x = 0; x < m_channel.Width; x++) + { + int y; + for (y = 0; y < m_channel.Height; y++) + { + m_revert[x, y] = m_channel[x, y]; + } + } + } + + /// + /// Loads a tile from a larger terrain file and installs it into the region. + /// + /// The terrain file to load + /// The width of the file in units + /// The height of the file in units + /// Where to begin our slice + /// Where to begin our slice public void LoadFromFile(string filename, int fileWidth, int fileHeight, int fileStartX, int fileStartY) { - int offsetX = (int)m_scene.RegionInfo.RegionLocX - fileStartX; - int offsetY = (int)m_scene.RegionInfo.RegionLocY - fileStartY; + int offsetX = (int) m_scene.RegionInfo.RegionLocX - fileStartX; + int offsetY = (int) m_scene.RegionInfo.RegionLocY - fileStartY; if (offsetX >= 0 && offsetX < fileWidth && offsetY >= 0 && offsetY < fileHeight) { @@ -164,7 +296,9 @@ namespace OpenSim.Region.Environment.Modules.Terrain lock (m_scene) { ITerrainChannel channel = loader.Value.LoadFile(filename, offsetX, offsetY, - fileWidth, fileHeight, (int)Constants.RegionSize, (int)Constants.RegionSize); + fileWidth, fileHeight, + (int) Constants.RegionSize, + (int) Constants.RegionSize); m_scene.Heightmap = channel; m_channel = channel; UpdateRevertMap(); @@ -175,61 +309,137 @@ namespace OpenSim.Region.Environment.Modules.Terrain } } - public void SaveToFile(string filename) + /// + /// Performs updates to the region periodically, synchronising physics and other heightmap aware sections + /// + private void EventManager_OnTerrainTick() { - try + if (m_tainted) { - foreach (KeyValuePair loader in m_loaders) - { - if (filename.EndsWith(loader.Key)) - { - loader.Value.SaveFile(filename, m_channel); - return; - } - } + m_tainted = false; + m_scene.PhysicsScene.SetTerrain(m_channel.GetFloatsSerialised()); + m_scene.SaveTerrain(); + m_scene.CreateTerrainTexture(true); } - catch (NotImplementedException) + } + + /// + /// Processes commandline input. Do not call directly. + /// + /// Commandline arguments + private void EventManager_OnPluginConsole(string[] args) + { + if (args[0] == "terrain") { - m_log.Error("Unable to save to " + filename + ", saving of this file format has not been implemented."); + string[] tmpArgs = new string[args.Length - 2]; + int i; + for (i = 2; i < args.Length; i++) + tmpArgs[i - 2] = args[i]; + + m_commander.ProcessConsoleCommand(args[1], tmpArgs); } } - public void Initialise(Scene scene, IConfigSource config) + /// + /// Installs terrain brush hook to IClientAPI + /// + /// + private void EventManager_OnNewClient(IClientAPI client) { - m_scene = scene; - m_gConfig = config; + client.OnModifyTerrain += client_OnModifyTerrain; + } - // Install terrain module in the simulator - if (m_scene.Heightmap == null) + /// + /// Checks to see if the terrain has been modified since last check + /// + private void CheckForTerrainUpdates() + { + bool shouldTaint = false; + float[] serialised = m_channel.GetFloatsSerialised(); + int x; + for (x = 0; x < m_channel.Width; x += Constants.TerrainPatchSize) { - lock (m_scene) + int y; + for (y = 0; y < m_channel.Height; y += Constants.TerrainPatchSize) { - m_channel = new TerrainChannel(); - m_scene.Heightmap = m_channel; - m_revert = new TerrainChannel(); - UpdateRevertMap(); + if (m_channel.Tainted(x, y)) + { + SendToClients(serialised, x, y); + shouldTaint = true; + } } } - else + if (shouldTaint) { - m_channel = m_scene.Heightmap; - m_revert = new TerrainChannel(); - UpdateRevertMap(); + m_tainted = true; } + } - m_scene.RegisterModuleInterface(this); - m_scene.EventManager.OnNewClient += EventManager_OnNewClient; - m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; - m_scene.EventManager.OnTerrainTick += EventManager_OnTerrainTick; + /// + /// Sends a copy of the current terrain to the scenes clients + /// + /// A copy of the terrain as a 1D float array of size w*h + /// The patch corner to send + /// The patch corner to send + private void SendToClients(float[] serialised, int x, int y) + { + m_scene.ForEachClient( + delegate(IClientAPI controller) { controller.SendLayerData(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, serialised); }); } - void EventManager_OnTerrainTick() + private void client_OnModifyTerrain(float height, float seconds, byte size, byte action, float north, float west, + float south, float east, IClientAPI remoteClient) { - if (m_tainted) + // Not a good permissions check, if in area mode, need to check the entire area. + if (m_scene.PermissionsMngr.CanTerraform(remoteClient.AgentId, new LLVector3(north, west, 0))) { - m_tainted = false; - m_scene.PhysicsScene.SetTerrain(m_channel.GetFloatsSerialised()); - m_scene.SaveTerrain(); + if (north == south && east == west) + { + if (m_painteffects.ContainsKey((StandardTerrainEffects) action)) + { + m_painteffects[(StandardTerrainEffects) action].PaintEffect( + m_channel, west, south, size, seconds); + + CheckForTerrainUpdates(); + } + else + { + m_log.Debug("Unknown terrain brush type " + action); + } + } + else + { + if (m_floodeffects.ContainsKey((StandardTerrainEffects) action)) + { + bool[,] fillArea = new bool[m_channel.Width,m_channel.Height]; + fillArea.Initialize(); + + int x; + for (x = 0; x < m_channel.Width; x++) + { + int y; + for (y = 0; y < m_channel.Height; y++) + { + if (x < east && x > west) + { + if (y < north && y > south) + { + fillArea[x, y] = true; + } + } + } + } + + m_floodeffects[(StandardTerrainEffects) action].FloodEffect( + m_channel, fillArea, size); + + CheckForTerrainUpdates(); + } + else + { + m_log.Debug("Unknown terrain flood type " + action); + } + } } } @@ -237,23 +447,23 @@ namespace OpenSim.Region.Environment.Modules.Terrain private void InterfaceLoadFile(Object[] args) { - LoadFromFile((string)args[0]); + LoadFromFile((string) args[0]); CheckForTerrainUpdates(); } private void InterfaceLoadTileFile(Object[] args) { - LoadFromFile((string)args[0], - (int)args[1], - (int)args[2], - (int)args[3], - (int)args[4]); + LoadFromFile((string) args[0], + (int) args[1], + (int) args[2], + (int) args[3], + (int) args[4]); CheckForTerrainUpdates(); } private void InterfaceSaveFile(Object[] args) { - SaveToFile((string)args[0]); + SaveToFile((string) args[0]); } private void InterfaceBakeTerrain(Object[] args) @@ -276,7 +486,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain int x, y; for (x = 0; x < m_channel.Width; x++) for (y = 0; y < m_channel.Height; y++) - m_channel[x, y] += (double)args[0]; + m_channel[x, y] += (double) args[0]; CheckForTerrainUpdates(); } @@ -285,7 +495,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain int x, y; for (x = 0; x < m_channel.Width; x++) for (y = 0; y < m_channel.Height; y++) - m_channel[x, y] *= (double)args[0]; + m_channel[x, y] *= (double) args[0]; CheckForTerrainUpdates(); } @@ -294,7 +504,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain int x, y; for (x = 0; x < m_channel.Width; x++) for (y = 0; y < m_channel.Height; y++) - m_channel[x, y] -= (double)args[0]; + m_channel[x, y] -= (double) args[0]; CheckForTerrainUpdates(); } @@ -304,7 +514,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain for (x = 0; x < m_channel.Width; x++) for (y = 0; y < m_channel.Height; y++) - m_channel[x, y] = (double)args[0]; + m_channel[x, y] = (double) args[0]; CheckForTerrainUpdates(); } @@ -312,12 +522,13 @@ namespace OpenSim.Region.Environment.Modules.Terrain { double max = Double.MinValue; double min = double.MaxValue; - double avg = 0; + double avg; double sum = 0; - int x, y; + int x; for (x = 0; x < m_channel.Width; x++) { + int y; for (y = 0; y < m_channel.Height; y++) { sum += m_channel[x, y]; @@ -336,11 +547,11 @@ namespace OpenSim.Region.Environment.Modules.Terrain private void InterfaceEnableExperimentalBrushes(Object[] args) { - if ((bool)args[0]) + if ((bool) args[0]) { - m_painteffects[StandardTerrainEffects.Revert] = new PaintBrushes.WeatherSphere(); - m_painteffects[StandardTerrainEffects.Flatten] = new PaintBrushes.OlsenSphere(); - m_painteffects[StandardTerrainEffects.Smooth] = new PaintBrushes.ErodeSphere(); + m_painteffects[StandardTerrainEffects.Revert] = new WeatherSphere(); + m_painteffects[StandardTerrainEffects.Flatten] = new OlsenSphere(); + m_painteffects[StandardTerrainEffects.Smooth] = new ErodeSphere(); } else { @@ -350,7 +561,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain private void InterfacePerformEffectTest(Object[] args) { - Effects.CookieCutter cookie = new OpenSim.Region.Environment.Modules.Terrain.Effects.CookieCutter(); + CookieCutter cookie = new CookieCutter(); cookie.RunEffect(m_channel); } @@ -358,46 +569,69 @@ namespace OpenSim.Region.Environment.Modules.Terrain { // Load / Save string supportedFileExtensions = ""; - foreach (KeyValuePair loader in m_loaders) - supportedFileExtensions += " " + loader.Key + " (" + loader.Value.ToString() + ")"; - - Command loadFromFileCommand = new Command("load", 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"); - - Command saveToFileCommand = new Command("save", 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"); - - Command loadFromTileCommand = new Command("load-tile", 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"); + foreach (KeyValuePair loader in m_loaders) + supportedFileExtensions += " " + loader.Key + " (" + loader.Value + ")"; + + Command loadFromFileCommand = + new Command("load", 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"); + + Command saveToFileCommand = + new Command("save", 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"); + + Command loadFromTileCommand = + new Command("load-tile", 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"); 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", "Integer"); - loadFromTileCommand.AddArgument("minimum Y tile", "The Y region coordinate of the first section on the file", "Integer"); + loadFromTileCommand.AddArgument("minimum X tile", "The X region coordinate of the first section on the file", + "Integer"); + loadFromTileCommand.AddArgument("minimum Y tile", "The Y region coordinate of the first section on the file", + "Integer"); // Terrain adjustments - Command fillRegionCommand = new Command("fill", InterfaceFillTerrain, "Fills the current heightmap with a specified value."); - fillRegionCommand.AddArgument("value", "The numeric value of the height you wish to set your region to.", "Double"); + Command fillRegionCommand = + new Command("fill", InterfaceFillTerrain, "Fills the current heightmap with a specified value."); + fillRegionCommand.AddArgument("value", "The numeric value of the height you wish to set your region to.", + "Double"); - Command elevateCommand = new Command("elevate", InterfaceElevateTerrain, "Raises the current heightmap by the specified amount."); + Command elevateCommand = + new Command("elevate", InterfaceElevateTerrain, "Raises the current heightmap by the specified amount."); elevateCommand.AddArgument("amount", "The amount of height to add to the terrain in meters.", "Double"); - Command lowerCommand = new Command("lower", InterfaceLowerTerrain, "Lowers the current heightmap by the specified amount."); + Command lowerCommand = + new Command("lower", InterfaceLowerTerrain, "Lowers the current heightmap by the specified amount."); lowerCommand.AddArgument("amount", "The amount of height to remove from the terrain in meters.", "Double"); - Command multiplyCommand = new Command("multiply", InterfaceMultiplyTerrain, "Multiplies the heightmap by the value specified."); + Command multiplyCommand = + new Command("multiply", InterfaceMultiplyTerrain, "Multiplies the heightmap by the value specified."); multiplyCommand.AddArgument("value", "The value to multiply the heightmap by.", "Double"); - Command bakeRegionCommand = new Command("bake", InterfaceBakeTerrain, "Saves the current terrain into the regions revert map."); - Command revertRegionCommand = new Command("revert", InterfaceRevertTerrain, "Loads the revert map terrain into the regions heightmap."); + Command bakeRegionCommand = + new Command("bake", InterfaceBakeTerrain, "Saves the current terrain into the regions revert map."); + Command revertRegionCommand = + new Command("revert", InterfaceRevertTerrain, "Loads the revert map terrain into the regions heightmap."); // Debug - Command showDebugStatsCommand = new Command("stats", InterfaceShowDebugStats, "Shows some information about the regions heightmap for debugging purposes."); + Command showDebugStatsCommand = + new Command("stats", InterfaceShowDebugStats, + "Shows some information about the regions heightmap for debugging purposes."); - Command experimentalBrushesCommand = new Command("newbrushes", InterfaceEnableExperimentalBrushes, "Enables experimental brushes which replace the standard terrain brushes. WARNING: This is a debug setting and may be removed at any time."); + Command experimentalBrushesCommand = + new Command("newbrushes", InterfaceEnableExperimentalBrushes, + "Enables experimental brushes which replace the standard terrain brushes. WARNING: This is a debug setting and may be removed at any time."); experimentalBrushesCommand.AddArgument("Enabled?", "true / false - Enable new brushes", "Boolean"); // Effects - Command effectsTestCommand = new Command("test", InterfacePerformEffectTest, "Performs an effects module test"); + Command effectsTestCommand = + new Command("test", InterfacePerformEffectTest, "Performs an effects module test"); m_commander.RegisterCommand("load", loadFromFileCommand); m_commander.RegisterCommand("load-tile", loadFromTileCommand); @@ -417,147 +651,5 @@ namespace OpenSim.Region.Environment.Modules.Terrain } #endregion - - void EventManager_OnPluginConsole(string[] args) - { - if (args[0] == "terrain") - { - string[] tmpArgs = new string[args.Length - 2]; - int i = 0; - for (i = 2; i < args.Length; i++) - tmpArgs[i - 2] = args[i]; - - m_commander.ProcessConsoleCommand(args[1], tmpArgs); - } - } - - void EventManager_OnNewClient(IClientAPI client) - { - client.OnModifyTerrain += client_OnModifyTerrain; - } - - void CheckForTerrainUpdates() - { - bool shouldTaint = false; - float[] serialised = m_channel.GetFloatsSerialised(); - int x, y; - for (x = 0; x < m_channel.Width; x += Constants.TerrainPatchSize) - { - for (y = 0; y < m_channel.Height; y += Constants.TerrainPatchSize) - { - if (m_channel.Tainted(x, y)) - { - SendToClients(serialised, x, y); - shouldTaint = true; - } - } - } - if (shouldTaint) - { - m_tainted = true; - } - } - - private void SendToClients(float[] serialised, int x, int y) - { - m_scene.ForEachClient(delegate(IClientAPI controller) - { - controller.SendLayerData(x / Constants.TerrainPatchSize, y / Constants.TerrainPatchSize, serialised); - }); - } - - void client_OnModifyTerrain(float height, float seconds, byte size, byte action, float north, float west, float south, float east, IClientAPI remoteClient) - { - // Not a good permissions check, if in area mode, need to check the entire area. - if (m_scene.PermissionsMngr.CanTerraform(remoteClient.AgentId, new LLVector3(north, west, 0))) - { - - if (north == south && east == west) - { - if (m_painteffects.ContainsKey((StandardTerrainEffects)action)) - { - m_painteffects[(StandardTerrainEffects)action].PaintEffect( - m_channel, west, south, size, seconds); - - bool usingTerrainModule = true; - - if (usingTerrainModule) - { - CheckForTerrainUpdates(); - } - } - else - { - m_log.Debug("Unknown terrain brush type " + action.ToString()); - } - } - else - { - if (m_floodeffects.ContainsKey((StandardTerrainEffects)action)) - { - bool[,] fillArea = new bool[m_channel.Width, m_channel.Height]; - fillArea.Initialize(); - - int x, y; - - for (x = 0; x < m_channel.Width; x++) - { - for (y = 0; y < m_channel.Height; y++) - { - if (x < east && x > west) - { - if (y < north && y > south) - { - fillArea[x, y] = true; - } - } - } - } - - m_floodeffects[(StandardTerrainEffects)action].FloodEffect( - m_channel, fillArea, size); - bool usingTerrainModule = true; - - if (usingTerrainModule) - { - CheckForTerrainUpdates(); - } - } - else - { - m_log.Debug("Unknown terrain flood type " + action.ToString()); - } - } - } - } - - public void PostInitialise() - { - InstallDefaultEffects(); - InstallInterfaces(); - } - - public void Close() - { - } - - public string Name - { - get { return "TerrainModule"; } - } - - public bool IsSharedModule - { - get { return false; } - } - - #region ICommandable Members - - public ICommander CommandInterface - { - get { return m_commander; } - } - - #endregion } -} +} \ No newline at end of file diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainUtil.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainUtil.cs index bae171b..d4d0922 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainUtil.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainUtil.cs @@ -57,10 +57,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain y = 0.0; int stepSize = 1; - double h00 = map[(int)x, (int)y]; - double h10 = map[(int)x + stepSize, (int)y]; - double h01 = map[(int)x, (int)y + stepSize]; - double h11 = map[(int)x + stepSize, (int)y + stepSize]; + double h00 = map[(int) x, (int) y]; + double h10 = map[(int) x + stepSize, (int) y]; + double h01 = map[(int) x, (int) y + stepSize]; + double h11 = map[(int) x + stepSize, (int) y + stepSize]; double h1 = h00; double h2 = h10; double h3 = h01; @@ -69,15 +69,15 @@ namespace OpenSim.Region.Environment.Modules.Terrain double a10 = h2 - h1; double a01 = h3 - h1; double a11 = h1 - h2 - h3 + h4; - double partialx = x - (int)x; - double partialz = y - (int)y; + double partialx = x - (int) x; + double partialz = y - (int) y; double hi = a00 + (a10 * partialx) + (a01 * partialz) + (a11 * partialx * partialz); return hi; } private static double Noise(double x, double y) { - int n = (int)x + (int)(y * 749); + int n = (int) x + (int) (y * 749); n = (n << 13) ^ n; return (1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); } @@ -97,10 +97,10 @@ namespace OpenSim.Region.Environment.Modules.Terrain private static double InterpolatedNoise(double x, double y) { - int integer_X = (int)(x); + int integer_X = (int) (x); double fractional_X = x - integer_X; - int integer_Y = (int)y; + int integer_Y = (int) y; double fractional_Y = y - integer_Y; double v1 = SmoothedNoise1(integer_X, integer_Y); @@ -122,12 +122,12 @@ namespace OpenSim.Region.Environment.Modules.Terrain for (int i = 0; i < octaves; i++) { - frequency = System.Math.Pow(2, i); - amplitude = System.Math.Pow(persistence, i); + frequency = Math.Pow(2, i); + amplitude = Math.Pow(persistence, i); total += InterpolatedNoise(x * frequency, y * frequency) * amplitude; } return total; } } -} +} \ No newline at end of file -- cgit v1.1