diff options
Diffstat (limited to 'OpenSim/Framework/TerrainData.cs')
-rw-r--r-- | OpenSim/Framework/TerrainData.cs | 51 |
1 files changed, 46 insertions, 5 deletions
diff --git a/OpenSim/Framework/TerrainData.cs b/OpenSim/Framework/TerrainData.cs index 9325df2..25f9ca6 100644 --- a/OpenSim/Framework/TerrainData.cs +++ b/OpenSim/Framework/TerrainData.cs | |||
@@ -50,8 +50,9 @@ namespace OpenSim.Framework | |||
50 | // Someday terrain will have caves | 50 | // Someday terrain will have caves |
51 | public abstract float this[int x, int y, int z] { get; set; } | 51 | public abstract float this[int x, int y, int z] { get; set; } |
52 | 52 | ||
53 | public bool IsTainted { get; protected set; } | ||
54 | public abstract bool IsTaintedAt(int xx, int yy); | 53 | public abstract bool IsTaintedAt(int xx, int yy); |
54 | public abstract bool IsTaintedAt(int xx, int yy, bool clearOnTest); | ||
55 | public abstract void TaintAllTerrain(); | ||
55 | public abstract void ClearTaint(); | 56 | public abstract void ClearTaint(); |
56 | 57 | ||
57 | public abstract void ClearLand(); | 58 | public abstract void ClearLand(); |
@@ -75,6 +76,7 @@ namespace OpenSim.Framework | |||
75 | public abstract short[] GetCompressedMap(); | 76 | public abstract short[] GetCompressedMap(); |
76 | public abstract float CompressionFactor { get; } | 77 | public abstract float CompressionFactor { get; } |
77 | 78 | ||
79 | public abstract float[] GetFloatsSerialized(); | ||
78 | public abstract double[,] GetDoubles(); | 80 | public abstract double[,] GetDoubles(); |
79 | public abstract TerrainData Clone(); | 81 | public abstract TerrainData Clone(); |
80 | } | 82 | } |
@@ -138,10 +140,20 @@ namespace OpenSim.Framework | |||
138 | // TerrainData.ClearTaint | 140 | // TerrainData.ClearTaint |
139 | public override void ClearTaint() | 141 | public override void ClearTaint() |
140 | { | 142 | { |
141 | IsTainted = false; | 143 | SetAllTaint(false); |
144 | } | ||
145 | |||
146 | // TerrainData.TaintAllTerrain | ||
147 | public override void TaintAllTerrain() | ||
148 | { | ||
149 | SetAllTaint(true); | ||
150 | } | ||
151 | |||
152 | private void SetAllTaint(bool setting) | ||
153 | { | ||
142 | for (int ii = 0; ii < m_taint.GetLength(0); ii++) | 154 | for (int ii = 0; ii < m_taint.GetLength(0); ii++) |
143 | for (int jj = 0; jj < m_taint.GetLength(1); jj++) | 155 | for (int jj = 0; jj < m_taint.GetLength(1); jj++) |
144 | m_taint[ii, jj] = false; | 156 | m_taint[ii, jj] = setting; |
145 | } | 157 | } |
146 | 158 | ||
147 | // TerrainData.ClearLand | 159 | // TerrainData.ClearLand |
@@ -158,15 +170,25 @@ namespace OpenSim.Framework | |||
158 | m_heightmap[xx, yy] = flatHeight; | 170 | m_heightmap[xx, yy] = flatHeight; |
159 | } | 171 | } |
160 | 172 | ||
161 | public override bool IsTaintedAt(int xx, int yy) | 173 | // Return 'true' of the patch that contains these region coordinates has been modified. |
174 | // Note that checking the taint clears it. | ||
175 | // There is existing code that relies on this feature. | ||
176 | public override bool IsTaintedAt(int xx, int yy, bool clearOnTest) | ||
162 | { | 177 | { |
163 | int tx = xx / Constants.TerrainPatchSize; | 178 | int tx = xx / Constants.TerrainPatchSize; |
164 | int ty = yy / Constants.TerrainPatchSize; | 179 | int ty = yy / Constants.TerrainPatchSize; |
165 | bool ret = m_taint[tx, ty]; | 180 | bool ret = m_taint[tx, ty]; |
166 | m_taint[tx, ty] = false; | 181 | if (ret && clearOnTest) |
182 | m_taint[tx, ty] = false; | ||
167 | return ret; | 183 | return ret; |
168 | } | 184 | } |
169 | 185 | ||
186 | // Old form that clears the taint flag when we check it. | ||
187 | public override bool IsTaintedAt(int xx, int yy) | ||
188 | { | ||
189 | return IsTaintedAt(xx, yy, true /* clearOnTest */); | ||
190 | } | ||
191 | |||
170 | // TerrainData.GetDatabaseBlob | 192 | // TerrainData.GetDatabaseBlob |
171 | // The user wants something to store in the database. | 193 | // The user wants something to store in the database. |
172 | public override bool GetDatabaseBlob(out int DBRevisionCode, out Array blob) | 194 | public override bool GetDatabaseBlob(out int DBRevisionCode, out Array blob) |
@@ -212,6 +234,25 @@ namespace OpenSim.Framework | |||
212 | return ret; | 234 | return ret; |
213 | } | 235 | } |
214 | 236 | ||
237 | // TerrainData.GetFloatsSerialized | ||
238 | // This one dimensional version is ordered so height = map[y*sizeX+x]; | ||
239 | // DEPRECATED: don't use this function as it does not retain the dimensions of the terrain | ||
240 | // and the caller will probably do the wrong thing if the terrain is not the legacy 256x256. | ||
241 | public override float[] GetFloatsSerialized() | ||
242 | { | ||
243 | int points = SizeX * SizeY; | ||
244 | float[] heights = new float[points]; | ||
245 | |||
246 | int idx = 0; | ||
247 | for (int jj = 0; jj < SizeY; jj++) | ||
248 | for (int ii = 0; ii < SizeX; ii++) | ||
249 | { | ||
250 | heights[idx++] = FromCompressedHeight(m_heightmap[ii, jj]); | ||
251 | } | ||
252 | |||
253 | return heights; | ||
254 | } | ||
255 | |||
215 | // TerrainData.GetDoubles | 256 | // TerrainData.GetDoubles |
216 | public override double[,] GetDoubles() | 257 | public override double[,] GetDoubles() |
217 | { | 258 | { |