From f84937367f7180140bd17444d507977f9b7e3d2e Mon Sep 17 00:00:00 2001
From: Adam Frisby
Date: Sat, 21 Jul 2007 22:25:42 +0000
Subject: * Deleted libTerrain-BSD.dll * Added libTerrain to BasicTerrain
directly as a subfolder
---
.../Channel/Generators/HillPlanter.cs | 278 +++++++++++++++++++++
1 file changed, 278 insertions(+)
create mode 100644 OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/HillPlanter.cs
(limited to 'OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/HillPlanter.cs')
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/HillPlanter.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/HillPlanter.cs
new file mode 100644
index 0000000..9316911
--- /dev/null
+++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/HillPlanter.cs
@@ -0,0 +1,278 @@
+/*
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * Neither the name of libTerrain nor the names of
+ its contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace libTerrain
+{
+ partial class Channel
+ {
+ ///
+ /// Generates a series of spheres which are then either max()'d or added together. Inspired by suggestion from jh.
+ ///
+ /// 3-Clause BSD Licensed
+ /// The number of hills to generate
+ /// The minimum size of each hill
+ /// The maximum size of each hill
+ /// Whether to bias hills towards the center of the map
+ /// Whether to add hills together or to pick the largest value
+ /// Generates hill-shaped noise instead of consistent hills
+ public void hillsSpheres(int number, double scale_min, double scale_range, bool island, bool additive, bool noisy)
+ {
+ Random random = new Random(seed);
+
+ int x, y;
+ int i;
+
+ for (i = 0; i < number; i++)
+ {
+ double rx = Math.Min(255.0, random.NextDouble() * w);
+ double ry = Math.Min(255.0, random.NextDouble() * h);
+ double rand = random.NextDouble();
+
+ if (island)
+ {
+ // Move everything towards the center
+ rx -= w / 2;
+ rx /= 2;
+ rx += w / 2;
+
+ ry -= h / 2;
+ ry /= 2;
+ ry += h / 2;
+ }
+
+ for (x = 0; x < w; x++)
+ {
+ for (y = 0; y < h; y++)
+ {
+ if (noisy)
+ rand = random.NextDouble();
+
+ double z = (scale_min + (scale_range * rand));
+ z *= z;
+ z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry));
+
+ if (z < 0)
+ z = 0;
+
+ if (additive)
+ {
+ map[x, y] += z;
+ }
+ else
+ {
+ map[x, y] = Math.Max(map[x, y], z);
+ }
+ }
+ }
+ }
+
+ normalise();
+ }
+
+ ///
+ /// Generates a series of cones which are then either max()'d or added together. Inspired by suggestion from jh.
+ ///
+ /// 3-Clause BSD Licensed
+ /// The number of hills to generate
+ /// The minimum size of each hill
+ /// The maximum size of each hill
+ /// Whether to bias hills towards the center of the map
+ /// Whether to add hills together or to pick the largest value
+ /// Generates hill-shaped noise instead of consistent hills
+ public void hillsCones(int number, double scale_min, double scale_range, bool island, bool additive, bool noisy)
+ {
+ Random random = new Random(seed);
+
+ int x, y;
+ int i;
+
+ for (i = 0; i < number; i++)
+ {
+ double rx = Math.Min(255.0, random.NextDouble() * w);
+ double ry = Math.Min(255.0, random.NextDouble() * h);
+ double rand = random.NextDouble();
+
+ if (island)
+ {
+ // Move everything towards the center
+ rx -= w / 2;
+ rx /= 2;
+ rx += w / 2;
+
+ ry -= h / 2;
+ ry /= 2;
+ ry += h / 2;
+ }
+
+ for (x = 0; x < w; x++)
+ {
+ for (y = 0; y < h; y++)
+ {
+ if (noisy)
+ rand = random.NextDouble();
+
+ double z = (scale_min + (scale_range * rand));
+ z -= Math.Sqrt(((x - rx) * (x - rx)) + ((y - ry) * (y - ry)));
+
+ if (z < 0)
+ z = 0;
+
+ if (additive)
+ {
+ map[x, y] += z;
+ }
+ else
+ {
+ map[x, y] = Math.Max(map[x, y], z);
+ }
+ }
+ }
+ }
+
+ normalise();
+ }
+
+ public void hillsBlocks(int number, double scale_min, double scale_range, bool island, bool additive, bool noisy)
+ {
+ Random random = new Random(seed);
+
+ int x, y;
+ int i;
+
+ for (i = 0; i < number; i++)
+ {
+ double rx = Math.Min(255.0, random.NextDouble() * w);
+ double ry = Math.Min(255.0, random.NextDouble() * h);
+ double rand = random.NextDouble();
+
+ if (island)
+ {
+ // Move everything towards the center
+ rx -= w / 2;
+ rx /= 2;
+ rx += w / 2;
+
+ ry -= h / 2;
+ ry /= 2;
+ ry += h / 2;
+ }
+
+ for (x = 0; x < w; x++)
+ {
+ for (y = 0; y < h; y++)
+ {
+ if (noisy)
+ rand = random.NextDouble();
+
+ double z = (scale_min + (scale_range * rand));
+ z -= Math.Abs(x-rx) + Math.Abs(y-ry);
+ //z -= Math.Sqrt(((x - rx) * (x - rx)) + ((y - ry) * (y - ry)));
+
+ if (z < 0)
+ z = 0;
+
+ if (additive)
+ {
+ map[x, y] += z;
+ }
+ else
+ {
+ map[x, y] = Math.Max(map[x, y], z);
+ }
+ }
+ }
+ }
+
+ normalise();
+ }
+
+ public void hillsSquared(int number, double scale_min, double scale_range, bool island, bool additive, bool noisy)
+ {
+ Random random = new Random(seed);
+
+ int x, y;
+ int i;
+
+ for (i = 0; i < number; i++)
+ {
+ double rx = Math.Min(255.0, random.NextDouble() * w);
+ double ry = Math.Min(255.0, random.NextDouble() * h);
+ double rand = random.NextDouble();
+
+ if (island)
+ {
+ // Move everything towards the center
+ rx -= w / 2;
+ rx /= 2;
+ rx += w / 2;
+
+ ry -= h / 2;
+ ry /= 2;
+ ry += h / 2;
+ }
+
+ for (x = 0; x < w; x++)
+ {
+ for (y = 0; y < h; y++)
+ {
+ if (noisy)
+ rand = random.NextDouble();
+
+ double z = (scale_min + (scale_range * rand));
+ z *= z * z * z;
+ double dx = Math.Abs(x - rx);
+ double dy = Math.Abs(y - ry);
+ z -= (dx * dx * dx * dx) + (dy * dy * dy * dy);
+
+ if (z < 0)
+ z = 0;
+
+ if (additive)
+ {
+ map[x, y] += z;
+ }
+ else
+ {
+ map[x, y] = Math.Max(map[x, y], z);
+ }
+ }
+ }
+ }
+
+ normalise();
+ }
+
+ }
+}
--
cgit v1.1