blob: f6c9db7f35be18c5faa808d04aa4d12f20f310c1 (
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
|
(module downstroke/engine *
(import scheme
(chicken base)
(chicken keyword)
(prefix sdl2 "sdl2:")
(prefix sdl2-ttf "ttf:")
(prefix sdl2-image "img:")
defstruct
downstroke/world
downstroke/input
downstroke/assets
downstroke/renderer)
;; ── Game struct ────────────────────────────────────────────────────────────
;; defstruct auto-generates make-game, which we'll wrap with default values
(defstruct game
title width height
window renderer
input ;; input-state record
input-config ;; input-config record
assets ;; asset registry (hash-table from assets.scm)
frame-delay
preload-hook ;; (lambda (game) ...)
create-hook ;; (lambda (game) ...)
update-hook ;; (lambda (game dt) ...)
render-hook ;; (lambda (game) ...) — post-render overlay
scene) ;; current scene struct; #f until create: runs
;; Store the auto-generated constructor as make-game*
(define make-game* make-game)
;; ── Public constructor wrapper ─────────────────────────────────────────────
;; Wraps the auto-generated make-game (renamed to make-game*) with default values
(define (make-game #!key
(title "Downstroke Game")
(width 640) (height 480)
(frame-delay 16)
(input-config *default-input-config*)
(preload #f) (create #f) (update #f) (render #f))
(make-game*
title: title
width: width
height: height
window: #f
renderer: #f
scene: #f
input: (create-input-state input-config)
input-config: input-config
assets: (make-asset-registry)
frame-delay: frame-delay
preload-hook: preload
create-hook: create
update-hook: update
render-hook: render))
;; ── Convenience accessors ──────────────────────────────────────────────────
;; game-camera: derived from the current scene (only valid after create: runs)
(define (game-camera game)
(scene-camera (game-scene game)))
;; game-asset: retrieve an asset by key
(define (game-asset game key)
(asset-ref (game-assets game) key))
;; game-asset-set!: store an asset by key
(define (game-asset-set! game key value)
(asset-set! (game-assets game) key value))
;; ── game-run! ──────────────────────────────────────────────────────────────
;; Stub — implemented in Task 4
(define (game-run! game)
(error "game-run! not yet implemented"))
) ;; end module
|