65 lines
2.4 KiB
Plaintext
65 lines
2.4 KiB
Plaintext
;;;; 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)
|