diff options
Diffstat (limited to 'OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs')
-rw-r--r-- | OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs | 169 |
1 files changed, 91 insertions, 78 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs index c8c6e51..bbbb4d7 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/TerrainEngine.cs | |||
@@ -29,11 +29,11 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Drawing; | 30 | using System.Drawing; |
31 | using System.Drawing.Imaging; | 31 | using System.Drawing.Imaging; |
32 | using System.Globalization; | ||
32 | using System.IO; | 33 | using System.IO; |
34 | using System.Threading; | ||
33 | using libTerrain; | 35 | using libTerrain; |
34 | using OpenJPEGNet; | 36 | using OpenJPEGNet; |
35 | using OpenSim.Framework.Interfaces; | ||
36 | using System.Globalization; | ||
37 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
38 | 38 | ||
39 | namespace OpenSim.Region.Terrain | 39 | namespace OpenSim.Region.Terrain |
@@ -51,7 +51,7 @@ namespace OpenSim.Region.Terrain | |||
51 | 51 | ||
52 | public class TerrainEngine | 52 | public class TerrainEngine |
53 | { | 53 | { |
54 | public static System.Threading.Mutex fileIOLock = new System.Threading.Mutex(); | 54 | public static Mutex fileIOLock = new Mutex(); |
55 | 55 | ||
56 | /// <summary> | 56 | /// <summary> |
57 | /// Plugin library for scripts | 57 | /// Plugin library for scripts |
@@ -95,12 +95,13 @@ namespace OpenSim.Region.Terrain | |||
95 | /// </summary> | 95 | /// </summary> |
96 | public int tainted; | 96 | public int tainted; |
97 | 97 | ||
98 | int w, h; | 98 | private int w, h; |
99 | 99 | ||
100 | /// <summary> | 100 | /// <summary> |
101 | /// Used to determine what offset to use when loading singular heightmaps across multiple sims | 101 | /// Used to determine what offset to use when loading singular heightmaps across multiple sims |
102 | /// </summary> | 102 | /// </summary> |
103 | private int offsetX; | 103 | private int offsetX; |
104 | |||
104 | private int offsetY; | 105 | private int offsetY; |
105 | 106 | ||
106 | 107 | ||
@@ -139,13 +140,13 @@ namespace OpenSim.Region.Terrain | |||
139 | 140 | ||
140 | public bool Tainted(int x, int y) | 141 | public bool Tainted(int x, int y) |
141 | { | 142 | { |
142 | return (heightmap.diff[x / 16, y / 16] != 0); | 143 | return (heightmap.diff[x/16, y/16] != 0); |
143 | } | 144 | } |
144 | 145 | ||
145 | public void ResetTaint() | 146 | public void ResetTaint() |
146 | { | 147 | { |
147 | tainted = 0; | 148 | tainted = 0; |
148 | heightmap.diff = new int[w / 16, h / 16]; | 149 | heightmap.diff = new int[w/16,h/16]; |
149 | } | 150 | } |
150 | 151 | ||
151 | //Testing to see if moving the TerraForming packet handling code into here works well | 152 | //Testing to see if moving the TerraForming packet handling code into here works well |
@@ -158,40 +159,40 @@ namespace OpenSim.Region.Terrain | |||
158 | /// <param name="action">The action to be performed</param> | 159 | /// <param name="action">The action to be performed</param> |
159 | /// <param name="north">Distance from the north border where the cursor is located</param> | 160 | /// <param name="north">Distance from the north border where the cursor is located</param> |
160 | /// <param name="west">Distance from the west border where the cursor is located</param> | 161 | /// <param name="west">Distance from the west border where the cursor is located</param> |
161 | public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west, IClientAPI remoteUser) | 162 | public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west, |
163 | IClientAPI remoteUser) | ||
162 | { | 164 | { |
163 | |||
164 | // Shiny. | 165 | // Shiny. |
165 | double size = (double)(1 << brushsize); | 166 | double size = (double) (1 << brushsize); |
166 | 167 | ||
167 | switch (action) | 168 | switch (action) |
168 | { | 169 | { |
169 | case 0: | 170 | case 0: |
170 | // flatten terrain | 171 | // flatten terrain |
171 | this.FlattenTerrain(west, north, size, (double)seconds / 5.0); | 172 | FlattenTerrain(west, north, size, (double) seconds/5.0); |
172 | break; | 173 | break; |
173 | case 1: | 174 | case 1: |
174 | // raise terrain | 175 | // raise terrain |
175 | this.RaiseTerrain(west, north, size, (double)seconds / 5.0); | 176 | RaiseTerrain(west, north, size, (double) seconds/5.0); |
176 | break; | 177 | break; |
177 | case 2: | 178 | case 2: |
178 | //lower terrain | 179 | //lower terrain |
179 | this.LowerTerrain(west, north, size, (double)seconds / 5.0); | 180 | LowerTerrain(west, north, size, (double) seconds/5.0); |
180 | break; | 181 | break; |
181 | case 3: | 182 | case 3: |
182 | // smooth terrain | 183 | // smooth terrain |
183 | this.SmoothTerrain(west, north, size, (double)seconds / 5.0); | 184 | SmoothTerrain(west, north, size, (double) seconds/5.0); |
184 | break; | 185 | break; |
185 | case 4: | 186 | case 4: |
186 | // noise | 187 | // noise |
187 | this.NoiseTerrain(west, north, size, (double)seconds / 5.0); | 188 | NoiseTerrain(west, north, size, (double) seconds/5.0); |
188 | break; | 189 | break; |
189 | case 5: | 190 | case 5: |
190 | // revert | 191 | // revert |
191 | this.RevertTerrain(west, north, size, (double)seconds / 5.0); | 192 | RevertTerrain(west, north, size, (double) seconds/5.0); |
192 | break; | 193 | break; |
193 | 194 | ||
194 | // CLIENT EXTENSIONS GO HERE | 195 | // CLIENT EXTENSIONS GO HERE |
195 | case 128: | 196 | case 128: |
196 | // erode-thermal | 197 | // erode-thermal |
197 | break; | 198 | break; |
@@ -207,9 +208,9 @@ namespace OpenSim.Region.Terrain | |||
207 | { | 208 | { |
208 | for (int y = 0; y < 16; y++) | 209 | for (int y = 0; y < 16; y++) |
209 | { | 210 | { |
210 | if (this.Tainted(x * 16, y * 16)) | 211 | if (Tainted(x*16, y*16)) |
211 | { | 212 | { |
212 | remoteUser.SendLayerData(x, y, this.GetHeights1D()); | 213 | remoteUser.SendLayerData(x, y, GetHeights1D()); |
213 | } | 214 | } |
214 | } | 215 | } |
215 | } | 216 | } |
@@ -249,12 +250,12 @@ namespace OpenSim.Region.Terrain | |||
249 | /// <returns>A float[65536] array containing the heightmap</returns> | 250 | /// <returns>A float[65536] array containing the heightmap</returns> |
250 | public float[] GetHeights1D() | 251 | public float[] GetHeights1D() |
251 | { | 252 | { |
252 | float[] heights = new float[w * h]; | 253 | float[] heights = new float[w*h]; |
253 | int i; | 254 | int i; |
254 | 255 | ||
255 | for (i = 0; i < w * h; i++) | 256 | for (i = 0; i < w*h; i++) |
256 | { | 257 | { |
257 | heights[i] = (float)heightmap.map[i % w, i / w]; | 258 | heights[i] = (float) heightmap.map[i%w, i/w]; |
258 | } | 259 | } |
259 | 260 | ||
260 | return heights; | 261 | return heights; |
@@ -266,13 +267,13 @@ namespace OpenSim.Region.Terrain | |||
266 | /// <returns>An array of 256,256 values containing the heightmap</returns> | 267 | /// <returns>An array of 256,256 values containing the heightmap</returns> |
267 | public float[,] GetHeights2D() | 268 | public float[,] GetHeights2D() |
268 | { | 269 | { |
269 | float[,] heights = new float[w, h]; | 270 | float[,] heights = new float[w,h]; |
270 | int x, y; | 271 | int x, y; |
271 | for (x = 0; x < w; x++) | 272 | for (x = 0; x < w; x++) |
272 | { | 273 | { |
273 | for (y = 0; y < h; y++) | 274 | for (y = 0; y < h; y++) |
274 | { | 275 | { |
275 | heights[x, y] = (float)heightmap.map[x, y]; | 276 | heights[x, y] = (float) heightmap.map[x, y]; |
276 | } | 277 | } |
277 | } | 278 | } |
278 | return heights; | 279 | return heights; |
@@ -294,9 +295,9 @@ namespace OpenSim.Region.Terrain | |||
294 | public void GetHeights1D(float[] heights) | 295 | public void GetHeights1D(float[] heights) |
295 | { | 296 | { |
296 | int i; | 297 | int i; |
297 | for (i = 0; i < w * h; i++) | 298 | for (i = 0; i < w*h; i++) |
298 | { | 299 | { |
299 | heightmap.map[i % w, i / w] = heights[i]; | 300 | heightmap.map[i%w, i/w] = heights[i]; |
300 | } | 301 | } |
301 | 302 | ||
302 | tainted++; | 303 | tainted++; |
@@ -313,7 +314,7 @@ namespace OpenSim.Region.Terrain | |||
313 | { | 314 | { |
314 | for (y = 0; y < h; y++) | 315 | for (y = 0; y < h; y++) |
315 | { | 316 | { |
316 | heightmap.Set(x, y, (double)heights[x, y]); | 317 | heightmap.Set(x, y, (double) heights[x, y]); |
317 | } | 318 | } |
318 | } | 319 | } |
319 | SaveRevertMap(); | 320 | SaveRevertMap(); |
@@ -376,28 +377,36 @@ namespace OpenSim.Region.Terrain | |||
376 | 377 | ||
377 | try | 378 | try |
378 | { | 379 | { |
379 | |||
380 | switch (command) | 380 | switch (command) |
381 | { | 381 | { |
382 | case "help": | 382 | case "help": |
383 | resultText += "terrain regenerate - rebuilds the sims terrain using a default algorithm\n"; | 383 | resultText += "terrain regenerate - rebuilds the sims terrain using a default algorithm\n"; |
384 | resultText += "terrain hills <type> <number of hills> <min height> <max height> <island t/f> <additive t/f> <noisy t/f>\n"; | 384 | resultText += |
385 | "terrain hills <type> <number of hills> <min height> <max height> <island t/f> <additive t/f> <noisy t/f>\n"; | ||
385 | resultText += " type should be spheres, blocks, cones, or squared\n"; | 386 | resultText += " type should be spheres, blocks, cones, or squared\n"; |
386 | resultText += "terrain voronoi <points> <blocksize> - generates a worley fractal with X points per block"; | 387 | resultText += |
388 | "terrain voronoi <points> <blocksize> - generates a worley fractal with X points per block"; | ||
387 | resultText += "terrain seed <seed> - sets the random seed value to <seed>\n"; | 389 | resultText += "terrain seed <seed> - sets the random seed value to <seed>\n"; |
388 | resultText += "terrain load <type> <filename> - loads a terrain from disk, type can be 'F32', 'F64', 'RAW' or 'IMG'\n"; | 390 | resultText += |
389 | resultText += "terrain save <type> <filename> - saves a terrain to disk, type can be 'F32', 'F64', 'PNG', 'RAW' or 'HIRAW'\n"; | 391 | "terrain load <type> <filename> - loads a terrain from disk, type can be 'F32', 'F64', 'RAW' or 'IMG'\n"; |
390 | resultText += "terrain save grdmap <filename> <gradient map> - creates a PNG snapshot of the region using a named gradient map\n"; | 392 | resultText += |
391 | resultText += "terrain rescale <min> <max> - rescales a terrain to be between <min> and <max> meters high\n"; | 393 | "terrain save <type> <filename> - saves a terrain to disk, type can be 'F32', 'F64', 'PNG', 'RAW' or 'HIRAW'\n"; |
394 | resultText += | ||
395 | "terrain save grdmap <filename> <gradient map> - creates a PNG snapshot of the region using a named gradient map\n"; | ||
396 | resultText += | ||
397 | "terrain rescale <min> <max> - rescales a terrain to be between <min> and <max> meters high\n"; | ||
392 | resultText += "terrain fill <val> - fills a terrain at the specified height\n"; | 398 | resultText += "terrain fill <val> - fills a terrain at the specified height\n"; |
393 | resultText += "terrain erode aerobic <windspeed> <pickupmin> <dropmin> <carry> <rounds> <lowest t/f> <fluid dynamics t/f>\n"; | 399 | resultText += |
400 | "terrain erode aerobic <windspeed> <pickupmin> <dropmin> <carry> <rounds> <lowest t/f> <fluid dynamics t/f>\n"; | ||
394 | resultText += "terrain erode thermal <talus> <rounds> <carry>\n"; | 401 | resultText += "terrain erode thermal <talus> <rounds> <carry>\n"; |
395 | resultText += "terrain erode hydraulic <rain> <evaporation> <solubility> <frequency> <rounds>\n"; | 402 | resultText += "terrain erode hydraulic <rain> <evaporation> <solubility> <frequency> <rounds>\n"; |
396 | resultText += "terrain multiply <val> - multiplies a terrain by <val>\n"; | 403 | resultText += "terrain multiply <val> - multiplies a terrain by <val>\n"; |
397 | resultText += "terrain revert - reverts the terrain to the stored original\n"; | 404 | resultText += "terrain revert - reverts the terrain to the stored original\n"; |
398 | resultText += "terrain bake - saves the current terrain into the revert map\n"; | 405 | resultText += "terrain bake - saves the current terrain into the revert map\n"; |
399 | resultText += "terrain csfilter <filename.cs> - loads a new filter from the specified .cs file\n"; | 406 | resultText += |
400 | resultText += "terrain jsfilter <filename.js> - loads a new filter from the specified .js file\n"; | 407 | "terrain csfilter <filename.cs> - loads a new filter from the specified .cs file\n"; |
408 | resultText += | ||
409 | "terrain jsfilter <filename.js> - loads a new filter from the specified .js file\n"; | ||
401 | foreach (KeyValuePair<string, ITerrainFilter> filter in customFilters.filters) | 410 | foreach (KeyValuePair<string, ITerrainFilter> filter in customFilters.filters) |
402 | { | 411 | { |
403 | resultText += filter.Value.Help(); | 412 | resultText += filter.Value.Help(); |
@@ -466,8 +475,8 @@ namespace OpenSim.Region.Terrain | |||
466 | 475 | ||
467 | case "load": | 476 | case "load": |
468 | string filenameL = args[2].Replace("%name%", simName); | 477 | string filenameL = args[2].Replace("%name%", simName); |
469 | filenameL = filenameL.Replace("%x%", this.offsetX.ToString()); | 478 | filenameL = filenameL.Replace("%x%", offsetX.ToString()); |
470 | filenameL = filenameL.Replace("%y%", this.offsetY.ToString()); | 479 | filenameL = filenameL.Replace("%y%", offsetY.ToString()); |
471 | 480 | ||
472 | switch (args[1].ToLower()) | 481 | switch (args[1].ToLower()) |
473 | { | 482 | { |
@@ -499,11 +508,11 @@ namespace OpenSim.Region.Terrain | |||
499 | { | 508 | { |
500 | case "f32": | 509 | case "f32": |
501 | LoadFromFileF32(args[2], Convert.ToInt32(args[3]), Convert.ToInt32(args[4]), | 510 | LoadFromFileF32(args[2], Convert.ToInt32(args[3]), Convert.ToInt32(args[4]), |
502 | Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); | 511 | Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); |
503 | break; | 512 | break; |
504 | case "img": | 513 | case "img": |
505 | LoadFromFileIMG(args[2], Convert.ToInt32(args[3]), Convert.ToInt32(args[4]), | 514 | LoadFromFileIMG(args[2], Convert.ToInt32(args[3]), Convert.ToInt32(args[4]), |
506 | Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); | 515 | Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); |
507 | break; | 516 | break; |
508 | default: | 517 | default: |
509 | resultText = "Unknown or unsupported image or data format"; | 518 | resultText = "Unknown or unsupported image or data format"; |
@@ -513,8 +522,8 @@ namespace OpenSim.Region.Terrain | |||
513 | 522 | ||
514 | case "save": | 523 | case "save": |
515 | string filename = args[2].Replace("%name%", simName); | 524 | string filename = args[2].Replace("%name%", simName); |
516 | filename = filename.Replace("%x%", this.offsetX.ToString()); | 525 | filename = filename.Replace("%x%", offsetX.ToString()); |
517 | filename = filename.Replace("%y%", this.offsetY.ToString()); | 526 | filename = filename.Replace("%y%", offsetY.ToString()); |
518 | 527 | ||
519 | switch (args[1].ToLower()) | 528 | switch (args[1].ToLower()) |
520 | { | 529 | { |
@@ -589,15 +598,20 @@ namespace OpenSim.Region.Terrain | |||
589 | { | 598 | { |
590 | case "aerobic": | 599 | case "aerobic": |
591 | // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest | 600 | // WindSpeed, PickupMinimum,DropMinimum,Carry,Rounds,Lowest |
592 | heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), Convert.ToInt32(args[6]), Convert.ToBoolean(args[7]), Convert.ToBoolean(args[8])); | 601 | heightmap.AerobicErosion(Convert.ToDouble(args[2]), Convert.ToDouble(args[3]), |
602 | Convert.ToDouble(args[4]), Convert.ToDouble(args[5]), | ||
603 | Convert.ToInt32(args[6]), Convert.ToBoolean(args[7]), | ||
604 | Convert.ToBoolean(args[8])); | ||
593 | break; | 605 | break; |
594 | case "thermal": | 606 | case "thermal": |
595 | heightmap.ThermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), Convert.ToDouble(args[4])); | 607 | heightmap.ThermalWeathering(Convert.ToDouble(args[2]), Convert.ToInt32(args[3]), |
608 | Convert.ToDouble(args[4])); | ||
596 | break; | 609 | break; |
597 | case "hydraulic": | 610 | case "hydraulic": |
598 | Channel rainMap = new Channel(w, h); | 611 | Channel rainMap = new Channel(w, h); |
599 | rainMap.Fill(Convert.ToDouble(args[2])); | 612 | rainMap.Fill(Convert.ToDouble(args[2])); |
600 | heightmap.HydraulicErosion(rainMap, Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); | 613 | heightmap.HydraulicErosion(rainMap, Convert.ToDouble(args[3]), Convert.ToDouble(args[4]), |
614 | Convert.ToInt32(args[5]), Convert.ToInt32(args[6])); | ||
601 | break; | 615 | break; |
602 | default: | 616 | default: |
603 | resultText = "Unknown erosion type"; | 617 | resultText = "Unknown erosion type"; |
@@ -624,8 +638,10 @@ namespace OpenSim.Region.Terrain | |||
624 | if (args.GetLength(0) > 2) | 638 | if (args.GetLength(0) > 2) |
625 | { | 639 | { |
626 | int.TryParse(args[2].ToString(), out count); | 640 | int.TryParse(args[2].ToString(), out count); |
627 | double.TryParse(args[3].ToString(), NumberStyles.AllowDecimalPoint, Culture.NumberFormatInfo, out sizeMin); | 641 | double.TryParse(args[3].ToString(), NumberStyles.AllowDecimalPoint, Culture.NumberFormatInfo, |
628 | double.TryParse(args[4].ToString(), NumberStyles.AllowDecimalPoint, Culture.NumberFormatInfo, out sizeRange); | 642 | out sizeMin); |
643 | double.TryParse(args[4].ToString(), NumberStyles.AllowDecimalPoint, Culture.NumberFormatInfo, | ||
644 | out sizeRange); | ||
629 | bool.TryParse(args[5].ToString(), out island); | 645 | bool.TryParse(args[5].ToString(), out island); |
630 | bool.TryParse(args[6].ToString(), out additive); | 646 | bool.TryParse(args[6].ToString(), out additive); |
631 | bool.TryParse(args[7].ToString(), out noisy); | 647 | bool.TryParse(args[7].ToString(), out noisy); |
@@ -669,7 +685,7 @@ namespace OpenSim.Region.Terrain | |||
669 | /// <param name="max">Maximum value of the new array</param> | 685 | /// <param name="max">Maximum value of the new array</param> |
670 | public void SetRange(float min, float max) | 686 | public void SetRange(float min, float max) |
671 | { | 687 | { |
672 | heightmap.Normalise((double)min, (double)max); | 688 | heightmap.Normalise((double) min, (double) max); |
673 | tainted++; | 689 | tainted++; |
674 | } | 690 | } |
675 | 691 | ||
@@ -713,7 +729,7 @@ namespace OpenSim.Region.Terrain | |||
713 | { | 729 | { |
714 | for (x = 0; x < w; x++) | 730 | for (x = 0; x < w; x++) |
715 | { | 731 | { |
716 | heightmap.map[x, y] = (double)bs.ReadSingle(); | 732 | heightmap.map[x, y] = (double) bs.ReadSingle(); |
717 | } | 733 | } |
718 | } | 734 | } |
719 | 735 | ||
@@ -736,11 +752,10 @@ namespace OpenSim.Region.Terrain | |||
736 | fileIOLock.WaitOne(); | 752 | fileIOLock.WaitOne(); |
737 | try | 753 | try |
738 | { | 754 | { |
755 | int sectionToLoadX = ((offsetX - lowerboundX)*w); | ||
756 | int sectionToLoadY = ((offsetY - lowerboundY)*h); | ||
739 | 757 | ||
740 | int sectionToLoadX = ((this.offsetX - lowerboundX) * this.w); | 758 | double[,] tempMap = new double[dimensionX,dimensionY]; |
741 | int sectionToLoadY = ((this.offsetY - lowerboundY) * this.h); | ||
742 | |||
743 | double[,] tempMap = new double[dimensionX, dimensionY]; | ||
744 | 759 | ||
745 | FileInfo file = new FileInfo(filename); | 760 | FileInfo file = new FileInfo(filename); |
746 | FileStream s = file.Open(FileMode.Open, FileAccess.Read); | 761 | FileStream s = file.Open(FileMode.Open, FileAccess.Read); |
@@ -751,7 +766,7 @@ namespace OpenSim.Region.Terrain | |||
751 | { | 766 | { |
752 | for (y = 0; y < dimensionY; y++) | 767 | for (y = 0; y < dimensionY; y++) |
753 | { | 768 | { |
754 | tempMap[x, y] = (double)bs.ReadSingle(); | 769 | tempMap[x, y] = (double) bs.ReadSingle(); |
755 | } | 770 | } |
756 | } | 771 | } |
757 | 772 | ||
@@ -784,19 +799,19 @@ namespace OpenSim.Region.Terrain | |||
784 | /// <param name="lowerboundY">Where sim coords begin for this patch</param> | 799 | /// <param name="lowerboundY">Where sim coords begin for this patch</param> |
785 | public void LoadFromFileIMG(string filename, int dimensionX, int dimensionY, int lowerboundX, int lowerboundY) | 800 | public void LoadFromFileIMG(string filename, int dimensionX, int dimensionY, int lowerboundX, int lowerboundY) |
786 | { | 801 | { |
787 | int sectionToLoadX = ((this.offsetX - lowerboundX) * this.w); | 802 | int sectionToLoadX = ((offsetX - lowerboundX)*w); |
788 | int sectionToLoadY = ((this.offsetY - lowerboundY) * this.h); | 803 | int sectionToLoadY = ((offsetY - lowerboundY)*h); |
789 | 804 | ||
790 | double[,] tempMap = new double[dimensionX, dimensionY]; | 805 | double[,] tempMap = new double[dimensionX,dimensionY]; |
791 | 806 | ||
792 | System.Drawing.Bitmap lgrBmp = new Bitmap(filename); | 807 | Bitmap lgrBmp = new Bitmap(filename); |
793 | 808 | ||
794 | int x, y; | 809 | int x, y; |
795 | for (x = 0; x < dimensionX; x++) | 810 | for (x = 0; x < dimensionX; x++) |
796 | { | 811 | { |
797 | for (y = 0; y < dimensionY; y++) | 812 | for (y = 0; y < dimensionY; y++) |
798 | { | 813 | { |
799 | tempMap[x, y] = (float)lgrBmp.GetPixel(x, y).GetBrightness(); | 814 | tempMap[x, y] = (float) lgrBmp.GetPixel(x, y).GetBrightness(); |
800 | } | 815 | } |
801 | } | 816 | } |
802 | 817 | ||
@@ -826,7 +841,7 @@ namespace OpenSim.Region.Terrain | |||
826 | { | 841 | { |
827 | for (x = 0; x < w; x++) | 842 | for (x = 0; x < w; x++) |
828 | { | 843 | { |
829 | heightmap.map[x, y] = (double)bs.ReadByte() * ((double)bs.ReadByte() / 127.0); | 844 | heightmap.map[x, y] = (double) bs.ReadByte()*((double) bs.ReadByte()/127.0); |
830 | bs.ReadBytes(11); // Advance the stream to next bytes. | 845 | bs.ReadBytes(11); // Advance the stream to next bytes. |
831 | } | 846 | } |
832 | } | 847 | } |
@@ -875,7 +890,7 @@ namespace OpenSim.Region.Terrain | |||
875 | { | 890 | { |
876 | for (x = 0; x < w; x++) | 891 | for (x = 0; x < w; x++) |
877 | { | 892 | { |
878 | bs.Write((float)heightmap.Get(x, y)); | 893 | bs.Write((float) heightmap.Get(x, y)); |
879 | } | 894 | } |
880 | } | 895 | } |
881 | 896 | ||
@@ -897,27 +912,27 @@ namespace OpenSim.Region.Terrain | |||
897 | int x, y; | 912 | int x, y; |
898 | 913 | ||
899 | // Used for the 'green' channel. | 914 | // Used for the 'green' channel. |
900 | byte avgMultiplier = (byte)heightmap.Avg(); | 915 | byte avgMultiplier = (byte) heightmap.Avg(); |
901 | byte backupMultiplier = (byte)revertmap.Avg(); | 916 | byte backupMultiplier = (byte) revertmap.Avg(); |
902 | 917 | ||
903 | // Limit the multiplier so it can represent points >64m. | 918 | // Limit the multiplier so it can represent points >64m. |
904 | if (avgMultiplier > 196) | 919 | if (avgMultiplier > 196) |
905 | avgMultiplier = 196; | 920 | avgMultiplier = 196; |
906 | if(backupMultiplier > 196) | 921 | if (backupMultiplier > 196) |
907 | backupMultiplier = 196; | 922 | backupMultiplier = 196; |
908 | // Make sure it's at least one to prevent a div by zero | 923 | // Make sure it's at least one to prevent a div by zero |
909 | if (avgMultiplier < 1) | 924 | if (avgMultiplier < 1) |
910 | avgMultiplier = 1; | 925 | avgMultiplier = 1; |
911 | if(backupMultiplier < 1) | 926 | if (backupMultiplier < 1) |
912 | backupMultiplier = 1; | 927 | backupMultiplier = 1; |
913 | 928 | ||
914 | for (y = 0; y < h; y++) | 929 | for (y = 0; y < h; y++) |
915 | { | 930 | { |
916 | for (x = 0; x < h; x++) | 931 | for (x = 0; x < h; x++) |
917 | { | 932 | { |
918 | byte red = (byte)(heightmap.Get(x, y) / ((double)avgMultiplier / 128.0)); | 933 | byte red = (byte) (heightmap.Get(x, y)/((double) avgMultiplier/128.0)); |
919 | byte green = avgMultiplier; | 934 | byte green = avgMultiplier; |
920 | byte blue = (byte)watermap.Get(x, y); | 935 | byte blue = (byte) watermap.Get(x, y); |
921 | byte alpha1 = 0; // Land Parcels | 936 | byte alpha1 = 0; // Land Parcels |
922 | byte alpha2 = 0; // For Sale Land | 937 | byte alpha2 = 0; // For Sale Land |
923 | byte alpha3 = 0; // Public Edit Object | 938 | byte alpha3 = 0; // Public Edit Object |
@@ -926,7 +941,7 @@ namespace OpenSim.Region.Terrain | |||
926 | byte alpha6 = 255; // Flying Allowed | 941 | byte alpha6 = 255; // Flying Allowed |
927 | byte alpha7 = 255; // Create Landmark | 942 | byte alpha7 = 255; // Create Landmark |
928 | byte alpha8 = 255; // Outside Scripts | 943 | byte alpha8 = 255; // Outside Scripts |
929 | byte alpha9 = (byte)(revertmap.Get(x, y) / ((double)backupMultiplier / 128.0)); | 944 | byte alpha9 = (byte) (revertmap.Get(x, y)/((double) backupMultiplier/128.0)); |
930 | byte alpha10 = backupMultiplier; | 945 | byte alpha10 = backupMultiplier; |
931 | 946 | ||
932 | binStream.Write(red); | 947 | binStream.Write(red); |
@@ -966,7 +981,7 @@ namespace OpenSim.Region.Terrain | |||
966 | { | 981 | { |
967 | for (j = 0; j < 256; j++) | 982 | for (j = 0; j < 256; j++) |
968 | { | 983 | { |
969 | lookupHeightTable[i + (j * 256)] = ((double)i * ((double)j / 127.0)); | 984 | lookupHeightTable[i + (j*256)] = ((double) i*((double) j/127.0)); |
970 | } | 985 | } |
971 | } | 986 | } |
972 | 987 | ||
@@ -988,9 +1003,9 @@ namespace OpenSim.Region.Terrain | |||
988 | } | 1003 | } |
989 | } | 1004 | } |
990 | 1005 | ||
991 | byte red = (byte)(index & 0xFF); | 1006 | byte red = (byte) (index & 0xFF); |
992 | byte green = (byte)((index >> 8) & 0xFF); | 1007 | byte green = (byte) ((index >> 8) & 0xFF); |
993 | byte blue = (byte)watermap.Get(x, y); | 1008 | byte blue = (byte) watermap.Get(x, y); |
994 | byte alpha1 = 0; // Land Parcels | 1009 | byte alpha1 = 0; // Land Parcels |
995 | byte alpha2 = 0; // For Sale Land | 1010 | byte alpha2 = 0; // For Sale Land |
996 | byte alpha3 = 0; // Public Edit Object | 1011 | byte alpha3 = 0; // Public Edit Object |
@@ -1140,7 +1155,7 @@ namespace OpenSim.Region.Terrain | |||
1140 | smoothed.Smooth(amount); | 1155 | smoothed.Smooth(amount); |
1141 | 1156 | ||
1142 | Channel mask = new Channel(); | 1157 | Channel mask = new Channel(); |
1143 | mask.Raise(rx,ry,size,amount); | 1158 | mask.Raise(rx, ry, size, amount); |
1144 | 1159 | ||
1145 | heightmap.Blend(smoothed, mask); | 1160 | heightmap.Blend(smoothed, mask); |
1146 | } | 1161 | } |
@@ -1221,8 +1236,7 @@ namespace OpenSim.Region.Terrain | |||
1221 | { | 1236 | { |
1222 | Bitmap bmp = TerrainToBitmap(gradientmap); | 1237 | Bitmap bmp = TerrainToBitmap(gradientmap); |
1223 | 1238 | ||
1224 | imageData = OpenJPEG.EncodeFromImage(bmp, true ); | 1239 | imageData = OpenJPEG.EncodeFromImage(bmp, true); |
1225 | |||
1226 | } | 1240 | } |
1227 | catch (Exception e) | 1241 | catch (Exception e) |
1228 | { | 1242 | { |
@@ -1252,12 +1266,11 @@ namespace OpenSim.Region.Terrain | |||
1252 | for (int x = 0; x < copy.w; x++) | 1266 | for (int x = 0; x < copy.w; x++) |
1253 | { | 1267 | { |
1254 | // 512 is the largest possible height before colours clamp | 1268 | // 512 is the largest possible height before colours clamp |
1255 | int colorindex = (int)(Math.Max(Math.Min(1.0, copy.Get(x, y) / 512.0), 0.0) * (pallete - 1)); | 1269 | int colorindex = (int) (Math.Max(Math.Min(1.0, copy.Get(x, y)/512.0), 0.0)*(pallete - 1)); |
1256 | bmp.SetPixel(x, y, colours[colorindex]); | 1270 | bmp.SetPixel(x, y, colours[colorindex]); |
1257 | } | 1271 | } |
1258 | } | 1272 | } |
1259 | return bmp; | 1273 | return bmp; |
1260 | } | 1274 | } |
1261 | |||
1262 | } | 1275 | } |
1263 | } | 1276 | } \ No newline at end of file |