(local bump (require "libs/bump")) (local color (require "src/colors.fnl")) (local nata (require "libs/nata")) (local utils (require "src/utils.fnl")) (local camera (require "src/systems/camera.fnl")) (local beholder (require "libs/beholder")) (local player (require "src/entities/player.fnl")) (local walls (require "src/systems/walls.fnl")) (local hud (require "src/systems/hud.fnl")) (local levels (require "levels.fnl")) (local info-pad (require "src/entities/info-pad.fnl")) (lambda load-objects [level-key pool] (each [_ object (pairs (. levels :levels level-key :objects))] ; (debug-print object) (case object.type "info_pad" (pool:queue (info-pad object)) )) ) (lambda collider-manager [bump-world] (local collider-manager {}) (lambda collider-manager.addToGroup [self group-name entity] (when (= group-name :hitbox) ; (utils.debug-print {:adding entity}) (bump-world:add entity (unpack entity.hitbox)))) collider-manager) ; (lambda register-notifications [] ; (beholder.observe "PLAYER.HIT" (lambda [other] ; (when (= other.object-type :info-pad) ; (beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward")) ; (utils.debug-print {: other})))) ; (beholder.observe "PLAYER.HIT" :info-pad (lambda [info-pad-name] ; (case info-pad-name ; :controls (beholder.trigger "NOTIFICATION" "[a] is left wheel forward [d] is right wheel forward") ; )))) (fn load [screen] ; (register-notifications) (let [ canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h) level-key :dev bump-world (bump.newWorld 25) pool (nata.new { :data { : screen : canvas : bump-world : level-key } :groups { ; gravity = {filter = {'gravity'}}, :hitbox {:filter [:hitbox]} ; :post-draw {:filter [:post-draw]} } :systems [ (nata:oop) (collider-manager bump-world) camera walls (hud {: screen}) ] })] (pool:queue (player {: bump-world : level-key})) (load-objects level-key pool) pool)) { : load }