;;;; 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, and therefore the ;;;; first that runs into the gap: the C draws ;;;; ;;;; DrawText(TextFormat("Box position Y: %03i", boxPositionY), ...) ;;;; ;;;; and Flan has no way to make a string out of a number. The label is drawn ;;;; with draw-text and the number after it with draw-int-padded from ;;;; examples/digits.flan, which is one glyph per digit out of a [10 string] ;;;; table. The "%03i" is the `3` argument — the leading zeroes are there, and ;;;; 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/begin-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) (rl/end-drawing)))