aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs
diff options
context:
space:
mode:
authorAdam Frisby2008-04-23 10:55:04 +0000
committerAdam Frisby2008-04-23 10:55:04 +0000
commit7c897043bab19bf748ac3078a05a74969c409fa7 (patch)
treef3f89972edbdebd9678025e754734f6aeb8b2952 /OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs
parent* Get rid of missing texture notification drop messages for now - obscuring t... (diff)
downloadopensim-SC_OLD-7c897043bab19bf748ac3078a05a74969c409fa7.zip
opensim-SC_OLD-7c897043bab19bf748ac3078a05a74969c409fa7.tar.gz
opensim-SC_OLD-7c897043bab19bf748ac3078a05a74969c409fa7.tar.bz2
opensim-SC_OLD-7c897043bab19bf748ac3078a05a74969c409fa7.tar.xz
* Removing old libTerrainBSD and associated Plugin & Project.
* Updated prebuild.xml accordingly.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs107
1 files changed, 0 insertions, 107 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs
deleted file mode 100644
index 532c2d6..0000000
--- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/ThermalWeathering.cs
+++ /dev/null
@@ -1,107 +0,0 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28namespace libTerrain
29{
30 partial class Channel
31 {
32 /// <summary>
33 /// A thermal weathering implementation based on Musgrave's original 1989 algorithm. This is Adam's custom implementation which may differ slightly from the original.
34 /// </summary>
35 /// <param name="talus">The rock angle (represented as a dy/dx ratio) at which point it will be succeptible to breakage</param>
36 /// <param name="rounds">The number of erosion rounds</param>
37 /// <param name="c">The amount of rock to carry each round</param>
38 public Channel ThermalWeathering(double talus, int rounds, double c)
39 {
40 SetDiff();
41
42 double[,] lastFrame;
43 double[,] thisFrame;
44
45 lastFrame = (double[,]) map.Clone();
46 thisFrame = (double[,]) map.Clone();
47
48 NeighbourSystem type = NeighbourSystem.Moore;
49 // Using moore neighbourhood (twice as computationally expensive)
50 int NEIGHBOUR_ME = 4; // I am always 4 in both systems.
51
52 int NEIGHBOUR_MAX = type == NeighbourSystem.Moore ? 9 : 5;
53
54 int frames = rounds; // Number of thermal erosion iterations to run
55 int i, j;
56 int x, y;
57
58 for (i = 0; i < frames; i++)
59 {
60 for (x = 0; x < w; x++)
61 {
62 for (y = 0; y < h; y++)
63 {
64 for (j = 0; j < NEIGHBOUR_MAX; j++)
65 {
66 if (j != NEIGHBOUR_ME)
67 {
68 int[] coords = Neighbours(type, j);
69
70 coords[0] += x;
71 coords[1] += y;
72
73 if (coords[0] > w - 1)
74 coords[0] = w - 1;
75 if (coords[1] > h - 1)
76 coords[1] = h - 1;
77 if (coords[0] < 0)
78 coords[0] = 0;
79 if (coords[1] < 0)
80 coords[1] = 0;
81
82 double heightF = thisFrame[x, y];
83 double target = thisFrame[coords[0], coords[1]];
84
85 if (target > heightF + talus)
86 {
87 double calc = c*((target - heightF) - talus);
88 heightF += calc;
89 target -= calc;
90 }
91
92 thisFrame[x, y] = heightF;
93 thisFrame[coords[0], coords[1]] = target;
94 }
95 }
96 }
97 }
98 lastFrame = (double[,]) thisFrame.Clone();
99 }
100
101 map = thisFrame;
102
103 Normalise(); // Just to guaruntee a smooth 0..1 value
104 return this;
105 }
106 }
107}