fix movement
This commit is contained in:
parent
8d4745832d
commit
5d6625fdd6
3 changed files with 32 additions and 24 deletions
BIN
two_player_cleaning_game/assets/battery_bar.aseprite
Normal file
BIN
two_player_cleaning_game/assets/battery_bar.aseprite
Normal file
Binary file not shown.
BIN
two_player_cleaning_game/assets/battery_bar.png
Normal file
BIN
two_player_cleaning_game/assets/battery_bar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 225 B |
|
|
@ -132,34 +132,42 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start))
|
||||||
(each [_ collider (pairs collider-debug-boxes)]
|
(each [_ collider (pairs collider-debug-boxes)]
|
||||||
(love.graphics.rectangle "line" collider.x collider.y collider.width collider.height))))
|
(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]
|
(fn love.update [dt]
|
||||||
; move / rotate player
|
; move / rotate player
|
||||||
(let [
|
(let [
|
||||||
d (love.keyboard.isDown :d)
|
d-key (love.keyboard.isDown :d)
|
||||||
a (love.keyboard.isDown :a)
|
a-key (love.keyboard.isDown :a)
|
||||||
e (love.keyboard.isDown :e)
|
e-key (love.keyboard.isDown :e)
|
||||||
q (love.keyboard.isDown :q)]
|
q-key (love.keyboard.isDown :q)]
|
||||||
|
; (print (fennel.view {: d-key : a-key : e-key : q-key}))
|
||||||
(case [d a e q]
|
(match {:d-key d-key :a-key a-key :e-key e-key :q-key q-key}
|
||||||
[true false false false] (tset player :rot (+ player.rot (* dt 2)))
|
{:d-key true :a-key false :e-key false :q-key false} (tset player :rot (+ player.rot (* dt 2)))
|
||||||
[false true false 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)))
|
||||||
[false false true 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)))
|
||||||
[false false false true] (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))
|
||||||
(if (or d a e q)
|
|
||||||
(let [
|
(let [
|
||||||
dir-fn (if (or d a) #(+ $1 $2) #(- $1 $2))
|
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-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)))
|
new-y (dir-fn player.y (* player.speed dt (math.sin player.rot)))
|
||||||
(x y) (bump-world:move player new-x new-y)]
|
(x y) (bump-world:move player new-x new-y)]
|
||||||
(tset player :x x)
|
(tset player :x x)
|
||||||
(tset player :y y))))
|
(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)
|
;; Update camera to follow player (keep player centered on screen)
|
||||||
(tset camera :x (- player.x (/ screen.canvas-w 2)))
|
(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 []
|
(fn draw-ui []
|
||||||
(love.graphics.push)
|
(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)
|
(love.graphics.draw ui-bg 0 0)
|
||||||
(set-color :dark-purple)
|
(set-color :dark-purple)
|
||||||
(love.graphics.setFont font)
|
(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)
|
(set-color :light-blue)
|
||||||
(love.graphics.rectangle "fill" 72 12 (* 152 (/ player.battery 100)) 4)
|
(love.graphics.rectangle "fill" 72 12 (* 152 (/ player.battery 100)) 4)
|
||||||
(love.graphics.setFont font-small)
|
(love.graphics.setFont font-small)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue