aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs119
1 files changed, 119 insertions, 0 deletions
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 @@
1
2using OpenSim.Framework;
3using OpenSim.Region.Environment.Interfaces;
4
5namespace OpenSim.Region.Environment.Modules.Terrain
6{
7
8 /// <summary>
9 /// A new version of the old Channel class, simplified
10 /// </summary>
11 public class TerrainChannel : ITerrainChannel
12 {
13 private double[,] map;
14 private bool[,] taint;
15
16 public int Width
17 {
18 get { return map.GetLength(0); }
19 }
20
21 public int Height
22 {
23 get { return map.GetLength(1); }
24 }
25
26 public TerrainChannel Copy()
27 {
28 TerrainChannel copy = new TerrainChannel(false);
29 copy.map = (double[,])this.map.Clone();
30
31 return copy;
32 }
33
34 public float[] GetFloatsSerialised()
35 {
36 float[] heights = new float[Width * Height];
37 int i;
38
39 for (i = 0; i < Width * Height; i++)
40 {
41 heights[i] = (float)map[i % Width, i / Width];
42 }
43
44 return heights;
45 }
46
47 public double[,] GetDoubles()
48 {
49 return map;
50 }
51
52 public double this[int x, int y]
53 {
54 get
55 {
56 return map[x, y];
57 }
58 set
59 {
60 if (map[x, y] != value)
61 {
62 taint[x / 16, y / 16] = true;
63 map[x, y] = value;
64 }
65 }
66 }
67
68 public bool Tainted(int x, int y)
69 {
70 if (taint[x / 16, y / 16] != false)
71 {
72 taint[x / 16, y / 16] = false;
73 return true;
74 }
75 else
76 {
77 return false;
78 }
79 }
80
81 public TerrainChannel()
82 {
83 map = new double[Constants.RegionSize, Constants.RegionSize];
84 taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16];
85
86 int x, y;
87 for (x = 0; x < Constants.RegionSize; x++)
88 {
89 for (y = 0; y < Constants.RegionSize; y++)
90 {
91 map[x, y] = 60.0 - // 60 = Sphere Radius
92 ((x - (Constants.RegionSize / 2)) * (x - (Constants.RegionSize / 2)) +
93 (y - (Constants.RegionSize / 2)) * (y - (Constants.RegionSize / 2)));
94 }
95 }
96 }
97
98 public TerrainChannel(double[,] import)
99 {
100 map = import;
101 taint = new bool[import.GetLength(0), import.GetLength(1)];
102 }
103
104 public TerrainChannel(bool createMap)
105 {
106 if (createMap)
107 {
108 map = new double[Constants.RegionSize, Constants.RegionSize];
109 taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16];
110 }
111 }
112
113 public TerrainChannel(int w, int h)
114 {
115 map = new double[w, h];
116 taint = new bool[w / 16, h / 16];
117 }
118 }
119}