aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2024-05-23 06:18:25 +0100
committerGene Pasquet <dev@etenil.net>2024-05-23 06:18:25 +0100
commit46c678537885a6d815f0ba4b2b8a8b16500ae07e (patch)
treeae043c8b9fb5c2b03936162b9808871422e4e449
parentb18c2d0643899d5ed44a01285c49875491e4bf1f (diff)
Fix little speed difference bugs
-rw-r--r--TODO.org2
-rw-r--r--turbo.scm18
-rw-r--r--turbo/vehicles.scm12
3 files changed, 20 insertions, 12 deletions
diff --git a/TODO.org b/TODO.org
index 7f4497a..8cac592 100644
--- a/TODO.org
+++ b/TODO.org
@@ -8,7 +8,7 @@
*** DONE Ensure vehicles don't overlap
** DONE Detect collision with other vehicles
** DONE Make cars in different lanes drive at different speeds
-** DONE Add restart option
+** TODO Add restart option
** TODO Smooth acceleration
** TODO Smooth increasing turn rate
** TODO Display level on screen
diff --git a/turbo.scm b/turbo.scm
index 92c5103..1c32f01 100644
--- a/turbo.scm
+++ b/turbo.scm
@@ -31,7 +31,7 @@
(define player-max-speed 20)
(define player-rotation 0)
-(define level-difficulty 50)
+(define level-difficulty 1)
(define music-play? #t)
(define music-res (load-audio "music.ogg"))
@@ -77,9 +77,9 @@
(define (vehicle-has-spawn-space? vehicle)
(define (vehicle-in-the-way? v)
- (and (not (= (vehicle-id vehicle) (vehicle-id v)))
- (vehicle-inactive? v)
- (vehicle-safety-distance? v vehicle)))
+ (and (not (vehicle= vehicle v))
+ (vehicle-active? v)
+ (not (vehicle-safety-distance? v vehicle))))
(not (any vehicle-in-the-way? vehicles)))
@@ -198,18 +198,22 @@
(set-vehicle-position! player-car (vec2+ (vehicle-position player-car) player-velocity))
(for-each (lambda (veh)
- (vehicle-move! veh (vec2 (- 0 (vehicle-speed-diff player-car veh)) 0)))
+ (vehicle-move! veh (vec2 (- 0 (vehicle-speed- player-car veh)) 0)))
(filter vehicle-active? vehicles))
- ;; when vehicle goes off screen
+ ;; Reset vehicles that have gone off screen
(for-each vehicle-reset-ahead (filter vehicle-off-screen? vehicles))
+ ;; Randomly respawn vehicles based on level difficulty
(if (= 0 (random level-difficulty))
(begin
(let* ((inactive-vehicles (filter vehicle-inactive? vehicles))
(spawnable-vehicles (filter vehicle-has-spawn-space? inactive-vehicles)))
(if (not (null? spawnable-vehicles))
- (set-vehicle-active! (car spawnable-vehicles) #t)))))
+ (set-vehicle-active! (list-ref
+ spawnable-vehicles
+ (random (length spawnable-vehicles)))
+ #t)))))
;; End begin
)))
diff --git a/turbo/vehicles.scm b/turbo/vehicles.scm
index 68d6ced..940011e 100644
--- a/turbo/vehicles.scm
+++ b/turbo/vehicles.scm
@@ -18,8 +18,9 @@
set-vehicle-active!
vehicle-hitbox
vehicle-safety-distance?
- vehicle-speed-diff
- vehicle-move!))
+ vehicle-speed-
+ vehicle-move!
+ vehicle=))
(define vehicle-height 45)
(define vehicle-length 100)
@@ -49,8 +50,8 @@
(> (abs (- vehicle2-x vehicle1-x))
(+ (* 3 vehicle-length)))))
-(define (vehicle-speed-diff vehicle1 vehicle2)
- (abs (- (vehicle-speed vehicle1) (vehicle-speed vehicle2))))
+(define (vehicle-speed- vehicle1 vehicle2)
+ (- (vehicle-speed vehicle1) (vehicle-speed vehicle2)))
(define (vehicle-move! vehicle translation)
(set-vehicle-position!
@@ -59,3 +60,6 @@
(define (vehicle-inactive? vehicle)
(not (vehicle-active? vehicle)))
+
+(define (vehicle= vehicle1 vehicle2)
+ (= (vehicle-id vehicle1) (vehicle-id vehicle2)))