aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2024-05-22 10:59:34 +0100
committerGene Pasquet <dev@etenil.net>2024-05-22 10:59:34 +0100
commit523ed18352463ddea29bf0a97a65ca40b40cf420 (patch)
tree728e114f727f6c0c6297123e5146e7241e85df3e
parent0092c594e89e491df926693012f4cd70a85c461e (diff)
Define player car as a vehicle
-rw-r--r--turbo.scm58
-rw-r--r--turbo/vehicles.scm15
2 files changed, 42 insertions, 31 deletions
diff --git a/turbo.scm b/turbo.scm
index 3497124..91d098f 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -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))))