From 9a5ef19d5971488de18539eaf68e35bf590a4c5e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 28 Aug 2020 07:16:51 -0400 Subject: render: Add vector path rendering module. --- examples/path.scm | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 examples/path.scm (limited to 'examples/path.scm') diff --git a/examples/path.scm b/examples/path.scm new file mode 100644 index 0000000..0223864 --- /dev/null +++ b/examples/path.scm @@ -0,0 +1,80 @@ +(use-modules (chickadee) + (chickadee graphics color) + (chickadee graphics font) + (chickadee graphics path) + (chickadee math) + (chickadee math vector) + (chickadee scripting)) + +(set! *random-state* (random-state-from-platform)) + +(define (stats-message) + (format #f "fps: ~1,2f" + (/ 1000.0 avg-frame-time))) +(define start-time 0.0) +(define avg-frame-time 16) +(define stats-text (stats-message)) +(define stats-text-pos (vec2 4.0 464.0)) +(define last-update start-time) +(define canvas (make-empty-canvas)) +(define rss-orange (string->color "#FF8800")) + +(define rss-feed-logo + (superimpose + (with-style ((fill-color rss-orange)) + (fill + (rounded-rectangle (vec2 0.0 3.0) 95.0 95.0 #:radius 15.0))) + (with-style ((fill-color white)) + (fill + (circle (vec2 18.0 18.0) 9.0))) + (with-style ((stroke-color white) + (stroke-cap 'round) + (stroke-width 15.0)) + (stroke + (path + (arc (vec2 18.0 18.0) 30.0 30.0 0.0 pi/2)) + (path + (arc (vec2 18.0 18.0) 60.0 60.0 0.0 pi/2)))))) + +(define polylines + (with-style ((stroke-color tango-plum) + (stroke-width 6.0)) + (stroke + (apply polyline (map (lambda (i) + (vec2 (* (+ i 1) 30) (+ (random 240) 100))) + (iota 20)))))) + +(define (make-example-painter s) + (superimpose (translate (vec2 30.0 10.0) + (scale s rss-feed-logo)) + polylines)) + +(define (load) + (script + (forever + (tween 60 1.0 4.0 + (lambda (s) + (set-canvas-painter! canvas (make-example-painter s)))) + (tween 60 4.0 1.0 + (lambda (s) + (set-canvas-painter! canvas (make-example-painter s))))))) + +(define (draw alpha) + (draw-canvas canvas) + (draw-text stats-text stats-text-pos) + (let ((current-time (elapsed-time))) + (set! avg-frame-time + (+ (* (- current-time start-time) 0.1) + (* avg-frame-time 0.9))) + (set! start-time current-time) + (when (>= (- current-time last-update) 1000) + (set! stats-text (stats-message)) + (set! last-update current-time)))) + +(define (update dt) + (update-agenda 1)) + +(run-game #:window-title "Vector paths" + #:load load + #:draw draw + #:update update) -- cgit v1.2.3