aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/Ui.kt
blob: dd8b0fc72f48ae4f77662e77f8cf78e9ce4c204b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import kotlinx.browser.document
import kotlinx.dom.removeClass
import org.w3c.dom.HTMLElement
import org.w3c.dom.HTMLInputElement
import org.w3c.dom.HTMLSelectElement

class Ui(private val context: RaycastContext, private val afterChange: () -> Unit) {

  private val textureSelect = registerTextureSetHandler()

  init {
    registerFovInputHandler()
    registerRaycastPrecisionInputHandler()
    registerMinimapToggleHandler()
    registerFisheyeToggleHandler()
  }

  private fun registerTextureSetHandler(): HTMLSelectElement {
    val select = document.getElementById("texture-set") as HTMLSelectElement
    select.onchange = {
      context.textureManager.loadTextures(select.value)
      afterChange()
    }
    return select
  }

  private fun registerFovInputHandler() {
    val fov = document.getElementById("fov") as HTMLInputElement
    val fovValue = document.getElementById("fov-value") as HTMLElement
    fov.oninput = {
      context.camera.fov = fov.value.toInt()
      fovValue.textContent = fov.value
      afterChange()
    }
  }

  private fun registerRaycastPrecisionInputHandler() {
    val precision = document.getElementById("raycast-precision") as HTMLInputElement
    val precisionValue = document.getElementById("raycast-precision-value") as HTMLElement
    precision.oninput = {
      context.raycastOptions.stepPrecision = precision.value.toInt()
      precisionValue.textContent = precision.value
      afterChange()
    }
  }

  private fun registerMinimapToggleHandler() {
    val toggle = document.getElementById("minimap-toggle") as HTMLInputElement
    val minimap = document.getElementById("minimap") as HTMLElement
    toggle.onchange = {
      minimap.hidden = !toggle.checked
      afterChange()
    }
  }

  private fun registerFisheyeToggleHandler() {
    val fixFisheye = document.getElementById("fisheye-fix") as HTMLInputElement
    fixFisheye.oninput = {
      context.raycastOptions.fixFisheye = fixFisheye.checked
      afterChange()
    }
  }

  fun getSelectedTextureSet(): String {
    return textureSelect.value
  }

  fun removeLoadingIndicator() {
    document.getElementById("output-wrapper")?.removeClass("loading")
  }
}