From 53e8d91c06b3fc5cf61ba767930fa733a6efb232 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 14 Mar 2008 13:37:39 +0000 Subject: * 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. --- .../Environment/Modules/Terrain/TerrainChannel.cs | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs (limited to 'OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs') diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs new file mode 100644 index 0000000..59937d1 --- /dev/null +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs @@ -0,0 +1,119 @@ + +using OpenSim.Framework; +using OpenSim.Region.Environment.Interfaces; + +namespace OpenSim.Region.Environment.Modules.Terrain +{ + + /// + /// A new version of the old Channel class, simplified + /// + 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]; + } + } +} -- cgit v1.1