summaryrefslogtreecommitdiffstats
path: root/snek.scm
diff options
context:
space:
mode:
authorgonzo <gonzo@toniatuh.com>2024-11-03 21:43:37 +0100
committergonzo <gonzo@toniatuh.com>2024-11-03 21:48:36 +0100
commit42d46d324715a27b763d39cc6bf34bb40a594f22 (patch)
tree04b9286c56e13998c2fa3fbb46aad7536436879d /snek.scm
parent9bb2bf304e47fe74952f88ffcacabb25ae4b5014 (diff)
downloadgambit-snek-42d46d324715a27b763d39cc6bf34bb40a594f22.tar.gz
now has separation between compiled and interpreted contexts
- use cond-expand to load raylib if the snek.scm is interpreted - .gambini added to automatically add gambit-raylib to search order - game now starts in background when interpreted - this makes it easier to incrementally develop in emacs - game starts in foreground when compiled
Diffstat (limited to 'snek.scm')
-rw-r--r--snek.scm39
1 files changed, 30 insertions, 9 deletions
diff --git a/snek.scm b/snek.scm
index d92d43f..c748c5d 100644
--- a/snek.scm
+++ b/snek.scm
@@ -1,3 +1,9 @@
+(cond-expand ((and (compilation-target (_))
+ (not raylib))
+ (import (raylib))
+ (define-cond-expand-feature raylib))
+ (else #t))
+
(define-syntax with-drawing
(syntax-rules ()
((with-drawing body ...)
@@ -9,6 +15,7 @@
(define BLACK (raylib#make-color 0 0 0 255))
(define WHITE (raylib#make-color 255 255 255 255))
(define RED (raylib#make-color 255 0 0 255))
+(define GREEN (raylib#make-color 0 255 0 255))
(define KEY_ESC 256)
(define KEY_RIGHT 262)
@@ -152,15 +159,29 @@
0
'right))
+(define (run-game)
+ (dynamic-wind
+ (lambda () (begin
+ (raylib#set-target-fps 60)
+ (raylib#init-window VP_WIDTH VP_HEIGHT "snek")
+ (raylib#set-exit-key KEY_ESC)
+ (set! game-running #t)
+ (display "GAME ON!")))
+ (lambda () (let ((state (init)))
+ (place-apple! state)
+ (main-loop state)))
+ (lambda () (raylib#close-window))))
+
+(define (run-game-bg)
+ (thread-start! (make-thread (lambda () (run-game)) "game-loop")))
+
(define (main arg)
- (raylib#set-target-fps 60)
- (raylib#init-window VP_WIDTH VP_HEIGHT "snek")
- (raylib#set-exit-key KEY_ESC)
- (set! game-running #t)
- (display "GAME ON!")
- (let ((state (init)))
- (place-apple! state)
- (main-loop state))
- (raylib#close-window))
+ ;; compilation-target (_) denotes the interpreter !
+ (cond-expand ((compilation-target (_))
+ (display "BG-RUN")
+ (run-game-bg))
+ (else
+ (display "FG-RUN")
+ (run-game))))
(main '())