* Temporarily revert terrain changes in r6976 and reinstate unit test from r6977.

* If a change is going to affect a unit test, then please could we change the unit test at the same time?  Otherwise this will never get done
* It also seems a bad idea to disable tests which start failing unless there's a very good reason
0.6.0-stable
Justin Clarke Casey 2008-10-27 14:27:45 +00:00
parent b2d6b0a3d4
commit 0d69e06779
3 changed files with 48 additions and 79 deletions

View File

@ -36,43 +36,29 @@ 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) public void PaintEffect(ITerrainChannel map, bool[,] mask, double rx, double ry, double rz, double strength, double duration)
{ {
int s = (int) (Math.Pow(2, strength) + 0.5); strength = TerrainUtil.MetersToSphericalStrength(strength);
duration = 0.03; //MCP Should be read from ini file
int x; int x;
int xFrom = (int)(rx-s+0.5); for (x = 0; x < map.Width; x++)
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; int y;
for (y = yFrom; y <= yTo; y++) for (y = 0; y < map.Height; y++)
{ {
if (!mask[x,y]) if (!mask[x,y])
continue; continue;
// Calculate a cos-sphere and add it to the heighmap // Calculate a sphere and add it to the heighmap
double r = Math.Sqrt((x-rx) * (x-rx) + ((y-ry) * (y-ry))); double z = strength;
double z = Math.Cos(r * Math.PI / (s * 2)); z *= z;
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
if (z > 0.0) if (z > 0.0)
map[x, y] -= z * duration; map[x, y] -= z * duration;
} }
} }
} }
#endregion #endregion
} }
} }

View File

@ -26,51 +26,34 @@
*/ */
using System; using System;
using System.Reflection;
using log4net;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes namespace OpenSim.Region.Environment.Modules.World.Terrain.PaintBrushes
{ {
public class RaiseSphere : ITerrainPaintableEffect public class RaiseSphere : ITerrainPaintableEffect
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
#region ITerrainPaintableEffect Members #region ITerrainPaintableEffect Members
public void PaintEffect(ITerrainChannel map, bool[,] mask, double rx, double ry, double rz, double strength, double duration) public void PaintEffect(ITerrainChannel map, bool[,] mask, double rx, double ry, double rz, double strength, double duration)
{ {
int s = (int) (Math.Pow(2, strength) + 0.5); duration = 0.03; //MCP Should be read from ini file
strength = TerrainUtil.MetersToSphericalStrength(strength);
int x; int x;
int xFrom = (int)(rx-s+0.5); for (x = 0; x < map.Width; x++)
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; int y;
for (y = yFrom; y <= yTo; y++) for (y = 0; y < map.Height; y++)
{ {
if (!mask[x,y]) if (!mask[x,y])
continue; continue;
// Calculate a cos-sphere and add it to the heighmap // Calculate a sphere and add it to the heighmap
double r = Math.Sqrt((x-rx) * (x-rx) + ((y-ry) * (y-ry))); double z = strength;
double z = Math.Cos(r * Math.PI / (s * 2)); z *= z;
z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
if (z > 0.0) if (z > 0.0)
map[x, y] += z * duration; map[x, y] += z * duration;
} }

View File

@ -34,34 +34,34 @@ namespace OpenSim.Region.Environment.Modules.World.Terrain.Tests
[TestFixture] [TestFixture]
public class TerrainTest public class TerrainTest
{ {
// [Test] [Test]
// public void BrushTest() public void BrushTest()
// { {
// TerrainChannel map = new TerrainChannel(256, 256); TerrainChannel map = new TerrainChannel(256, 256);
// bool[,] allowMask = new bool[map.Width,map.Height]; bool[,] allowMask = new bool[map.Width,map.Height];
// int x; int x;
// int y; int y;
// for (x=0; x<map.Width; x++) for (x=0; x<map.Width; x++)
// { {
// for (y=0; y<map.Height; y++) for (y=0; y<map.Height; y++)
// { {
// allowMask[x,y] = true; allowMask[x,y] = true;
// } }
// } }
//
// ITerrainPaintableEffect effect = new RaiseSphere(); ITerrainPaintableEffect effect = new RaiseSphere();
//
// effect.PaintEffect(map, allowMask, 128.0, 128.0, 23.0, 100, 0.1); effect.PaintEffect(map, allowMask, 128.0, 128.0, 23.0, 100, 0.1);
// Assert.That(map[128, 128] > 0.0, "Raise brush not raising values."); Assert.That(map[128, 128] > 0.0, "Raise brush not raising values.");
// Assert.That(map[0, 128] > 0.0, "Raise brush lowering edge values."); Assert.That(map[0, 128] > 0.0, "Raise brush lowering edge values.");
//
// map = new TerrainChannel(256, 256); map = new TerrainChannel(256, 256);
// effect = new LowerSphere(); effect = new LowerSphere();
//
// effect.PaintEffect(map, allowMask, 128.0, 128.0, -1, 100, 0.1); effect.PaintEffect(map, allowMask, 128.0, 128.0, -1, 100, 0.1);
// Assert.That(map[128, 128] < 0.0, "Lower not lowering values."); Assert.That(map[128, 128] < 0.0, "Lower not lowering values.");
// Assert.That(map[0, 128] < 0.0, "Lower brush affecting edge values."); Assert.That(map[0, 128] < 0.0, "Lower brush affecting edge values.");
// } }
[Test] [Test]
public void TerrainChannelTest() public void TerrainChannelTest()