(eval-when (:compile-toplevel :load-toplevel :execute) (ql:quickload :cl-raylib)) (defpackage :raylib-user (:use :cl :3d-vectors) (:local-nicknames (:rl :raylib))) (in-package :raylib-user) (defparameter *move-speed* 2.0) (defstruct game-state (player-pos (vec 100 100))) (defun game-input (state) (with-slots ((pos player-pos)) state (let ((dx 0.0) (dy 0.0)) (when (rl:is-key-down :key-right) (incf dx 1)) (when (rl:is-key-down :key-left) (decf dx 1)) (when (rl:is-key-down :key-up) (decf dy 1)) (when (rl:is-key-down :key-down) (incf dy 1)) (setf pos (v+ pos (v* (vunit* (vec dx dy)) *move-speed*))) ))) (defun game-update (state) ()) (defun game-draw (state) (rl:draw-rectangle-v (game-state-player-pos state) (vec 100 100) :skyblue) (rl:draw-fps 10 5)) (defun main () (let* ((screen-width 800) (screen-height 450) (game-state (make-game-state))) (rl:with-window (screen-width screen-height "CL Game") (rl:set-target-fps 60) (loop :until (rl:window-should-close) :do (game-input game-state) (game-update game-state) (rl:with-drawing (rl:clear-background :raywhite) (game-draw game-state)))))) (main)