;;;; 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.flan, 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.flan") (defconst screen-width 800) (defconst screen-height 450) (defconst scroll-speed 4) (defvar box-y i32) (defn main [] () (rl/init-window screen-width screen-height "raylib [core] example - input mouse wheel") (defer (rl/close-window)) (set 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. (set box-y (- 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))))