Releases: labelle-toolkit/labelle-assembler
v0.39.1
v0.39.0
v0.38.0
What's Changed
- deps: repoint labelle-core backend pins to v1.15.0 tag (#266) by @apotema in #267
- fix(sokol-android): initialize gamepad subsystem so connected pads show at startup by @apotema in #268
- fix(sokol/android): light up dpad reported as a HAT axis by @apotema in #269
- feat(backends): relocate windowless-SDL desktop gamepad source out of core into assembler (core#28) by @apotema in #271
- fix(gamepad-android): show real device name + type_hint on sokol-Android (#270) by @apotema in #272
- fix(gamepad-demo): avoid OOB when device name fills the buffer by @apotema in #273
- feat(gamepad): project.labelle opt-out flag (gamepad: .auto | .none) (core#28) by @apotema in #274
- fix(tests): drive plugin systems headless on the backend-agnostic test target (#275) by @apotema in #276
- feat(sdl_gamepad): hardware-free verification harness + CI runtime check by @apotema in #279
- Fix Windows desktop builds for the sokol and raylib backends by @apotema in #277
- fix(scanner): fall back to copy when symlink creation is denied on Windows by @apotema in #278
- release: v0.38.0 by @apotema in #280
Full Changelog: v0.37.0...v0.38.0
v0.37.0
controller backends: raylib/sdl detection+state, sokol Android/iOS/Linux/wasm detection, Android analog state (quirk table), single-core-instance generator fix, ECS wasm32 fix. NOTE: mobile (android/ios/linux/wasm) controller code is compile/cross-compile-verified only — on-device validation tracked in labelle-engine#261.
What's Changed
- feat(raylib): gamepad hotplug pollGamepadEvents/describeGamepads (#246) by @apotema in #253
- feat(sdl): native gamepad hotplug + GUID, replace input stubs (#247) by @apotema in #254
- feat(sokol): Android gamepad detection JNI glue + B->BACK guard (#248) by @apotema in #256
- fix(build): unify labelle-core onto backend input modules (single core instance) by @apotema in #259
- feat(sokol): iOS/tvOS gamepad state + link GameController.framework (#251) by @apotema in #257
- feat(build): link libudev for sokol Linux gamepad detection + udev rule & docs (#249) by @apotema in #255
- feat(sokol): Android analog gamepad state (buttons + axes + dpad) (#250) by @apotema in #260
- feat(examples): gamepad input demo (raylib) + raylib-imgui Zig 0.16 build fixes by @apotema in #262
- fix(ecs/zig-ecs): u32 instance_id for wasm32 (64-bit atomics unsupported) by @apotema in #264
- release: labelle-assembler v0.37.0 by @apotema in #265
Full Changelog: v0.36.5...v0.37.0
v0.36.5 — ECS component-storage cache
ECS adapter: cache component storage per type (#245)
Registry.assure(T) re-hashed a comptime-constant type id into a HashMap on every component access (getComponent/hasComponent/view filtering) — profiling a 100-worker scene showed this as the single biggest per-tick CPU cost. The adapter now memoizes the *Storage(T) pointer in a per-T threadlocal cache, validated against a per-adapter instance_id (immune to registry address reuse; race-free under concurrent access).
Measured (Debug, 100-worker scene): assure HashMap self-time −96%; Debug FPS +8% median / +24% at the dips (p10 73→92). ReleaseFast (vsync-capped) banks it as headroom. Behavior-preserving.
Downstream: bump .assembler_version to 0.36.5. Closes Flying-Platform/flying-platform-labelle#509.
What's Changed
- fix: resolve cross-file Subflow refs in flow_scanner (unblocks Delay) (#243) by @apotema in #244
- perf(ecs): cache component storage per type in the adapter by @apotema in #245
Full Changelog: v0.36.4...v0.36.5
v0.36.4 — frame-rate-independent desktop dt
Frame-rate-independent desktop simulation (#242)
Desktop sokol and raylib backends now derive the per-frame simulation dt from real elapsed frame time (clamped) instead of a fixed 1/target_fps, matching the mobile/wasm templates. Previously the desktop sim speed scaled with the display refresh rate (e.g. ~1.67× too fast on a 100Hz panel, 2× on 120Hz). Now the game runs at real-time regardless of display refresh.
backends/sokol/templates/desktop.txt:dt = @min(frameDuration(), 4.0/target_fps)backends/raylib/templates/desktop.txt:dt = @min(getFrameTime(), 4.0/target_fps)- Hardened the
4.0/target_fpsclamp denominator with@max(target_fps, 1)across desktop + mobile templates to guard atarget_fps=0(unlimited) config against divide-by-zero.
Downstream note: games consuming this should bump .assembler_version to 0.36.4. The dt change is frame-rate-independent (non-deterministic vs the old fixed step) and may warrant a re-balance for games tuned against the old refresh-coupled speed.
Closes Flying-Platform/flying-platform-labelle#504 (downstream tracking).
What's Changed
Full Changelog: v0.36.3...v0.36.4
v0.36.3
What's Changed
- fix: game-script CustomNodes compile — shim PluginFlowNodes + named-module promotion (#240) by @apotema in #241
Full Changelog: v0.36.2...v0.36.3
v0.36.2
What's Changed
Full Changelog: v0.36.1...v0.36.2
v0.36.1
What's Changed
Full Changelog: v0.36.0...v0.36.1
v0.36.0
What's Changed
Full Changelog: v0.35.0...v0.36.0