mirror of
https://github.com/opensim/opensim.git
synced 2026-05-18 13:35:35 +08:00
* Fixed 'flatten area' brush, so it now has a 'force' instead of instantly flattening the selected area.
* Noise, and Noise-Area brushes now use Perlin noise, more closely simulating the method LL uses officially. * TerrainModule has been cleaned up slightly. * TerrainUtil class has several new functions related to seeded noise generation. * Extracted ITerrainEffect, ITerrainFloodEffect, ITerrainLoader, ITerrainPaintableEffect, TerrainChannel to seperate files.
This commit is contained in:
@@ -36,151 +36,18 @@ using OpenSim.Region.Environment.Scenes;
|
||||
|
||||
namespace OpenSim.Region.Environment.Modules.Terrain
|
||||
{
|
||||
public interface ITerrainPaintableEffect
|
||||
{
|
||||
void PaintEffect(ITerrainChannel map, double x, double y, double strength, double duration);
|
||||
}
|
||||
|
||||
public interface ITerrainFloodEffect
|
||||
{
|
||||
void FloodEffect(ITerrainChannel map, Boolean[,] fillArea, double strength);
|
||||
}
|
||||
|
||||
public interface ITerrainEffect
|
||||
{
|
||||
void RunEffect(ITerrainChannel map, double strength);
|
||||
}
|
||||
|
||||
public interface ITerrainLoader
|
||||
{
|
||||
ITerrainChannel LoadFile(string filename);
|
||||
void SaveFile(string filename, ITerrainChannel map);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A new version of the old Channel class, simplified
|
||||
/// </summary>
|
||||
public class TerrainChannel : ITerrainChannel
|
||||
{
|
||||
private double[,] map;
|
||||
private bool[,] taint;
|
||||
|
||||
public int Width
|
||||
{
|
||||
get { return map.GetLength(0); }
|
||||
}
|
||||
|
||||
public int Height
|
||||
{
|
||||
get { return map.GetLength(1); }
|
||||
}
|
||||
|
||||
public TerrainChannel Copy()
|
||||
{
|
||||
TerrainChannel copy = new TerrainChannel(false);
|
||||
copy.map = (double[,])this.map.Clone();
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
public float[] GetFloatsSerialised()
|
||||
{
|
||||
float[] heights = new float[Width * Height];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < Width * Height; i++)
|
||||
{
|
||||
heights[i] = (float)map[i % Width, i / Width];
|
||||
}
|
||||
|
||||
return heights;
|
||||
}
|
||||
|
||||
public double[,] GetDoubles()
|
||||
{
|
||||
return map;
|
||||
}
|
||||
|
||||
public double this[int x, int y]
|
||||
{
|
||||
get
|
||||
{
|
||||
return map[x, y];
|
||||
}
|
||||
set
|
||||
{
|
||||
if (map[x, y] != value)
|
||||
{
|
||||
taint[x / 16, y / 16] = true;
|
||||
map[x, y] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool Tainted(int x, int y)
|
||||
{
|
||||
if (taint[x / 16, y / 16] != false)
|
||||
{
|
||||
taint[x / 16, y / 16] = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public TerrainChannel()
|
||||
{
|
||||
map = new double[Constants.RegionSize, Constants.RegionSize];
|
||||
taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16];
|
||||
|
||||
int x, y;
|
||||
for (x = 0; x < Constants.RegionSize; x++)
|
||||
{
|
||||
for (y = 0; y < Constants.RegionSize; y++)
|
||||
{
|
||||
map[x, y] = 60.0 - // 60 = Sphere Radius
|
||||
((x - (Constants.RegionSize / 2)) * (x - (Constants.RegionSize / 2)) +
|
||||
(y - (Constants.RegionSize / 2)) * (y - (Constants.RegionSize / 2)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public TerrainChannel(double[,] import)
|
||||
{
|
||||
map = import;
|
||||
taint = new bool[import.GetLength(0), import.GetLength(1)];
|
||||
}
|
||||
|
||||
public TerrainChannel(bool createMap)
|
||||
{
|
||||
if (createMap)
|
||||
{
|
||||
map = new double[Constants.RegionSize, Constants.RegionSize];
|
||||
taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16];
|
||||
}
|
||||
}
|
||||
|
||||
public TerrainChannel(int w, int h)
|
||||
{
|
||||
map = new double[w, h];
|
||||
taint = new bool[w / 16, h / 16];
|
||||
}
|
||||
}
|
||||
|
||||
public enum StandardTerrainEffects : byte
|
||||
{
|
||||
Flatten = 0,
|
||||
Raise = 1,
|
||||
Lower = 2,
|
||||
Smooth = 3,
|
||||
Noise = 4,
|
||||
Revert = 5
|
||||
}
|
||||
|
||||
public class TerrainModule : IRegionModule
|
||||
{
|
||||
public enum StandardTerrainEffects : byte
|
||||
{
|
||||
Flatten = 0,
|
||||
Raise = 1,
|
||||
Lower = 2,
|
||||
Smooth = 3,
|
||||
Noise = 4,
|
||||
Revert = 5
|
||||
}
|
||||
|
||||
private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private Dictionary<StandardTerrainEffects, ITerrainPaintableEffect> m_painteffects =
|
||||
|
||||
Reference in New Issue
Block a user