diff options
| author | James Barnett <noreply@jamesbarnett.xyz> | 2019-08-09 20:56:49 +0100 |
|---|---|---|
| committer | James Barnett <noreply@jamesbarnett.xyz> | 2019-08-09 20:56:49 +0100 |
| commit | 2bbcde7dd370f0f6eb6d8733aab697917f5a8963 (patch) | |
| tree | 53478f00d7a0c95ff2c2b4a703456aba7422a087 /src/main/kotlin/Terrain.kt | |
| parent | 3b1d5f080b013ab306fb9d356d6e3337c75c40c6 (diff) | |
| download | terrain-2bbcde7dd370f0f6eb6d8733aab697917f5a8963.tar.xz terrain-2bbcde7dd370f0f6eb6d8733aab697917f5a8963.zip | |
Add loading overlay during terrain gen
Diffstat (limited to 'src/main/kotlin/Terrain.kt')
| -rw-r--r-- | src/main/kotlin/Terrain.kt | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/src/main/kotlin/Terrain.kt b/src/main/kotlin/Terrain.kt index f6db6db..054055e 100644 --- a/src/main/kotlin/Terrain.kt +++ b/src/main/kotlin/Terrain.kt @@ -18,6 +18,8 @@ import info.laht.threekt.scenes.Scene import org.w3c.fetch.Request import kotlin.browser.document import kotlin.browser.window +import kotlin.dom.addClass +import kotlin.dom.removeClass import kotlin.math.pow class Terrain { @@ -38,11 +40,11 @@ class Terrain { var options = GenerateOptions( 80, - 11.0, - ScalingType.LINEAR.name, + 2.9, + ScalingType.EXPONENTIAL.name, false, - 5, - 15, + 4, + 16, false) init { @@ -73,8 +75,6 @@ class Terrain { generateTerrain() - generateWater() - window.addEventListener("resize", { camera.aspect = window.innerWidth.toDouble() / window.innerHeight camera.updateProjectionMatrix() @@ -98,8 +98,19 @@ class Terrain { generateTerrain() } + private fun regenerateTerrain() { + document.getElementById("loading-overlay")?.removeClass("hidden") + // without the setTimeout the loading overlay is never rendered + window.setTimeout({ + generateTerrain() + document.getElementById("loading-overlay")?.addClass("hidden") + }, 10) + } + private fun generateTerrain() { + val genStart = window.performance.now() + if (this::terrainMesh.isInitialized) { scene.remove(terrainMesh) } @@ -148,6 +159,11 @@ class Terrain { terrainMesh = Mesh(terrainGeom, terrainMaterial) .apply { receiveShadows = true } .also(scene::add) + + generateWater() + + val genEnd = window.performance.now() + println("Terrain generation took ${genEnd - genStart} ms") } private fun applyHeightMapColour(planeGeometry: PlaneGeometry) { @@ -204,41 +220,40 @@ class Terrain { min(10) .max(200) .step(5) - .onFinishChange { generateTerrain() } + .onFinishChange { regenerateTerrain() } } (it.add(this.options, "scalingFactor") as NumberController).apply { min(0) .max(50) .step(0.1) - .onFinishChange { generateTerrain() } + .onFinishChange { regenerateTerrain() } } (it.add(this.options, "waterHeight") as NumberController).apply { min(0) .max(30) .step(1) - .onFinishChange { generateWater() } + .onChange { generateWater() } } (it.add(this.options, "snowHeightThreshold") as NumberController).apply { min(0) .max(30) .step(1) - .onFinishChange { generateTerrain() } + .onFinishChange { regenerateTerrain() } } - it.add(this.options, "scalingType", ScalingType.values()).onChange { - generateTerrain() + it.add(this.options, "scalingType", Terrain.ScalingType.values()).onChange { + regenerateTerrain() } it.add(this, "reseedNoise") - it.add(this.options, "showWireframe").onChange { generateTerrain() } + it.add(this.options, "showWireframe").onChange { regenerateTerrain() } it.add(this.options, "autoRotate") } } } - } fun animate() { |