edtris/game/mode.fnl
2022-04-24 19:39:15 -04:00

37 lines
1.1 KiB
Fennel

(local util (require :lib.util))
(local state (require :game.state))
(local map (require :game.tilemap))
(local rules (require :game.rules))
(local tiles (require :game.tiles))
(local dim (require :game.dim))
(local {: draw : update} (util.require :game.entity))
(fn game-update [dt])
(fn exception-update [dt]
(when (love.keyboard.isDown :f2)
(set state.update-exception nil)))
(fn update [dt]
(if state.update-exception
(exception-update dt)
(xpcall #(game-update dt) (fn [msg]
(set state.update-exception (.. msg "\n" (debug.traceback)))))))
(fn game-draw []
(map.draw-tilemap (* dim.tilesize 5) 0 state.well tiles.tetristile)
(map.draw-tilemap (/ dim.tilesize 2) dim.tilesize (rules.tetromino state.next-piece 1) tiles.tetristile))
(fn exception-draw []
(love.graphics.setColor 1 0 0 1)
(love.graphics.setNewFont 14)
(love.graphics.printf (.. "Press F2 when resolved\n" state.update-exception) 20 20 (- (love.graphics.getWidth) 40)))
(fn draw []
(if state.update-exception
(exception-draw)
(game-draw)))
{: update : draw}