Skip to content

tree

fun <K : Any, V, B : NodeBuilder<K, V, B>> tree(factory: (K) -> B, block: TreeScope<K, V, B>.() -> Unit): TreeRegistry<K, V, B>

Builds a forest of TreeNodes as a TreeRegistry. A top-level TreeScope.node call declares one of TreeRegistry.roots; NodeBuilder.children nests further nodes; NodeBuilder.dependsOn wires an extra prerequisite. factory supplies a fresh B per TreeScope.node call.

class SkillNodeBuilder : NodeBuilder<String, SkillNode, SkillNodeBuilder>() {
    var label = ""
    var locked = false
    override fun build() = SkillNode(label, locked)
}

val skillTree = tree(factory = { SkillNodeBuilder() }) {
    node("gathering") {
        label = "Gathering"
        children {
            node("mining") {
                label = "Mining"
                children {
                    node("smithing") { label = "Smithing"; dependsOn("gathering") }
                    node("rare_ore") { label = "Rare Ore"; locked = true }
                }
            }
        }
    }
}