summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/images/shot.pngbin0 -> 626 bytes
-rw-r--r--examples/sprite-batch.scm66
2 files changed, 66 insertions, 0 deletions
diff --git a/examples/images/shot.png b/examples/images/shot.png
new file mode 100644
index 0000000..7e308d7
--- /dev/null
+++ b/examples/images/shot.png
Binary files differ
diff --git a/examples/sprite-batch.scm b/examples/sprite-batch.scm
new file mode 100644
index 0000000..c31ffbf
--- /dev/null
+++ b/examples/sprite-batch.scm
@@ -0,0 +1,66 @@
+(use-modules (chickadee)
+ (chickadee math matrix)
+ (chickadee math rect)
+ (chickadee math vector)
+ (chickadee render)
+ (chickadee render font)
+ (chickadee render sprite)
+ (chickadee render texture)
+ (chickadee scripting)
+ (ice-9 format)
+ (ice-9 match)
+ ((sdl2) #:select (sdl-ticks))
+ (srfi srfi-1)
+ (statprof))
+
+(define texture #f)
+(define start-time (sdl-ticks))
+(define avg-frame-time 16)
+(define num-sprites 5000)
+(define sprites
+ (list-tabulate num-sprites
+ (lambda (n)
+ (list (rect (* (random:uniform) 640.0)
+ (* (random:uniform) 480.0)
+ 16.0 16.0)
+ (vec2 (* (- (random:uniform) 0.5) 0.5)
+ (* (- (random:uniform) 0.5) 0.5))))))
+(define matrix (make-identity-matrix4))
+
+(define (stats-message)
+ (format #f "sprites: ~d fps: ~1,2f"
+ num-sprites
+ (/ 1000.0 avg-frame-time)))
+
+(define stats-text (stats-message))
+
+(define (load)
+ (set! *random-state* (random-state-from-platform))
+ (set! texture (load-image "images/shot.png"))
+ (script
+ (forever
+ (sleep 60)
+ (set! stats-text (stats-message)))))
+
+(define stats-text-pos (vec2 4.0 464.0))
+(define (draw alpha)
+ (with-batched-sprites
+ (for-each (match-lambda
+ ((r v)
+ (set-rect-x! r (+ (rect-x r) (vec2-x v)))
+ (set-rect-y! r (+ (rect-y r) (vec2-y v)))
+ (draw-sprite* texture r matrix)))
+ sprites))
+ (draw-text stats-text stats-text-pos)
+ (let ((current-time (sdl-ticks)))
+ (set! avg-frame-time
+ (+ (* (- current-time start-time) 0.1)
+ (* avg-frame-time 0.9)))
+ (set! start-time current-time)))
+
+(define (update dt)
+ (update-agenda 1))
+
+(gcprof
+ (lambda ()
+ (run-game #:load load #:draw draw #:update update)))