* 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.0.6.0-stable
parent
9f5586890a
commit
eae7be1e36
|
@ -0,0 +1,30 @@
|
|||
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
|
||||
{
|
||||
class RaiseArea : ITerrainFloodEffect
|
||||
{
|
||||
#region ITerrainFloodEffect Members
|
||||
|
||||
public void FloodEffect(ITerrainChannel map, bool[,] fillArea, double strength)
|
||||
{
|
||||
int x, y;
|
||||
for (x = 0; x < map.Width; x++)
|
||||
{
|
||||
for (y = 0; y < map.Height; y++)
|
||||
{
|
||||
if (fillArea[x, y] == true)
|
||||
{
|
||||
map[x, y] += strength;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -39,6 +39,16 @@ using libsecondlife;
|
|||
|
||||
namespace OpenSim.Region.Environment.Modules.Terrain
|
||||
{
|
||||
public interface ITerrainPaintableEffect
|
||||
{
|
||||
void PaintEffect(ITerrainChannel map, double x, double y, double strength);
|
||||
}
|
||||
|
||||
public interface ITerrainFloodEffect
|
||||
{
|
||||
void FloodEffect(ITerrainChannel map, Boolean[,] fillArea, double strength);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A new version of the old Channel class, simplified
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue