diff options
author | Gene Pasquet <dev@etenil.net> | 2024-05-22 10:59:34 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2024-05-22 10:59:34 +0100 |
commit | 523ed18352463ddea29bf0a97a65ca40b40cf420 (patch) | |
tree | 728e114f727f6c0c6297123e5146e7241e85df3e | |
parent | 0092c594e89e491df926693012f4cd70a85c461e (diff) |
Define player car as a vehicle
-rw-r--r-- | turbo.scm | 58 | ||||
-rw-r--r-- | turbo/vehicles.scm | 15 |
2 files changed, 42 insertions, 31 deletions
@@ -4,7 +4,8 @@ (chickadee audio) (ice-9 pretty-print) (ice-9 format) - (turbo vehicles)) + (turbo vehicles) + (srfi srfi-1)) ;;;; Constants and variables @@ -25,22 +26,19 @@ (define vehicles-sprites (load-tileset "vehicles.png" vehicle-length vehicle-height)) -(define player-car (texture-atlas-ref vehicles-sprites 0)) (define player-velocity (vec2 0 0)) (define player-min-speed 4) (define player-max-speed 20) -(define player-speed (+ player-min-speed 1)) (define player-rotation 0) (define music-play? #f) (define music-res (load-audio "music.ogg")) (define music (make-source #:audio music-res #:loop? #t)) - (define (calculate-vehicle-position lane) (vec2 (window-width (current-window)) (+ road-start-y - (* 65 (- lane 1)) + (* 65 (- lane 1)) (/ (- lane-height vehicle-height) 2)))) (define (random-lane-start-pos) @@ -105,38 +103,42 @@ (+ road-start-y (* lane-height (- num-lane 1)))) -(define player-position +(define initial-player-position (vec2 (/ (- (window-width (current-window)) vehicle-length) 4) (+ (lane-y 3) (/ (- lane-height vehicle-height) 2)))) +(define player-car (make-vehicle + 0 + (texture-atlas-ref vehicles-sprites 0) + initial-player-position + (+ 1 player-min-speed) + #t)) + (define (player-on-road?) - (and (> (vec2-y player-position) road-start-y) - (< (+ (vec2-y player-position) vehicle-height) road-end-y))) + (and (> (vec2-y (vehicle-position player-car)) road-start-y) + (< (+ (vec2-y (vehicle-position player-car)) vehicle-height) road-end-y))) (define (off-road-player-top) (set! player-rotation 1) - (set! player-position (vec2+ player-position (vec2 0 30))) - (set! player-speed 0)) + (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) (vec2 0 30))) + (set-vehicle-speed! player-car 0)) (define (off-road-player-bottom) (set! player-rotation -1) - (set! player-position (vec2+ player-position (vec2 0 -10))) - (set! player-speed 0)) + (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) (vec2 0 -10))) + (set-vehicle-speed! player-car 0)) (define (off-road-player) "Moves the player off-road" - (if (> (vec2-y player-position) road-start-y) + (if (> (vec2-y (vehicle-position player-car)) road-start-y) (off-road-player-top) (off-road-player-bottom))) (define (player-collides?) - (let ((player-hitbox (vehicle-hitbox player-position))) - (let loop ((vehicles vehicles)) - (if (rect-intersects? player-hitbox (vehicle-hitbox (vehicle-position (car vehicles)))) - #t - (if (null? (cdr vehicles)) - #f - (loop (cdr vehicles))))))) + (let ((player-hitbox (vehicle-hitbox player-car))) + (any (lambda (vehicle) + (rect-intersects? player-hitbox (vehicle-hitbox vehicle))) + vehicles))) ;;;; Chickadee hooks @@ -160,14 +162,14 @@ (set! road-section-position (if (< road-section-position (* lane-length -1)) - (- (+ road-section-position lane-length) player-speed) - (- road-section-position player-speed))) + (- (+ road-section-position lane-length) (vehicle-speed player-car)) + (- road-section-position (vehicle-speed player-car)))) - (set! player-position (vec2+ player-position player-velocity)) + (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) player-velocity)) (for-each (lambda (veh) (if (vehicle-active? veh) - (let ((speed-diff (- player-speed (vehicle-speed veh)))) + (let ((speed-diff (vehicle-speed-diff player-car veh))) (set-vehicle-position! veh (vec2+ (vehicle-position veh) (vec2 (* speed-diff -1) 0)))))) @@ -194,14 +196,14 @@ #:font the-font #:scale (vec2 2 2)) - (draw-sprite player-car player-position #:rotation player-rotation) + (draw-sprite (vehicle-sprite player-car) (vehicle-position player-car) #:rotation player-rotation) (for-each (lambda (veh) (if (vehicle-active? veh) (draw-sprite (vehicle-sprite veh) (vehicle-position veh)))) vehicles) - (draw-text (format #f "Speed: ~smph" (* player-speed 5)) + (draw-text (format #f "Speed: ~smph" (* (vehicle-speed player-car) 5)) (vec2 450.0 20.0) #:font the-font #:scale (vec2 2 2)) @@ -219,9 +221,9 @@ ((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))) + (set-vehicle-speed! player-car (max (- (vehicle-speed player-car) 1) player-min-speed))) ((eq? key 'd) - (set! player-speed (min (+ player-speed 1) player-max-speed))) + (set-vehicle-speed! player-car (min (+ (vehicle-speed player-car) 1) player-max-speed))) ((eq? key 'escape) (abort-game)))) diff --git a/turbo/vehicles.scm b/turbo/vehicles.scm index 618d808..7bc1421 100644 --- a/turbo/vehicles.scm +++ b/turbo/vehicles.scm @@ -1,5 +1,7 @@ (define-module (turbo vehicles) #:use-module (srfi srfi-9) + #:use-module (chickadee math vector) + #:use-module (chickadee math rect) #:export (make-vehicle make-inactive-vehicle vehicle-height @@ -14,7 +16,8 @@ set-vehicle-speed! set-vehicle-active! vehicle-hitbox - vehicle-safety-distance?)) + vehicle-safety-distance? + vehicle-speed-diff)) (define vehicle-height 45) (define vehicle-length 100) @@ -32,8 +35,11 @@ (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-hitbox vehicle) + (rect (vec2-x (vehicle-position vehicle)) + (vec2-y (vehicle-position vehicle)) + vehicle-length + vehicle-height)) (define (vehicle-safety-distance? vehicle1 vehicle2) (let ((vehicle1-x (vec2-x (vehicle-position vehicle1))) @@ -41,3 +47,6 @@ (> vehicle2-x (+ (* 2 vehicle-length) vehicle1-x)))) + +(define (vehicle-speed-diff vehicle1 vehicle2) + (abs (- (vehicle-speed vehicle1) (vehicle-speed vehicle2)))) |