diff options
author | Gene Pasquet <dev@etenil.net> | 2024-05-23 17:38:19 +0100 |
---|---|---|
committer | Gene Pasquet <dev@etenil.net> | 2024-05-23 17:38:19 +0100 |
commit | 5f9856cdda5ce1c88494b658425dd50bd53967ca (patch) | |
tree | bb655d7841d96b710c7f6f229abd50b2f71b5a11 | |
parent | b0168b0c9524fe762a070aa252156c9d650595d3 (diff) |
Smooth out acceleration and braking
-rw-r--r-- | TODO.org | 4 | ||||
-rw-r--r-- | turbo.scm | 45 |
2 files changed, 32 insertions, 17 deletions
@@ -9,7 +9,7 @@ ** DONE Detect collision with other vehicles ** DONE Make cars in different lanes drive at different speeds ** DONE Add restart option -** TODO Smooth acceleration +** DONE Smooth acceleration ** TODO Smooth increasing turn rate ** TODO Display level on screen ** TODO Add weapon to player car @@ -19,4 +19,4 @@ ** TODO Improve visuals ** TODO Add start menu ** DONE Add music -** TODO Add sound effects +** STARTED Add sound effects @@ -27,9 +27,14 @@ (define vehicles-sprites (load-tileset "vehicles.png" vehicle-length vehicle-height)) (define player-velocity (vec2 0 0)) -(define player-min-speed 4) -(define player-max-speed 20) +(define player-min-speed 250) +(define player-max-speed 2000) (define player-rotation 0) +;; 2px/s/s acceleration +(define player-car-acceleration 100) +;; 4px/s/s deceleration +(define player-car-deceleration -500) +(define player-current-acceleration 0) (define level-difficulty 1) @@ -63,7 +68,7 @@ (let ((lane-num (random road-num-lanes))) (set-vehicle-position! veh (calculate-vehicle-position (+ 1 lane-num))) - (set-vehicle-speed! veh (+ player-min-speed lane-num) ) + (set-vehicle-speed! veh (+ player-min-speed (* 25 lane-num)) ) (set-vehicle-active! veh #f))) (define vehicles (make-vehicle-list (list) 0)) @@ -165,7 +170,7 @@ (define (vehicle-off-screen? veh) (and vehicle-active? - (>= (- 0 vehicle-length) (vec2-x (vehicle-position veh))))) + (>= (- vehicle-length) (vec2-x (vehicle-position veh))))) ;;;; Chickadee hooks @@ -184,6 +189,12 @@ (off-road-player) (set! game-over #t))) + (let ((new-speed (+ (vehicle-speed player-car) + (* player-current-acceleration interval)))) + (set-vehicle-speed! player-car (min player-max-speed + (max player-min-speed + new-speed)))) + (if (player-collides?) (begin (off-road-player) @@ -191,14 +202,15 @@ (set! game-over #t))) (set! road-section-position - (if (< road-section-position (- 0 lane-length)) - (- (+ road-section-position lane-length) (vehicle-speed player-car)) - (- road-section-position (vehicle-speed player-car)))) + (if (< road-section-position (- lane-length)) + (- (+ road-section-position lane-length) (* interval (vehicle-speed player-car))) + (- road-section-position (* interval (vehicle-speed player-car))))) - (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) player-velocity)) + (set-vehicle-position! player-car (vec2+ (vehicle-position player-car) + player-velocity)) (for-each (lambda (veh) - (vehicle-move! veh (vec2 (- 0 (vehicle-speed- player-car veh)) 0))) + (vehicle-move! veh (vec2 (- (* interval (vehicle-speed- player-car veh))) 0))) (filter vehicle-active? vehicles)) ;; Reset vehicles that have gone off screen @@ -230,8 +242,8 @@ (draw-sprite (vehicle-sprite veh) (vehicle-position veh))) (filter vehicle-active? vehicles)) - (draw-text (format #f "Speed: ~smph" (* (vehicle-speed player-car) 5)) - (vec2 450.0 20.0) + (draw-text (format #f "Speed: ~smph" (round (* (vehicle-speed player-car) 0.11187))) + (vec2 400.0 20.0) #:font the-font #:scale (vec2 2 2)) @@ -246,11 +258,11 @@ ((eq? key 'w) (set! player-velocity (vec2 0 vehicle-steering-speed))) ((eq? key 's) - (set! player-velocity (vec2 0 (- 0 vehicle-steering-speed)))) - ((eq? key 'a) - (set-player-speed! (- (vehicle-speed player-car) 1))) + (set! player-velocity (vec2 0 (- vehicle-steering-speed)))) ((eq? key 'd) - (set-player-speed! (+ (vehicle-speed player-car) 1))) + (set! player-current-acceleration player-car-acceleration)) + ((eq? key 'a) + (set! player-current-acceleration player-car-deceleration)) ((eq? key 'escape) (abort-game)) ((and (eq? key 'return) game-over) @@ -263,5 +275,8 @@ (set! game-over #f)))) (define (key-release key modifiers) + (cond + ((or (eq? key 'a) (eq? key 'd)) + (set! player-current-acceleration 0))) (if (or (eq? key 'w) (eq? key 's)) (set! player-velocity (vec2 0 0)))) |