52 lines
2.0 KiB
Plaintext
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)
|