From eae7be1e36733580f67da742403147701f8a8d08 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Tue, 26 Feb 2008 14:51:13 +0000 Subject: * Reimplementing Terrain as Region Modules * New method involves interfaces for ** Terrain Paint Brushes (ie raise brush, lower brush, etc) ** Terrain Flood Brushes (ie raise area, lower area, etc) ** Terrain Effects (ie erosion, etc) [= W.I.P, not committed] * Provided sample implementation for Raise Paint and Raise Area brushes. --- .../Modules/Terrain/PaintBrushes/RaiseSphere.cs | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs (limited to 'OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs') diff --git a/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs new file mode 100644 index 0000000..cf95f3f --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Terrain/PaintBrushes/RaiseSphere.cs @@ -0,0 +1,41 @@ +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.PaintBrushes +{ + class RaiseSphere : ITerrainPaintableEffect + { + #region ITerrainPaintableEffect Members + + public void PaintEffect(ITerrainChannel map, double rx, double ry, double strength) + { + int x, y; + for (x = 0; x < map.Width; x++) + { + // Skip everything unlikely to be affected + if (Math.Abs(x - rx) > strength * 1.1) + continue; + + for (y = 0; y < map.Height; y++) + { + // Skip everything unlikely to be affected + if (Math.Abs(y - ry) > strength * 1.1) + continue; + + // Calculate a sphere and add it to the heighmap + double z = strength; + z *= z; + z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); + + if (z > 0.0) + map[x, y] += z; + } + } + } + + #endregion + } +} -- cgit v1.1