move objects out of bg tiles

"
Press any key to quit" 10 10))
This commit is contained in:
Travis Shears 2026-04-18 14:12:07 +02:00
parent 32ea10495e
commit bbbe7bfe8a
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
14 changed files with 400 additions and 89 deletions

View file

@ -1,6 +1,7 @@
;; deps
(local levels (. (require "levels.fnl") :levels))
(local bump (require "bump"))
(local network (require "network.fnl"))
;; colors
(lambda color [full-r full-g full-b]
@ -28,6 +29,7 @@
(love.graphics.setColor (unpack (. color-pallet color))))
;; global vars
(var level-key "tutorial")
(var player-art nil) ; 25x50 pixels each player is 25x25
(var dust-sprite nil) ; 35x35 pixels
(var battery-bar-sprite nil)
@ -59,24 +61,24 @@
(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))
(var bump-world nil)
(local player { :x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0 })
(fn load-walls []
(set walls.sprite (love.graphics.newImage "assets/walls.png"))
(set walls.batch (love.graphics.newSpriteBatch walls.sprite 2500))
;; load quads
(let [(w h) (walls.sprite:getDimensions)]
(for [i 0 19 1]
(table.insert walls.quads (love.graphics.newQuad (* i 25) 0 25 25 w h))))
;; fill batch
(each [_ row (pairs (. levels :level01 :tiles))]
;;
(each [_ row (pairs (. levels :levels level-key :tiles))]
(each [_ tile (pairs row)]
(let [
x tile.x
y tile.y
id tile.tile-id
colliders (or (. levels.level01.wall-colliders (- id 1)) [])]
colliders tile.colliders]
(if (and (> id 0) (< id 21)) ;; 1-20 are wall tiles
(do
; (print (fennel.view {:quad (. walls.quads id) : x : y : id}))
@ -122,13 +124,12 @@
(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))]
(each [_ row (pairs (. levels :levels level-key :tiles))]
(each [_ tile (pairs row)]
(let [
x tile.x
@ -137,18 +138,24 @@
(when (> id 20) ;; 21+ are object tiles
(when (= id 22) (create-charging-station x y)))))))
(fn load-player []
(set player.battery 100)
(set player.x (. levels :levels level-key :spawns :player-1 :x))
(set player.y (. levels :levels level-key :spawns :player-1 :y))
(bump-world:add player player.x player.y player.w player.h))
(fn love.load []
(love.window.setMode screen.screen-w screen.screen-h)
(tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h))
(bump-world:add player player.x player.y player.w player.h)
(lambda load-level [lvl-name]
(set bump-world (bump.newWorld 25))
(set level-key :tutorial)
;; set player 1 location
(load-player)
(load-walls)
(load-objects)
(load-objects))
;; load world images
(fn load-assets []
(set objects.sprite (love.graphics.newImage "assets/objects.png"))
(set walls.sprite (love.graphics.newImage "assets/walls.png"))
(set battery-bar-sprite (love.graphics.newImage "assets/battery_bar.png"))
(set player-art
(let [
player-sprite (love.graphics.newImage "assets/player.png")
@ -169,9 +176,18 @@
}
}
))
)
(fn love.load []
(love.window.setMode screen.screen-w screen.screen-h)
(tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h))
(load-assets)
(load-level :tutorial)
;; Initialize network
(network.init)
(network.send-msg "REGISTER")
(set dust-sprite (love.graphics.newImage "assets/dust_001.png"))
; (print (fennel.view game-state))
;; start a thread listening on stdin
(: (love.thread.newThread "require('love.event')
while 1 do love.event.push('stdin', io.read('*line')) end") :start))
@ -182,7 +198,6 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start))
(print (if ok (fennel.view val) val))))
;; drawing
(fn draw-world []
(reset-color)
(love.graphics.draw walls.batch)
@ -228,7 +243,15 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start))
(let
[(items len) (bump-world:queryRect player.x player.y 25 25 #(= $1.behavior "hover"))]
(each [_ item (pairs items)]
(item:hover-cb dt))))
(item:hover-cb dt)))
;; Network updates
(network.update dt))
; (set net-state.net-update-timer (+ net-state.net-update-timer dt))
; (when (>= net-state.net-update-timer net-state.net-update-interval)
; (when net-state.connected
; (network.send-update player.x player.y player.rot player.battery))
; (set net-state.net-update-timer 0)))
(fn draw-ui []
(love.graphics.push)
@ -313,3 +336,8 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start))
; (love.graphics.print "Hello from Fennel!\nPress any key to quit" 10 10))
(fn love.keypressed [key] nil )
(fn love.quit []
"Clean up before game closes"
(network.close)
false)