edtris/game/mode.fnl

47 lines
1.4 KiB
Plaintext
Raw Normal View History

2021-04-11 03:39:42 +00:00
(local util (require :lib.util))
2021-02-07 21:56:19 +00:00
(local state (require :game.state))
(local map (require :game.tilemap))
(local rules (require :game.rules))
2022-04-24 23:39:15 +00:00
(local tiles (require :game.tiles))
(local dim (require :game.dim))
2021-04-11 03:39:42 +00:00
(local {: draw : update} (util.require :game.entity))
2021-02-07 21:56:19 +00:00
2022-04-25 01:26:00 +00:00
(fn exception-update []
(when (love.keyboard.isDown :f2)
(set state.update-exception nil)))
2022-04-25 01:26:00 +00:00
(fn wrap-call [thunk]
(if state.update-exception
2022-04-25 01:26:00 +00:00
(exception-update)
(xpcall thunk (fn [msg]
(set state.update-exception (.. msg "\n" (debug.traceback)))))))
2022-04-25 01:26:00 +00:00
(fn update [dt] (wrap-call #(rules.update dt)))
(fn game-draw []
2022-04-24 23:56:53 +00:00
(let [xnext (/ dim.tilesize 2)
xwell (* dim.tilesize 5)
current (rules.current-tetromino)]
(map.draw-tilemap xwell 0 state.well tiles.tetristile)
(map.draw-tilemap xnext dim.tilesize (rules.tetromino state.next-piece 1) tiles.tetristile)
(when current
(map.draw-tilemap (+ xwell (* state.current.x dim.tilesize)) (* state.current.y dim.tilesize) current tiles.tetristile))))
2021-02-07 21:56:19 +00:00
(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)))
2022-04-25 01:26:00 +00:00
(fn handler [ev ...]
(let [f (. rules ev)
args [...]]
(when f (wrap-call #(f (table.unpack args))))))
{: update : draw : handler}
2021-02-07 21:56:19 +00:00