FabricateSceneGraphTestMain.kt
src/jvmMain/kotlin/afield/graphics/scene/fabricated/FabricateSceneGraphTestMain.kt · 50 lines
package afield.graphics.scene.fabricated
import afield.math.linalg.Vector3f
object FabricateSceneGraphTestMain
Pure JVM smoke test for hierarchical transform composition.
fun main(args: Array<String>)
body — 43 lines, from line 7
@JvmStatic
fun main(args: Array<String>) {
val scene = FabricateScene("test-scene")
val parent = FabricateNode("parent").setTranslation(10f, 0f, 0f)
val child = FabricateNode("child").setTranslation(0f, 2f, 0f)
val grandchild = FabricateNode("grandchild").setTranslation(0f, 0f, 3f)
scene.root += parent
parent += child
child += grandchild
scene.updateWorld()
assertPosition(parent, 10f, 0f, 0f)
assertPosition(child, 10f, 2f, 0f)
assertPosition(grandchild, 10f, 2f, 3f)
parent.translate(-4f, 1f, 0f)
scene.updateWorld()
assertPosition(parent, 6f, 1f, 0f)
assertPosition(child, 6f, 3f, 0f)
assertPosition(grandchild, 6f, 3f, 3f)
val names = mutableListOf<String>()
scene.traverse { names += it.name }
check(names == listOf("test-scene", "parent", "child", "grandchild")) {
"unexpected traversal order $names"
}
check(parent.remove(child)) { "child should be removable" }
scene.updateWorld()
child.updateWorld(parentWorld = null, force = true)
assertPosition(child, 0f, 2f, 0f)
println("FabricateSceneGraphTestMain ok")
}
private fun assertPosition(node: FabricateNode, x: Float, y: Float, z: Float) {
val p = node.worldPosition(Vector3f())
check(p.distance(Vector3f(x, y, z)) < 1e-5f) {
"${node.name} was at $p, expected ($x, $y, $z)"
}
}
}