fix movement
This commit is contained in:
parent
8d4745832d
commit
5d6625fdd6
3 changed files with 32 additions and 24 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue