flan/examples/core-input-mouse-wheel.fln

52 lines
2.0 KiB
Plaintext

;;;; 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)