diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs | 110 |
1 files changed, 56 insertions, 54 deletions
diff --git a/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs index 01f6bdf..1344715 100644 --- a/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs +++ b/OpenSim/Region/Environment/Modules/Terrain/TerrainChannel.cs | |||
@@ -35,34 +35,70 @@ namespace OpenSim.Region.Environment.Modules.Terrain | |||
35 | /// </summary> | 35 | /// </summary> |
36 | public class TerrainChannel : ITerrainChannel | 36 | public class TerrainChannel : ITerrainChannel |
37 | { | 37 | { |
38 | private readonly bool[,] taint; | ||
38 | private double[,] map; | 39 | private double[,] map; |
39 | private bool[,] taint; | ||
40 | 40 | ||
41 | public int Width | 41 | public TerrainChannel() |
42 | { | 42 | { |
43 | get { return map.GetLength(0); } | 43 | map = new double[Constants.RegionSize,Constants.RegionSize]; |
44 | taint = new bool[Constants.RegionSize / 16,Constants.RegionSize / 16]; | ||
45 | |||
46 | int x; | ||
47 | for (x = 0; x < Constants.RegionSize; x++) | ||
48 | { | ||
49 | int y; | ||
50 | for (y = 0; y < Constants.RegionSize; y++) | ||
51 | { | ||
52 | map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10; | ||
53 | double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01; | ||
54 | if (map[x, y] < spherFac) | ||
55 | { | ||
56 | map[x, y] = spherFac; | ||
57 | } | ||
58 | } | ||
59 | } | ||
44 | } | 60 | } |
45 | 61 | ||
46 | public int Height | 62 | public TerrainChannel(double[,] import) |
47 | { | 63 | { |
48 | get { return map.GetLength(1); } | 64 | map = import; |
65 | taint = new bool[import.GetLength(0),import.GetLength(1)]; | ||
49 | } | 66 | } |
50 | 67 | ||
51 | public TerrainChannel Copy() | 68 | public TerrainChannel(bool createMap) |
52 | { | 69 | { |
53 | TerrainChannel copy = new TerrainChannel(false); | 70 | if (createMap) |
54 | copy.map = (double[,])this.map.Clone(); | 71 | { |
72 | map = new double[Constants.RegionSize,Constants.RegionSize]; | ||
73 | taint = new bool[Constants.RegionSize / 16,Constants.RegionSize / 16]; | ||
74 | } | ||
75 | } | ||
55 | 76 | ||
56 | return copy; | 77 | public TerrainChannel(int w, int h) |
78 | { | ||
79 | map = new double[w,h]; | ||
80 | taint = new bool[w / 16,h / 16]; | ||
81 | } | ||
82 | |||
83 | #region ITerrainChannel Members | ||
84 | |||
85 | public int Width | ||
86 | { | ||
87 | get { return map.GetLength(0); } | ||
88 | } | ||
89 | |||
90 | public int Height | ||
91 | { | ||
92 | get { return map.GetLength(1); } | ||
57 | } | 93 | } |
58 | 94 | ||
59 | public ITerrainChannel MakeCopy() | 95 | public ITerrainChannel MakeCopy() |
60 | { | 96 | { |
61 | TerrainChannel copy = new TerrainChannel(false); | 97 | TerrainChannel copy = new TerrainChannel(false); |
62 | copy.map = (double[,])this.map.Clone(); | 98 | copy.map = (double[,]) map.Clone(); |
63 | 99 | ||
64 | return copy; | 100 | return copy; |
65 | } | 101 | } |
66 | 102 | ||
67 | public float[] GetFloatsSerialised() | 103 | public float[] GetFloatsSerialised() |
68 | { | 104 | { |
@@ -71,7 +107,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain | |||
71 | 107 | ||
72 | for (i = 0; i < Width * Height; i++) | 108 | for (i = 0; i < Width * Height; i++) |
73 | { | 109 | { |
74 | heights[i] = (float)map[i % Width, i / Width]; | 110 | heights[i] = (float) map[i % Width, i / Width]; |
75 | } | 111 | } |
76 | 112 | ||
77 | return heights; | 113 | return heights; |
@@ -84,10 +120,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain | |||
84 | 120 | ||
85 | public double this[int x, int y] | 121 | public double this[int x, int y] |
86 | { | 122 | { |
87 | get | 123 | get { return map[x, y]; } |
88 | { | ||
89 | return map[x, y]; | ||
90 | } | ||
91 | set | 124 | set |
92 | { | 125 | { |
93 | if (map[x, y] != value) | 126 | if (map[x, y] != value) |
@@ -100,7 +133,7 @@ namespace OpenSim.Region.Environment.Modules.Terrain | |||
100 | 133 | ||
101 | public bool Tainted(int x, int y) | 134 | public bool Tainted(int x, int y) |
102 | { | 135 | { |
103 | if (taint[x / 16, y / 16] != false) | 136 | if (taint[x / 16, y / 16]) |
104 | { | 137 | { |
105 | taint[x / 16, y / 16] = false; | 138 | taint[x / 16, y / 16] = false; |
106 | return true; | 139 | return true; |
@@ -111,45 +144,14 @@ namespace OpenSim.Region.Environment.Modules.Terrain | |||
111 | } | 144 | } |
112 | } | 145 | } |
113 | 146 | ||
114 | public TerrainChannel() | 147 | #endregion |
115 | { | ||
116 | map = new double[Constants.RegionSize, Constants.RegionSize]; | ||
117 | taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16]; | ||
118 | 148 | ||
119 | int x, y; | 149 | public TerrainChannel Copy() |
120 | for (x = 0; x < Constants.RegionSize; x++) | ||
121 | { | ||
122 | for (y = 0; y < Constants.RegionSize; y++) | ||
123 | { | ||
124 | map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10; | ||
125 | double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01; | ||
126 | if (map[x, y] < spherFac) | ||
127 | { | ||
128 | map[x, y] = spherFac; | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | } | ||
133 | |||
134 | public TerrainChannel(double[,] import) | ||
135 | { | ||
136 | map = import; | ||
137 | taint = new bool[import.GetLength(0), import.GetLength(1)]; | ||
138 | } | ||
139 | |||
140 | public TerrainChannel(bool createMap) | ||
141 | { | 150 | { |
142 | if (createMap) | 151 | TerrainChannel copy = new TerrainChannel(false); |
143 | { | 152 | copy.map = (double[,]) map.Clone(); |
144 | map = new double[Constants.RegionSize, Constants.RegionSize]; | ||
145 | taint = new bool[Constants.RegionSize / 16, Constants.RegionSize / 16]; | ||
146 | } | ||
147 | } | ||
148 | 153 | ||
149 | public TerrainChannel(int w, int h) | 154 | return copy; |
150 | { | ||
151 | map = new double[w, h]; | ||
152 | taint = new bool[w / 16, h / 16]; | ||
153 | } | 155 | } |
154 | } | 156 | } |
155 | } | 157 | } \ No newline at end of file |