animation

Authors an AnimationLayout for this model with a DSL:

val layout = model.animation {
title = "Pharmacy"
size(800.0, 500.0)
objectClass("Customer") { color = "#1f77b4"; shape = LayoutShape.CIRCLE }
queue("PharmacistQ", 300.0, 250.0) { growthDegrees = 90.0 } // grows downward
resource("Pharmacist", 360.0, 250.0)
bar("WIP", 20.0, 400.0) { maxValue = 30.0 }
clock(20.0, 20.0)
}
layout.writeToFile(Path.of("pharmacy.lay.json"))

The DSL only describes intent (positions, colors, displays); the emitters that produce the trace are registered automatically by the animation controller. The layout keys to the trace by the same names/types that appear in events. The model's base time unit is recorded for the renderer.