diff --git a/two_player_cleaning_game/assets/objects.aseprite b/two_player_cleaning_game/assets/objects.aseprite index e8f42d9..8bbbbb8 100644 Binary files a/two_player_cleaning_game/assets/objects.aseprite and b/two_player_cleaning_game/assets/objects.aseprite differ diff --git a/two_player_cleaning_game/assets/objects.png b/two_player_cleaning_game/assets/objects.png index 5ce1136..0d85d3f 100644 Binary files a/two_player_cleaning_game/assets/objects.png and b/two_player_cleaning_game/assets/objects.png differ diff --git a/two_player_cleaning_game/main.fnl b/two_player_cleaning_game/main.fnl index 8803c83..4f3ca01 100644 --- a/two_player_cleaning_game/main.fnl +++ b/two_player_cleaning_game/main.fnl @@ -56,6 +56,9 @@ (print (fennel.view obj))) (local collider-debug-boxes []) +(lambda add-collider-debug-box [x y w h] + (table.insert collider-debug-boxes {: x : y :width w :height h})) + (local bump-world (bump.newWorld 25)) (local player { :x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0 }) @@ -87,33 +90,42 @@ (lambda create-charging-station [x y] (let [ - station {: x : y :type :charging-station} - pad1 {:x (- x 25) :y y :width 25 :height 25} - pad2 {:x (+ x 25) :y y :width 25 :height 25} - pad3 {:x x :y (+ y 25) :width 25 :height 25}] + station {: x : y :type :charging-station :active-pads {1 false 2 false 3 false}} + pads { + 1 {:x (- x 25) :y y :width 25 :height 25 :light-x (+ x 5)} + 3 {:x (+ x 25) :y y :width 25 :height 25 :light-x (+ x 5 6 6)} + 2 {:x x :y (+ y 25) :width 25 :height 25 :light-x (+ x 5 6)} + }] (bump-world:add {: x : y :name :charging-station :behavior :block} x y 25 25) - (table.insert collider-debug-boxes {: x : y :width 25 :height 25}) + (add-collider-debug-box x y 25 25) (fn station.draw [self] (reset-color) (love.graphics.draw objects.sprite objects.quads.charging-station self.x self.y) - (love.graphics.draw objects.sprite objects.quads.charging-pad pad1.x pad1.y) - (love.graphics.draw objects.sprite objects.quads.charging-pad pad2.x pad2.y) - (love.graphics.draw objects.sprite objects.quads.charging-pad pad3.x pad3.y) + (for [i 1 3 1] + (let [pad (. pads i)] + (if (. self.active-pads i) + (do (love.graphics.draw objects.sprite objects.quads.charging-pad-active pad.x pad.y) + (set-color :light-pink) + (love.graphics.rectangle "fill" pad.light-x (+ y 18) 2 2) + (reset-color)) + (love.graphics.draw objects.sprite objects.quads.charging-pad pad.x pad.y)))) ) (lambda pad-hover-cb [self dt] + (tset station.active-pads self.id true) (when (< player.battery 100) (set player.battery (+ player.battery (* dt 6))))) - (bump-world:add {: x : y :name :charging-pad :behavior :hover :hover-cb pad-hover-cb} (- x 25) y 25 25) - (table.insert collider-debug-boxes {:x (- x 25) : y :width 25 :height 25}) - (bump-world:add {: x : y :name :charging-pad :behavior :hover :hover-cb pad-hover-cb} (+ x 25) y 25 25) - (table.insert collider-debug-boxes {:x (+ x 25) : y :width 25 :height 25}) - (bump-world:add {: x : y :name :charging-pad :behavior :hover :hover-cb pad-hover-cb} x (+ y 25) 25 25) - (table.insert collider-debug-boxes {:x x :y (+ y 25) :width 25 :height 25}) + (lambda station.update [self _dt] + (set self.active-pads {1 false 2 false 3 false})) + (for [i 1 3 1] + (let [pad (. pads i)] + (bump-world:add {:name :charging-pad :behavior :hover :hover-cb pad-hover-cb :id i} pad.x pad.y 25 25) + (add-collider-debug-box pad.x pad.y 25 25))) (table.insert objects.list station))) (fn load-objects [] (set objects.sprite (love.graphics.newImage "assets/objects.png")) (let [(w h) (objects.sprite:getDimensions)] (set objects.quads.charging-pad (love.graphics.newQuad 0 0 25 25 w h)) + (set objects.quads.charging-pad-active (love.graphics.newQuad 50 0 25 25 w h)) (set objects.quads.charging-station (love.graphics.newQuad 25 0 25 25 w h))) (each [_ row (pairs (. levels :level01 :tiles))] @@ -182,6 +194,8 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start)) (fn love.update [dt] + (each [_ obj (pairs objects.list)] + (obj:update dt)) ; move / rotate player (let [ d-key (love.keyboard.isDown :d) @@ -203,17 +217,6 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start)) col-filter-fn (lambda [item other] (if (= other.behavior "block") :slide :cross)) (x y cols len) (bump-world:move player new-x new-y col-filter-fn)] - ; (each [_ col (pairs cols)] - ; (when (= col.other.behavior "hover") - ; (col.other:hover-cb dt) - ; (debug-print col) - - ; )) - - ; (debug-print col)) - ; (when (. col.other :hover-cb) - ; (col.other:hover-cb dt) - ; )) (tset player :x x) (tset player :y y)) (if (> player.battery 0)