;;;; raylib [core] example - input mouse wheel ;;;; ;;;; examples/core/core_input_mouse_wheel.c. Needed get-mouse-wheel-move, now ;;;; bound. ;;;; ;;;; This is the first example with a `TextFormat` in it. The C draws ;;;; ;;;; DrawText(TextFormat("Box position Y: %03i", boxPositionY), ...) ;;;; ;;;; and the number half of that is now sayable: (string (i64->bytes n)). ;;;; What is not is the "%03" — i64->bytes has no field width — so the label ;;;; is drawn with draw-text and the number with draw-int-padded from ;;;; examples/digits.fln, which draws the leading zeroes itself and then the ;;;; number in one call. A number wider than three digits is drawn in full, ;;;; exactly as printf's minimum-width means. ;;;; ;;;; The position is signed and goes negative as soon as the box scrolls past ;;;; the top, which is why draw-int-padded handles a sign at all. import rl "vendor:raylib" import d "digits.fln" const screen-width = 800 const screen-height = 450 const scroll-speed = 4 once box-y: i32 fn main() -> () rl/init-window(screen-width, screen-height, "raylib [core] example - input mouse wheel") defer rl/close-window() box-y = screen-height / 2 - 40 rl/set-target-fps(60) until rl/window-should-close() ;; Update. The wheel reading is a per-frame delta, so it is 0.0 on every ;; frame the wheel did not turn and this is a no-op then. box-y -= i32(rl/get-mouse-wheel-move() * f32(scroll-speed)) ;; Draw rl/with-drawing: rl/clear-background(rl/raywhite) rl/draw-rectangle(screen-width / 2 - 40, box-y, 80, 80, rl/maroon) rl/draw-text("Use mouse wheel to move the cube up and down!", 10, 10, 20, rl/gray) ;; The two halves of the C's one TextFormat call: the literal, measured, ;; and then the number starting where it ended. rl/draw-text("Box position Y: ", 10, 40, 20, rl/lightgray) d/draw-int-padded(box-y, 3, 10 + rl/measure-text("Box position Y: ", 20), 40, 20, rl/lightgray)