summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/action.scm57
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/action.scm b/examples/action.scm
new file mode 100644
index 0000000..acc1434
--- /dev/null
+++ b/examples/action.scm
@@ -0,0 +1,57 @@
+(use-modules (2d sprite)
+ (2d game-loop)
+ (2d window)
+ (2d helpers)
+ (2d agenda)
+ (2d coroutine)
+ (2d actions)
+ (2d vector))
+
+(init-2d)
+
+(define window-width 800)
+(define window-height 600)
+(define sprite #f)
+
+(define (key-down key mod unicode)
+ (cond ((any-equal? key 'escape 'q)
+ (close-window)
+ (quit))))
+
+;; Draw our sprite
+(define (render)
+ (draw-sprite sprite))
+
+;; Register callbacks.
+(add-hook! on-render-hook (lambda () (render)))
+(add-hook! on-key-down-hook (lambda (key mod unicode) (key-down key mod unicode)))
+
+;; Open the window.
+(open-window window-width window-height)
+
+;; Load a sprite and center it on the screen.
+(set! sprite
+ (load-sprite "images/sprite.png"
+ #:position (vector (/ window-width 2)
+ (/ window-height 2))))
+
+;; Simple script that moves the sprite to a random location every
+;; second.
+(agenda-schedule
+ (colambda ()
+ (lerp (lambda (i)
+ (set-sprite-position! sprite (vector i (/ window-height 2))))
+ 0
+ 800
+ 120)))
+
+(agenda-schedule
+ (colambda ()
+ (lerp (lambda (angle)
+ (set-sprite-rotation! sprite angle))
+ 0
+ 1080
+ 120)))
+
+
+(run-game-loop)