aboutsummaryrefslogtreecommitdiff
path: root/turbo.scm
blob: db4a8bae8def2cb2011229f58393ad6e2f4c8e39 (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
91
92
93
94
(use-modules (chickadee graphics sprite)
	     (chickadee)
	     (chickadee graphics viewport)
	     (ice-9 pretty-print)
	     (ice-9 format))

;;;; Constants and variables

(define lane-height 65)
(define lane-length 200)
(define road-start-y 80)
(define road-section-position 0)
(define road (load-tileset "road.png" lane-length lane-height))
(define road-top (texture-atlas-ref road 2))
(define road-bottom (texture-atlas-ref road 0))
(define road-lane (texture-atlas-ref road 1))

(define vehicle-height 45)
(define vehicle-length 100)
(define vehicle-steering-speed 4.0)
(define vehicles (load-tileset "vehicles.png" vehicle-length vehicle-height))

(define player-car (texture-atlas-ref vehicles 0))
(define player-velocity (vec2 0 0))
(define player-min-speed 4)
(define player-max-speed 20)
(define player-speed player-min-speed)

(define load-complete #f)

;;;; Game functions

(define (draw-lanes x y num-lanes)
  (if (> num-lanes 0)
      (begin
	(draw-sprite road-lane (vec2 x y))
	(draw-lanes x (+ lane-height y) (- num-lanes 1)))))

(define (draw-road-section startx starty num-lanes)
  (draw-sprite road-bottom (vec2 startx starty))
  (draw-lanes startx (+ lane-height starty) (- num-lanes 2))
  (draw-sprite road-top (vec2 startx (+ starty (* lane-height (- num-lanes 1))))))

(define (draw-road startx starty num-lanes)
  (if (< startx (window-width (current-window)))
      (begin
	(draw-road-section startx starty num-lanes)
	(draw-road (+ startx lane-length) starty num-lanes))))

(define (lane-y num-lane)
  (+ road-start-y
     (* lane-height (- num-lane 1))))

(define player-position
  (vec2 (/ (- (window-width (current-window)) vehicle-length) 2)
	(+ (lane-y 3)
	   (/ (- lane-height vehicle-height) 2))))

;;;; Chickadee hooks

(define (update interval)
  (set! road-section-position
	(if (< road-section-position (* lane-length -1))
	    (- (+ road-section-position lane-length) player-speed)
	    (- road-section-position player-speed)))

  (set! player-position (vec2+ player-position player-velocity)))

(define (draw alpha)
  (draw-road road-section-position road-start-y 5)
  (draw-text "Turbo Racers!"
	     (vec2 260.0 (- (window-height (current-window)) 25)))
  
  (draw-text (format #f "Speed: ~smph" (* player-speed 5))
	     (vec2 450.0 20.0))

  (draw-sprite player-car player-position))
  
  

(define (key-press key modifiers repeat?)
  (if (eq? key 'w)
      (set! player-velocity (vec2 0 vehicle-steering-speed)))
  (if (eq? key 's)
      (set! player-velocity (vec2 0 (* vehicle-steering-speed -1))))
  (if (eq? key 'a)
      (set! player-speed (max (- player-speed 1) player-min-speed)))
  (if (eq? key 'd)
      (set! player-speed (min (+ player-speed 1) player-max-speed)))
  )

(define (key-release key modifiers)
  (if (or (eq? key 'w) (eq? key 's))
      (set! player-velocity (vec2 0 0))))