From 5d6625fdd60192a3a9b1233b83f8087ff7012f15 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Tue, 14 Apr 2026 13:21:47 +0200 Subject: [PATCH] fix movement --- .../assets/battery_bar.aseprite | Bin 0 -> 450 bytes .../assets/battery_bar.png | Bin 0 -> 225 bytes two_player_cleaning_game/main.fnl | 56 ++++++++++-------- 3 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 two_player_cleaning_game/assets/battery_bar.aseprite create mode 100644 two_player_cleaning_game/assets/battery_bar.png diff --git a/two_player_cleaning_game/assets/battery_bar.aseprite b/two_player_cleaning_game/assets/battery_bar.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..ef1f0c415509cd9cd1db8f351b0be4204ea37cc7 GIT binary patch literal 450 zcmX@a$iVPmDIlWw&cFx~WDo#CS^y`Y>Aya*fNf;~S|A3*>S)?6{+h(vr^_wd&j$e+t&K#+{)QgroEq)yLR@vv!1$lc2E8n_TYZd z(x!X2iupaZweGr59jx_YZD9VDZ3W_0`ChDhO<(oi5_{+L-go7K?QVMmZy$<%u~$>{ q%e58eSN_}<9{e9)?@BIwDi+}HDlsf!#o$QB{@b>^d(sBU+ literal 0 HcmV?d00001 diff --git a/two_player_cleaning_game/assets/battery_bar.png b/two_player_cleaning_game/assets/battery_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..d4efcc9edb242f7cf94c2450b254981c5cffa613 GIT binary patch literal 225 zcmV<703QE|P)Px#n@L1LRA_0tS4u^3L7qF$aXA4%qMmsH_;K=#D30`4- zFriEFOafFgFPj|us-5x92N5@FSG=Pwj}OvoH{d@QwnDV!xtj*LKRTcaAG8a;(N?C> zwxQ|M6sF9}*4`=qXz>Q}pe-N2r2wpA+yI!wxB)PUaRXoy;|9Q_F2ytP6a=*#>!h84 bKX9X5rz$hv5PJB~00000NkvXXu0mjfb2(ZK literal 0 HcmV?d00001 diff --git a/two_player_cleaning_game/main.fnl b/two_player_cleaning_game/main.fnl index 007bb31..f031ac8 100644 --- a/two_player_cleaning_game/main.fnl +++ b/two_player_cleaning_game/main.fnl @@ -132,34 +132,42 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start)) (each [_ collider (pairs collider-debug-boxes)] (love.graphics.rectangle "line" collider.x collider.y collider.width collider.height)))) +(local has-true? (fn [lst] + (accumulate [found? false _ v (ipairs lst)] + (or found? v)))) + +; All true +(local all-true? (fn [lst] + (accumulate [result true _ v (ipairs lst)] + (and result v)))) + (fn love.update [dt] ; move / rotate player (let [ - d (love.keyboard.isDown :d) - a (love.keyboard.isDown :a) - e (love.keyboard.isDown :e) - q (love.keyboard.isDown :q)] - - (case [d a e q] - [true false false false] (tset player :rot (+ player.rot (* dt 2))) - [false true false false] (tset player :rot (- player.rot (* dt 2))) - [false false true false] (tset player :rot (- player.rot (* dt 2))) - [false false false true] (tset player :rot (+ player.rot (* dt 2))) - ) - - (if (or d a e q) - (let [ - dir-fn (if (or d a) #(+ $1 $2) #(- $1 $2)) - new-x (dir-fn player.x (* player.speed dt (math.cos player.rot))) - new-y (dir-fn player.y (* player.speed dt (math.sin player.rot))) - (x y) (bump-world:move player new-x new-y)] - (tset player :x x) - (tset player :y y)))) - + d-key (love.keyboard.isDown :d) + a-key (love.keyboard.isDown :a) + e-key (love.keyboard.isDown :e) + q-key (love.keyboard.isDown :q)] + ; (print (fennel.view {: d-key : a-key : e-key : q-key})) + (match {:d-key d-key :a-key a-key :e-key e-key :q-key q-key} + {:d-key true :a-key false :e-key false :q-key false} (tset player :rot (+ player.rot (* dt 2))) + {:d-key false :a-key true :e-key false :q-key false} (tset player :rot (- player.rot (* dt 2))) + {:d-key false :a-key false :e-key true :q-key false} (tset player :rot (- player.rot (* dt 2))) + {:d-key false :a-key false :e-key false :q-key true} (tset player :rot (+ player.rot (* dt 2))) + ) + (when (and (> player.battery 0) (or d-key a-key e-key q-key)) + (let [ + dir-fn (if (or d-key a-key) #(+ $1 $2) #(- $1 $2)) + new-x (dir-fn player.x (* player.speed dt (math.cos player.rot))) + new-y (dir-fn player.y (* player.speed dt (math.sin player.rot))) + (x y) (bump-world:move player new-x new-y)] + (tset player :x x) + (tset player :y y)) + (if (> player.battery 0) + (tset player :battery (- player.battery (* dt 2)))))) ;; Update camera to follow player (keep player centered on screen) (tset camera :x (- player.x (/ screen.canvas-w 2))) - (tset camera :y (- player.y (/ screen.canvas-h 2))) - ) + (tset camera :y (- player.y (/ screen.canvas-h 2)))) (fn draw-ui [] (love.graphics.push) @@ -171,7 +179,7 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start)) (love.graphics.draw ui-bg 0 0) (set-color :dark-purple) (love.graphics.setFont font) - (love.graphics.print "Battery:" 20 6) + (love.graphics.print (.. "Battery: " (string.format "%d" player.battery) "%") 6 6) (set-color :light-blue) (love.graphics.rectangle "fill" 72 12 (* 152 (/ player.battery 100)) 4) (love.graphics.setFont font-small)