From 4e14aa44c7b7ed9564dd34d797b8a4d577bba684 Mon Sep 17 00:00:00 2001 From: Charles Krinke Date: Sat, 25 Oct 2008 14:07:35 +0000 Subject: Thank you kindly, Tglion for a patch that: Support of strength-slider in latest sl-client (1.21.6) Added a patch, which includes the support of strength-slider in latest sl-client (1.21.6) for Raise- and LowerSphere. --- .../World/Terrain/PaintBrushes/LowerSphere.cs | 36 +++++++++++++++------- .../World/Terrain/PaintBrushes/RaiseSphere.cs | 35 +++++++++++++++------ 2 files changed, 51 insertions(+), 20 deletions(-) (limited to 'OpenSim/Region') diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/LowerSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/LowerSphere.cs index fe82396..290711f 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/LowerSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/LowerSphere.cs @@ -36,29 +36,43 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes public void PaintEffect(ITerrainChannel map, bool[,] mask, double rx, double ry, double rz, double strength, double duration) { - strength = TerrainUtil.MetersToSphericalStrength(strength); - duration = 0.03; //MCP Should be read from ini file - + int s = (int) (Math.Pow(2, strength) + 0.5); + int x; - for (x = 0; x < map.Width; x++) + int xFrom = (int)(rx-s+0.5); + int xTo = (int)(rx+s+0.5) + 1; + int yFrom = (int)(ry-s+0.5); + int yTo = (int)(ry+s+0.5) + 1; + + if (xFrom < 0) + xFrom = 0; + + if (yFrom < 0) + yFrom = 0; + + if (xTo > map.Width) + xTo = map.Width; + + if (yTo > map.Width) + yTo = map.Width; + + for (x = xFrom; x < xTo; x++) { int y; - for (y = 0; y < map.Height; y++) + for (y = yFrom; y <= yTo; y++) { if (!mask[x,y]) continue; - // Calculate a sphere and add it to the heighmap - double z = strength; - z *= z; - z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); - + // Calculate a cos-sphere and add it to the heighmap + double r = Math.Sqrt((x-rx) * (x-rx) + ((y-ry) * (y-ry))); + double z = Math.Cos(r * Math.PI / (s * 2)); if (z > 0.0) map[x, y] -= z * duration; } } - } + } #endregion } } diff --git a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RaiseSphere.cs b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RaiseSphere.cs index 92bac63..b1a52b0 100644 --- a/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RaiseSphere.cs +++ b/OpenSim/Region/Environment/Modules/World/Terrain/PaintBrushes/RaiseSphere.cs @@ -26,34 +26,51 @@ */ using System; +using System.Reflection; +using log4net; using OpenSim.Region.Environment.Interfaces; namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes { public class RaiseSphere : ITerrainPaintableEffect { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); #region ITerrainPaintableEffect Members public void PaintEffect(ITerrainChannel map, bool[,] mask, double rx, double ry, double rz, double strength, double duration) { - duration = 0.03; //MCP Should be read from ini file - strength = TerrainUtil.MetersToSphericalStrength(strength); + int s = (int) (Math.Pow(2, strength) + 0.5); int x; - for (x = 0; x < map.Width; x++) + int xFrom = (int)(rx-s+0.5); + int xTo = (int)(rx+s+0.5) + 1; + int yFrom = (int)(ry-s+0.5); + int yTo = (int)(ry+s+0.5) + 1; + + if (xFrom < 0) + xFrom = 0; + + if (yFrom < 0) + yFrom = 0; + + if (xTo > map.Width) + xTo = map.Width; + + if (yTo > map.Width) + yTo = map.Width; + + for (x = xFrom; x < xTo; x++) { int y; - for (y = 0; y < map.Height; y++) + for (y = yFrom; y <= yTo; y++) { if (!mask[x,y]) continue; - // Calculate a sphere and add it to the heighmap - double z = strength; - z *= z; - z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); - + // Calculate a cos-sphere and add it to the heighmap + double r = Math.Sqrt((x-rx) * (x-rx) + ((y-ry) * (y-ry))); + double z = Math.Cos(r * Math.PI / (s * 2)); if (z > 0.0) map[x, y] += z * duration; } -- cgit v1.1