diff options
author | Gene Pasquet <dev@etenil.net> | 2024-05-22 10:30:58 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2024-05-22 10:30:58 +0100 |
commit | 0092c594e89e491df926693012f4cd70a85c461e (patch) | |
tree | fa5f1525f4b71649430e2d8d77d9e658e749286e | |
parent | ab5aac9c5907adf55320b5e8396689b971b7361b (diff) |
Start extracting code into modules
-rw-r--r-- | turbo.scm | 59 | ||||
-rw-r--r-- | turbo/vehicles.scm | 43 |
2 files changed, 61 insertions, 41 deletions
@@ -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)))) |