blob: 51a72b2f0006de95371171f956e7554db1632ce8 (
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
88
89
90
|
(import scheme
(chicken base)
(only srfi-1 iota)
(only (list-utils alist) plist->alist)
(prefix sdl2 "sdl2:")
(prefix sdl2-ttf "ttf:")
downstroke-engine
downstroke-world
downstroke-renderer
downstroke-entity
downstroke-tween)
;; ── Constants ────────────────────────────────────────────────────────────────
(define +ease-duration+ 2600)
(define +ease-syms+
'(linear quad-in quad-out quad-in-out cubic-in cubic-out cubic-in-out
sine-in-out expo-in expo-out expo-in-out back-out))
(define +ease-colors+
'((220 90 90) (240 140 60) (240 200 60) (180 220 70)
( 80 200 120) ( 70 180 200) (100 140 240) (160 100 220)
(220 80 180) (100 100 110) (140 180 200) (200 120 80)))
;; ── State ────────────────────────────────────────────────────────────────────
(define *label-font* #f)
(define *title-font* #f)
;; ── Ease grid ────────────────────────────────────────────────────────────────
(define (make-ease-entity ease-sym y rgb)
(let* ((left 20)
(right (+ left 120))
(base (plist->alist (list #:x left #:y y))))
(plist->alist
(list #:type 'tween-demo #:x left #:y y
#:width 14 #:height 14
#:vx 0 #:vy 0 #:gravity? #f #:solid? #f
#:color rgb
#:ease-name ease-sym
#:tween (make-tween base props: `((#:x . ,right))
duration: +ease-duration+ ease: ease-sym
repeat: -1 yoyo?: #t)))))
;; ── Rendering ────────────────────────────────────────────────────────────────
(define (draw-ease-labels! renderer entities)
(let ((white (sdl2:make-color 255 255 255 255)))
(draw-ui-text renderer *title-font*
"Tween demo - easing curves" white 12 6)
(draw-ui-text renderer *label-font*
"Each box ping-pongs with repeat: -1 yoyo?: #t" white 12 32)
(for-each
(lambda (e)
(let ((name (entity-ref e #:ease-name #f)))
(when name
(draw-ui-text renderer *label-font* (symbol->string name) white
158 (- (entity-ref e #:y 0) 2)))))
entities)))
;; ── Game ─────────────────────────────────────────────────────────────────────
(define *game*
(make-game
title: "Demo: Tweens" width: 640 height: 480
preload: (lambda (_game)
(set! *title-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 22))
(set! *label-font* (ttf:open-font "demo/assets/DejaVuSans.ttf" 13)))
create: (lambda (game)
(game-scene-set! game
(make-scene
entities: (map (lambda (ease i)
(make-ease-entity ease (+ 52 (* i 20))
(list-ref +ease-colors+ i)))
+ease-syms+ (iota (length +ease-syms+)))
tilemap: #f
camera: (make-camera x: 0 y: 0)
tileset-texture: #f
camera-target: #f
background: '(26 28 34))))
render: (lambda (game)
(draw-ease-labels! (game-renderer game)
(scene-entities (game-scene game))))))
(game-run! *game*)
|