aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2024-05-22 10:30:58 +0100
committerGene Pasquet <dev@etenil.net>2024-05-22 10:30:58 +0100
commit0092c594e89e491df926693012f4cd70a85c461e (patch)
treefa5f1525f4b71649430e2d8d77d9e658e749286e
parentab5aac9c5907adf55320b5e8396689b971b7361b (diff)
Start extracting code into modules
-rw-r--r--turbo.scm59
-rw-r--r--turbo/vehicles.scm43
2 files changed, 61 insertions, 41 deletions
diff --git a/turbo.scm b/turbo.scm
index 9e16e1f..3497124 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -4,7 +4,7 @@
(chickadee audio)
(ice-9 pretty-print)
(ice-9 format)
- (srfi srfi-9))
+ (turbo vehicles))
;;;; Constants and variables
@@ -23,9 +23,6 @@
(define grass (load-image "grass.png"))
(define grass-height 96)
-(define vehicle-height 45)
-(define vehicle-length 100)
-(define vehicle-steering-speed 4.0)
(define vehicles-sprites (load-tileset "vehicles.png" vehicle-length vehicle-height))
(define player-car (texture-atlas-ref vehicles-sprites 0))
@@ -35,22 +32,10 @@
(define player-speed (+ player-min-speed 1))
(define player-rotation 0)
-(define red-van (texture-atlas-ref vehicles-sprites 1))
-(define red-van-initial-speed 4)
-(define red-van-speed red-van-initial-speed)
-
(define music-play? #f)
(define music-res (load-audio "music.ogg"))
(define music (make-source #:audio music-res #:loop? #t))
-(define-record-type <vehicle>
- (make-vehicle id sprite position speed active?)
- vechicle?
- (id vehicle-id)
- (sprite vehicle-sprite)
- (position vehicle-position set-vehicle-position!)
- (speed vehicle-speed set-vehicle-speed!)
- (active? vehicle-active? set-vehicle-active!))
(define (calculate-vehicle-position lane)
(vec2 (window-width (current-window))
@@ -58,15 +43,17 @@
(* 65 (- lane 1))
(/ (- lane-height vehicle-height) 2))))
-(define (make-inactive-vehicle id tile)
- (make-vehicle id tile (calculate-vehicle-position (+ 1 (random 5))) 4 #f))
+(define (random-lane-start-pos)
+ (calculate-vehicle-position (+ 1 (random road-num-lanes))))
(define (make-vehicle-list vehicle-list tile-ref)
(if (< tile-ref (texture-atlas-size vehicles-sprites))
(cons (make-inactive-vehicle (* 2 tile-ref)
- (texture-atlas-ref vehicles-sprites tile-ref))
+ (texture-atlas-ref vehicles-sprites tile-ref)
+ (random-lane-start-pos))
(cons (make-inactive-vehicle (+ 1 (* 2 tile-ref))
- (texture-atlas-ref vehicles-sprites tile-ref))
+ (texture-atlas-ref vehicles-sprites tile-ref)
+ (random-lane-start-pos))
(make-vehicle-list vehicle-list (+ tile-ref 1))))
vehicle-list))
@@ -74,13 +61,6 @@
(define game-over #f)
-(define (vehicle-safety-distance? vehicle1 vehicle2)
- (let ((vehicle1-x (vec2-x (vehicle-position vehicle1)))
- (vehicle2-x (vec2-x (vehicle-position vehicle2))))
- (> vehicle2-x
- (+ (* 2 vehicle-length)
- vehicle1-x))))
-
(define (vehicle-has-spawn-space? vehicle)
(let loop ((vehicles vehicles))
(let ((other-vehicle (car vehicles))
@@ -149,9 +129,6 @@
(off-road-player-top)
(off-road-player-bottom)))
-(define (vehicle-hitbox vehicle-pos)
- (rect (vec2-x vehicle-pos) (vec2-y vehicle-pos) vehicle-length vehicle-height))
-
(define (player-collides?)
(let ((player-hitbox (vehicle-hitbox player-position)))
(let loop ((vehicles vehicles))
@@ -236,17 +213,17 @@
(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)))
- (if (eq? key 'escape)
- (abort-game))
- )
+ (cond
+ ((eq? key 'w)
+ (set! player-velocity (vec2 0 vehicle-steering-speed)))
+ ((eq? key 's)
+ (set! player-velocity (vec2 0 (* vehicle-steering-speed -1))))
+ ((eq? key 'a)
+ (set! player-speed (max (- player-speed 1) player-min-speed)))
+ ((eq? key 'd)
+ (set! player-speed (min (+ player-speed 1) player-max-speed)))
+ ((eq? key 'escape)
+ (abort-game))))
(define (key-release key modifiers)
(if (or (eq? key 'w) (eq? key 's))
diff --git a/turbo/vehicles.scm b/turbo/vehicles.scm
new file mode 100644
index 0000000..618d808
--- /dev/null
+++ b/turbo/vehicles.scm
@@ -0,0 +1,43 @@
+(define-module (turbo vehicles)
+ #:use-module (srfi srfi-9)
+ #:export (make-vehicle
+ make-inactive-vehicle
+ vehicle-height
+ vehicle-length
+ vehicle-steering-speed
+ vehicle-id
+ vehicle-sprite
+ vehicle-position
+ vehicle-speed
+ vehicle-active?
+ set-vehicle-position!
+ set-vehicle-speed!
+ set-vehicle-active!
+ vehicle-hitbox
+ vehicle-safety-distance?))
+
+(define vehicle-height 45)
+(define vehicle-length 100)
+(define vehicle-steering-speed 4.0)
+
+(define-record-type <vehicle>
+ (make-vehicle id sprite position speed active?)
+ vechicle?
+ (id vehicle-id)
+ (sprite vehicle-sprite)
+ (position vehicle-position set-vehicle-position!)
+ (speed vehicle-speed set-vehicle-speed!)
+ (active? vehicle-active? set-vehicle-active!))
+
+(define (make-inactive-vehicle id tile initial-position)
+ (make-vehicle id tile initial-position 4 #f))
+
+(define (vehicle-hitbox vehicle-pos)
+ (rect (vec2-x vehicle-pos) (vec2-y vehicle-pos) vehicle-length vehicle-height))
+
+(define (vehicle-safety-distance? vehicle1 vehicle2)
+ (let ((vehicle1-x (vec2-x (vehicle-position vehicle1)))
+ (vehicle2-x (vec2-x (vehicle-position vehicle2))))
+ (> vehicle2-x
+ (+ (* 2 vehicle-length)
+ vehicle1-x))))