diff --git a/two_player_cleaning_game/main.fnl b/two_player_cleaning_game/main.fnl index 1bf83c4..27ffc00 100644 --- a/two_player_cleaning_game/main.fnl +++ b/two_player_cleaning_game/main.fnl @@ -2,36 +2,15 @@ (local levels (. (require "levels.fnl") :levels)) (local bump (require "libs/bump")) (local tiny (require "libs/tiny")) -(local assets (require "assets.fnl")) +(local assets (require "src/assets.fnl")) +(local utils (require "src/utils.fnl")) +(local colors (require "src/colors.fnl")) +(local tutorial (require "src/levels/tutorial.fnl")) -(lambda debug-print [obj] - (print (fennel.view obj))) -(debug-print assets) +; (utils.debug-print assets) ; (local network (require "network.fnl")) -;; colors -; (lambda color [full-r full-g full-b] -; (let [(r g b) (love.math.colorFromBytes full-r full-g full-b)] -; [r g b] -; )) -; (local color-pallet { -; :cream (color 255 238 204) -; :dark-purple (color 70 66 94) -; :dark-pink (color 255 105 115) -; :dark-blue (color 21 120 140) -; :light-blue (color 0 185 190) -; :light-pink (color 255 176 163) -; :black [0 0 0] -; :black-half-tone [0 0 0 0.25] -; }) - -; (fn reset-color [] -; "reset color to white (no tinting)" -; (love.graphics.setColor 1 1 1)) - -; (lambda set-color [color] -; "set color to the given color from the color pallet" -; (love.graphics.setColor (unpack (. color-pallet color)))) +(var world nil) ;; global vars ; (var level-key "tutorial") @@ -49,16 +28,14 @@ ; :list [] ; }) -; (local screen -; (let [scale 2 canvas-w 800 canvas-h 450] -; { :screen-w (* canvas-w scale) -; :screen-h (* canvas-h scale) -; :canvas-w canvas-w -; :canvas-h canvas-h -; :scale scale -; :canvas nil})) -; (local camera {:x 0 :y 0}) -; (local debug true) +(local screen + (let [scale 2 canvas-w 800 canvas-h 450] + { :screen-w (* canvas-w scale) + :screen-h (* canvas-h scale) + :canvas-w canvas-w + :canvas-h canvas-h + :scale scale})) +(local debug true) ; (local collider-debug-boxes []) ; (lambda add-collider-debug-box [x y w h] @@ -194,18 +171,20 @@ ; ) -; (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") +(fn love.load [] + (love.window.setMode screen.screen-w screen.screen-h) + ; (tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)) + (set world (tutorial.load screen)) + (utils.debug-print world) + ; (load-assets) + ; (load-level :tutorial) + ;; Initialize network + ; (network.init) + ; (network.send-msg "REGISTER") -; ;; start a thread listening on stdin -; (: (love.thread.newThread "require('love.event') -; while 1 do love.event.push('stdin', io.read('*line')) end") :start)) + ;; start a thread listening on stdin + (: (love.thread.newThread "require('love.event') +while 1 do love.event.push('stdin', io.read('*line')) end") :start)) (fn love.handlers.stdin [line] ;; evaluate lines read from stdin as fennel code @@ -223,7 +202,10 @@ ; (love.graphics.rectangle "line" collider.x collider.y collider.width collider.height)))) -(fn love.update [dt] nil) +(fn love.update [dt] + (let [filter (tiny.requireAll :update)] + ; (utils.debug-print filter) + (tiny.update world dt filter))) ; (fn love.update [dt] ; (each [_ obj (pairs objects.list)] @@ -335,7 +317,11 @@ ; ; (print (fennel.view obj)) ; (obj:draw))) -(fn love.draw [] nil) +(fn love.draw [dt] + (tiny.update world dt (tiny.requireAll :pre-draw)) + (tiny.update world dt (tiny.requireAll :draw)) + ; (world:update dt (tiny.requireAll "post-draw")) + ) ; (fn love.draw [] ; (love.graphics.setCanvas screen.canvas) ; (love.graphics.clear) diff --git a/two_player_cleaning_game/map-util.fnl b/two_player_cleaning_game/map-util.fnl deleted file mode 100644 index 0ff9d4b..0000000 --- a/two_player_cleaning_game/map-util.fnl +++ /dev/null @@ -1,36 +0,0 @@ -(local name "travis") - -(local levels [ - {:image-path "assets/level_002.png" :player-start [10 19] :walls []} -]) - -; "20 x 20 array with the outter edge set to 1 (walls) and the inner edge set to 0 (floor)" -(local empty-level - (let [level []] - (for [y 0 19 1] (table.insert level [])) ; empty rows - (each [y row (ipairs level)] - (for [x 0 19 1] (table.insert row 0))) - level - ) -) - -(lambda load-walls [level] - (let [image-data (love.image.newImageData (. level :image-path))] - (each [y row (ipairs (. level :walls))] - (each [x wall (ipairs row)] - (let [(r g b) (image-data:getPixel (- x 1) (- y 1))] - ; (print (.. x "," y " -> " r "," g "," b)) - (tset row x (if (= (.. r g b) "111") 0 1))))))) - -(fn load [] - "load levels" - (each [_ level (pairs levels)] - (tset level :walls empty-level) - (load-walls level)) - ; (print (fennel.view levels)) - ) - -{ - :load load - :levels levels -} diff --git a/two_player_cleaning_game/assets.fnl b/two_player_cleaning_game/src/assets.fnl similarity index 95% rename from two_player_cleaning_game/assets.fnl rename to two_player_cleaning_game/src/assets.fnl index 8202a9d..8948c26 100644 --- a/two_player_cleaning_game/assets.fnl +++ b/two_player_cleaning_game/src/assets.fnl @@ -6,7 +6,4 @@ (set assets.battery-bar-sprite (love.graphics.newImage "assets/battery_bar.png")) (set assets.player-sprite (love.graphics.newImage "assets/player.png")) - -{ - : assets -} +assets diff --git a/two_player_cleaning_game/src/colors.fnl b/two_player_cleaning_game/src/colors.fnl new file mode 100644 index 0000000..049b680 --- /dev/null +++ b/two_player_cleaning_game/src/colors.fnl @@ -0,0 +1,30 @@ +;; colors +(lambda color [full-r full-g full-b] + (let [(r g b) (love.math.colorFromBytes full-r full-g full-b)] + [r g b] +)) + +(local colors { + :cream (color 255 238 204) + :dark-purple (color 70 66 94) + :dark-pink (color 255 105 115) + :dark-blue (color 21 120 140) + :light-blue (color 0 185 190) + :light-pink (color 255 176 163) + :black [0 0 0] + :black-half-tone [0 0 0 0.25] +}) + +(fn reset-color [] + "reset color to white (no tinting)" + (love.graphics.setColor 1 1 1)) + +(lambda set-color [color] + "set color to the given color from the color pallet" + (love.graphics.setColor (unpack (. colors color)))) + +{ + :reset-color reset-color + :set-color set-color + : colors +} diff --git a/two_player_cleaning_game/src/levels/tutorial.fnl b/two_player_cleaning_game/src/levels/tutorial.fnl new file mode 100644 index 0000000..4d659df --- /dev/null +++ b/two_player_cleaning_game/src/levels/tutorial.fnl @@ -0,0 +1,47 @@ +(local color (require "src/colors.fnl")) +(local tiny (require "libs/tiny")) +(local utils (require "src/utils.fnl")) + +(local level {}) + + +; function HudSystem:init(layerFlag) +; self.filter = tiny.requireAll("drawHud", layerFlag) +; end + +; function HudSystem:process(e, dt) +; e:drawHud(dt) +; end +(fn bg-render [screen] + (let [system (tiny.system {: screen})] + (fn system.draw [self] + (print "Drawing BG") + (color.set-color color.colors.cream) + (love.graphics.rectangle "fill" 0 0 self.screen.canvas-w self.screen.canvas-h)) + (utils.debug-print system) + system + )) + +(local root-render (tiny.system)) +(fn root-render.pre-draw [self] + (print "Pre-drawing root") + ; use canvas + (love.graphics.setCanvas level.canvas) + ; clear the screen + (love.graphics.clear)) + + +(local camera {:x 0 :y 0}) + +(local debug true) + +(fn load [screen] + (set level.canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)) + (tiny.world + root-render + (bg-render screen))) + + +{ + : load +} diff --git a/two_player_cleaning_game/network.fnl b/two_player_cleaning_game/src/network.fnl similarity index 100% rename from two_player_cleaning_game/network.fnl rename to two_player_cleaning_game/src/network.fnl diff --git a/two_player_cleaning_game/src/utils.fnl b/two_player_cleaning_game/src/utils.fnl new file mode 100644 index 0000000..b116641 --- /dev/null +++ b/two_player_cleaning_game/src/utils.fnl @@ -0,0 +1,6 @@ +(lambda debug-print [obj] + (print (fennel.view obj))) + +{ + : debug-print +}