Skip to content

Commit 9de46b6

Browse files
committed
2d physics on WASM platform
1 parent d3a9d73 commit 9de46b6

File tree

18 files changed

+457
-470
lines changed

18 files changed

+457
-470
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import de.fabmax.kool.KoolApplication
22
import de.fabmax.kool.KoolConfigWasm
33
import de.fabmax.kool.demo.demo
4+
import de.fabmax.kool.physics2d.Physics2d
45

56
fun main() = KoolApplication(
67
KoolConfigWasm(
78
isGlobalKeyEventGrabbing = true,
89
deviceScaleLimit = 1.5,
910
)
1011
) {
12+
Physics2d.loadPhysics2d()
1113
demo(null, ctx)
1214
}

kool-physics-2d/src/jsMain/kotlin/box2d/Box2dWasmLoader.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,27 @@
44

55
package box2d
66

7-
import kotlinx.coroutines.asDeferred
7+
import kotlinx.coroutines.await
88
import kotlin.js.Promise
99

1010
@JsModule("kool-box2d-wasm")
1111
private external val Box2D: () -> Promise<dynamic>
1212

13-
object Box2dWasmLoader {
14-
@JsName("box2dWasm")
15-
internal var box2dWasm: dynamic = null
13+
internal actual object Box2dWasmLoader {
14+
private lateinit var box2dWasmModule: JsAny
15+
internal actual val box2dWasm: JsAny get() = box2dWasmModule
1616
private val box2dWasmPromise = Box2D()
17-
internal var box2dWasmDeferred = box2dWasmPromise.asDeferred()
17+
private var isLoaded: Boolean = false
1818

19-
val isLoaded: Boolean get() = box2dWasmDeferred.isCompleted
20-
21-
suspend fun loadModule() {
19+
actual suspend fun loadModule() {
2220
if (!isLoaded) {
23-
box2dWasmPromise.then { module: dynamic -> box2dWasm = module }
21+
box2dWasmPromise.then<JsAny> { module ->
22+
box2dWasmModule = module
23+
module
24+
}
2425
}
25-
box2dWasmDeferred.await()
26+
box2dWasmPromise.await<JsAny>()
27+
isLoaded = true
2628
}
2729

2830
fun checkIsLoaded() {
@@ -31,7 +33,9 @@ object Box2dWasmLoader {
3133
}
3234
}
3335

34-
fun destroy(nativeObject: Any) {
35-
box2dWasm.destroy(nativeObject)
36+
actual fun destroy(nativeObject: JsAny) {
37+
destroyJsNativeAny(box2dWasm, nativeObject)
3638
}
37-
}
39+
}
40+
41+
private fun destroyJsNativeAny(module: JsAny, obj: JsAny): Unit = js("module.destroy(obj)")

kool-physics-2d/src/jsMain/kotlin/box2d/prototypes/Prototypes.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package box2d
2+
3+
import kotlinx.coroutines.await
4+
import kotlin.js.Promise
5+
6+
@JsModule("kool-box2d-wasm")
7+
private external val Box2D: () -> Promise<JsAny>
8+
9+
internal actual object Box2dWasmLoader {
10+
private var box2dWasmModule: JsAny? = null
11+
internal actual val box2dWasm: JsAny get() = requireNotNull(box2dWasmModule) { "Module 'kool-box2d-wasm' is not loaded" }
12+
private val box2dWasmPromise = Box2D()
13+
private var isLoaded: Boolean = false
14+
15+
actual suspend fun loadModule() {
16+
if (!isLoaded) {
17+
box2dWasmPromise.then<JsAny> { module ->
18+
box2dWasmModule = module
19+
module
20+
}
21+
}
22+
box2dWasmPromise.await<JsAny>()
23+
isLoaded = true
24+
}
25+
26+
fun checkIsLoaded() {
27+
if (!isLoaded) {
28+
throw IllegalStateException("Module 'kool-box2d-wasm' is not loaded. Call loadModule() first and wait for loading to be finished.")
29+
}
30+
}
31+
32+
actual fun destroy(nativeObject: JsAny) {
33+
destroyJsNativeAny(box2dWasm, nativeObject)
34+
}
35+
}
36+
37+
private fun destroyJsNativeAny(module: JsAny, obj: JsAny): Unit = js("module.destroy(obj)")

kool-physics-2d/src/wasmJsMain/kotlin/de/fabmax/kool/physics2d/Body.js.kt

Lines changed: 0 additions & 39 deletions
This file was deleted.

kool-physics-2d/src/wasmJsMain/kotlin/de/fabmax/kool/physics2d/Box2dMath.js.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.

kool-physics-2d/src/wasmJsMain/kotlin/de/fabmax/kool/physics2d/Physics2d.js.kt

Lines changed: 0 additions & 21 deletions
This file was deleted.

kool-physics-2d/src/wasmJsMain/kotlin/de/fabmax/kool/physics2d/Physics2dWorld.js.kt

Lines changed: 0 additions & 24 deletions
This file was deleted.

kool-physics-2d/src/wasmJsMain/kotlin/de/fabmax/kool/physics2d/Shape.js.kt

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)