aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/Terrain.kt32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/main/kotlin/Terrain.kt b/src/main/kotlin/Terrain.kt
index 4f854ab..63351dc 100644
--- a/src/main/kotlin/Terrain.kt
+++ b/src/main/kotlin/Terrain.kt
@@ -17,6 +17,7 @@ import info.laht.threekt.renderers.WebGLRendererParams
import info.laht.threekt.scenes.Scene
import kotlin.browser.document
import kotlin.browser.window
+import kotlin.math.pow
class Terrain {
@@ -30,14 +31,19 @@ class Terrain {
private val size: Int = 256
- val zoomFactor = 80
- val scalingFactor = 11
- val autoRotate = false
+ enum class ScalingType {
+ LINEAR, EXPONENTIAL
+ }
+
+ var zoomFactor = 80
+ var scalingFactor = 11
+ var scalingType = ScalingType.LINEAR
+ var autoRotate = false
- val waterHeight = 5
- val snowHeightThreshold = 15
+ var waterHeight = 5
+ var snowHeightThreshold = 15
- val showWireframe = false
+ var showWireframe = false
init {
@@ -109,9 +115,15 @@ class Terrain {
var noise = simplexNoise.noise2D(x / zoomFactor.toDouble(), y / zoomFactor.toDouble())
noise += (0.01 * simplexNoise.noise2D(x.toDouble(), y.toDouble()))
-
noise += 1
- noise *= scalingFactor
+
+ // have to toString here for JS interop
+ if (scalingType.toString() == ScalingType.LINEAR.toString()) {
+ noise *= scalingFactor
+ } else {
+ noise = noise.pow(scalingFactor)
+ }
+
terrainGeom.vertices[x + (y * size)].setZ(noise)
}
}
@@ -206,7 +218,9 @@ class Terrain {
.step(1)
.onChange { generateTerrain() }
}
-
+ it.add(this, "scalingType", ScalingType.values()).onChange {
+ generateTerrain()
+ }
it.add(this, "reseedNoise")
it.add(this, "showWireframe").onChange { generateTerrain() }
it.add(this, "autoRotate")