summaryrefslogtreecommitdiff
path: root/examples/path.scm
blob: e22c6f319249a5e79c3c07e9a847cc541dc5e06f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
(use-modules (chickadee)
             (chickadee graphics color)
             (chickadee graphics path)
             (chickadee graphics text)
             (chickadee math)
             (chickadee math vector)
             (chickadee scripting)
             (ice-9 format))

(set! *random-state* (random-state-from-platform))

(define (stats-message)
  (format #f "fps: ~1,2f" (/ 1.0 avg-frame-time)))
(define start-time 0.0)
(define avg-frame-time 0.0)
(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 1.0 1.0 4.0
           (lambda (s)
             (set-canvas-painter! canvas (make-example-painter s))))
    (tween 1.0 4.0 1.0
           (lambda (s)
             (set-canvas-painter! canvas (make-example-painter s)))))))

(define (draw alpha)
  (pk 'draw-canvas)
  (draw-canvas canvas)
  (pk 'draw-text)
  (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) 1.0)
      (set! stats-text (stats-message))
      (set! last-update current-time))))

(define (update dt)
  (update-agenda 1))

(define (key-press key modifiers repeat?)
  (case key
    ((q) (abort-game))))

(run-game #:window-title "Vector paths"
          #:load load
          #:draw draw
          #:key-press key-press
          #:update update)