;;;; raylib [core] example - input mouse ;;;; ;;;; examples/core/core_input_mouse.c. Needed three new bindings — show-cursor, ;;;; hide-cursor and is-cursor-hidden — which are now in vendor/raylib. ;;;; ;;;; The C's `else if` chain over the seven mouse buttons is a `cond` here. ;;;; That is not a workaround: `cond` is what Flan has and it is the same ;;;; first-match-wins shape, with `:else` where C falls off the end. The order ;;;; matters in both — two buttons pressed on the same frame give the earlier ;;;; one, which is the C's behaviour and not an accident of the port. ;;;; ;;;; The colour has to be a `once` rather than a `let`, for the reason ;;;; core-input-keys' position does: it is state between frames. import rl "vendor:raylib" const screen-width = 800 const screen-height = 450 once ball-color: rl/Color fn main() -> () rl/init-window(screen-width, screen-height, "raylib [core] example - input mouse") defer rl/close-window() ;; The C also initialises the ball's POSITION, to {-100,-100} so it starts ;; off-screen. That is dead there and is not here: the first thing the loop ;; does is overwrite it with get-mouse-position, before anything is drawn. ball-color = rl/darkblue rl/set-target-fps(60) until rl/window-should-close() ;; Update if rl/is-key-pressed(:key-h) if rl/is-cursor-hidden() then rl/show-cursor() else rl/hide-cursor() let ball = rl/get-mouse-position() ball-color = if rl/is-mouse-button-pressed(:mouse-left) rl/maroon elif rl/is-mouse-button-pressed(:mouse-middle) rl/lime elif rl/is-mouse-button-pressed(:mouse-right) rl/darkblue elif rl/is-mouse-button-pressed(:mouse-side) rl/purple elif rl/is-mouse-button-pressed(:mouse-extra) rl/yellow elif rl/is-mouse-button-pressed(:mouse-forward) rl/orange elif rl/is-mouse-button-pressed(:mouse-back) rl/beige else ball-color ;; Draw rl/with-drawing: rl/clear-background(rl/raywhite) rl/draw-circle-v(ball, 40.0, ball-color) rl/draw-text("move ball with mouse and click mouse button to change color", 10, 10, 20, rl/darkgray) rl/draw-text("Press 'H' to toggle cursor visibility", 10, 30, 20, rl/darkgray) if rl/is-cursor-hidden() rl/draw-text("CURSOR HIDDEN", 20, 60, 20, rl/red) else rl/draw-text("CURSOR VISIBLE", 20, 60, 20, rl/lime)