aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/Terrain/Effects
diff options
context:
space:
mode:
authorAdam Frisby2008-04-06 14:04:59 +0000
committerAdam Frisby2008-04-06 14:04:59 +0000
commit0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774 (patch)
tree133d385f049e0541c99485f30423966edaf1be92 /OpenSim/Region/Environment/Modules/Terrain/Effects
parent* Various terrain engine fixes (diff)
downloadopensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.zip
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.gz
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.bz2
opensim-SC-0a0a3992cc25f4cabbb7b1e4f20f3ef65c223774.tar.xz
* Whoops, forgot to include all the new terrain file loaders and things.
* Added MapImageModule for handling world-map * Added new DefaultTerrainGenerator.cs * Added BMP loader * Added GIF loader * Added PNG loader * Added TIFF loader
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Terrain/Effects')
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs125
-rw-r--r--OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs59
2 files changed, 184 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs
new file mode 100644
index 0000000..29a9003
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/CookieCutter.cs
@@ -0,0 +1,125 @@
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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.Region.Environment.Modules.Terrain;
31using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Framework;
33
34namespace OpenSim.Region.Environment.Modules.Terrain.Effects
35{
36 class CookieCutter : ITerrainEffect
37 {
38 #region ITerrainEffect Members
39
40 public void RunEffect(ITerrainChannel map)
41 {
42 FloodBrushes.SmoothArea smooth = new FloodBrushes.SmoothArea();
43 ITerrainPaintableEffect eroder = new PaintBrushes.WeatherSphere();
44
45 bool[,] cliffMask = new bool[map.Width, map.Height];
46 bool[,] channelMask = new bool[map.Width, map.Height];
47 bool[,] smoothMask = new bool[map.Width, map.Height];
48
49 Console.WriteLine("S1");
50
51 // Step one, generate rough mask
52 int x, y;
53 for (x = 0; x < map.Width; x++)
54 {
55 for (y = 0; y < map.Height; y++)
56 {
57 Console.Write(".");
58 smoothMask[x, y] = true;
59
60 // Start underwater
61 map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 5;
62 // Add a little height. (terrain should now be above water, mostly.)
63 map[x, y] += 20;
64
65 int channelsX = 4;
66 int channelWidth = (map.Width / channelsX / 4);
67 int channelsY = 4;
68 int channelHeight = (map.Height / channelsY / 4);
69
70 SetLowerChannel(map, cliffMask, channelMask, x, y, channelsX, channelWidth, map.Width, x);
71 SetLowerChannel(map, cliffMask, channelMask, x, y, channelsY, channelHeight, map.Height, y);
72 }
73 }
74
75 Console.WriteLine("S2");
76 //smooth.FloodEffect(map, smoothMask, 4.0);
77
78 Console.WriteLine("S3");
79 for (x = 0; x < map.Width; x++)
80 {
81 for (y = 0; y < map.Height; y++)
82 {
83 if (cliffMask[x, y] == true)
84 eroder.PaintEffect(map, x, y, 4, 0.1);
85 }
86 }
87
88 for (x = 0; x < map.Width; x += 2)
89 {
90 for (y = 0; y < map.Height; y += 2)
91 {
92 if (map[x, y] < 0.1)
93 map[x, y] = 0.1;
94 if (map[x, y] > 256)
95 map[x, y] = 256;
96 }
97 }
98 //smooth.FloodEffect(map, smoothMask, 4.0);
99 }
100
101 private static void SetLowerChannel(ITerrainChannel map, bool[,] cliffMask, bool[,] channelMask, int x, int y, int numChannels, int channelWidth, int mapSize, int rp)
102 {
103 for (int i = 0; i < numChannels; i++)
104 {
105 double distanceToLine = Math.Abs(rp - ((mapSize / numChannels) * i));
106
107 if (distanceToLine < channelWidth)
108 {
109 if (channelMask[x, y])
110 return;
111
112 // Remove channels
113 map[x, y] -= 10;
114 channelMask[x, y] = true;
115 }
116 if (distanceToLine < 1)
117 {
118 cliffMask[x, y] = true;
119 }
120 }
121 }
122
123 #endregion
124 }
125}
diff --git a/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs
new file mode 100644
index 0000000..429fa19
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Terrain/Effects/DefaultTerrainGenerator.cs
@@ -0,0 +1,59 @@
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 */
27using System;
28using System.Collections.Generic;
29using System.Text;
30using OpenSim.Region.Environment.Modules.Terrain;
31using OpenSim.Region.Environment.Interfaces;
32using OpenSim.Framework;
33
34namespace OpenSim.Region.Environment.Modules.Terrain.Effects
35{
36 class DefaultTerrainGenerator : ITerrainEffect
37 {
38 #region ITerrainEffect Members
39
40 public void RunEffect(ITerrainChannel map)
41 {
42 int x, y;
43 for (x = 0; x < map.Width; x++)
44 {
45 for (y = 0; y < map.Height; y++)
46 {
47 map[x, y] = TerrainUtil.PerlinNoise2D(x, y, 3, 0.25) * 10;
48 double spherFac = TerrainUtil.SphericalFactor(x, y, Constants.RegionSize / 2, Constants.RegionSize / 2, 50) * 0.01;
49 if (map[x, y] < spherFac)
50 {
51 map[x, y] = spherFac;
52 }
53 }
54 }
55 }
56
57 #endregion
58 }
59}