blob: 4a9d26ebbbfbebd4f5c1c9b8e0af52347a96b4ec (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
(local lume (require :vendor.lume))
(local proto (require :lib.proto))
(local state (require :lib.state))
(local game (require :lib.game))
;; i am thinking we could actually do a really hacky thing (modules add themselves
;; to this list) with this later but
;; i'm not sure if it'd be worth it (it'd require those dependency loops maybe)
;; TODO: ^
(local hotswap-modules
[:lib.cells
:lib.game
:lib.main])
;; the
;; oh thats why it doesnt work lmao
(fn love.load []
(global the-state (state.init game))
(global messages {})
(print "a"))
(fn love.draw []
(match (pcall #(state.draw the-state))
(true x) nil
(false x) (do
(love.graphics.reset)
(print (.. "draw \n" x))
(love.graphics.print (.. "draw: \n" x))))
(love.graphics.reset)
(love.graphics.print (love.timer.getFPS))
(when true ;; debug stuff
(love.graphics.print (table.concat
(lume.map messages #$.msg)
"\n")
0
40)
(each [i v (lume.ripairs messages)]
(if (= v.ticks 0)
(table.remove messages i)
(set v.ticks (- v.ticks 1))))))
;; TODO: we need a better way to display errors at runtime for updates too
(fn love.update []
;; TODO: make state changes actually possible
(match (pcall #(state.update the-state))
(true x) nil
(false x) (do
(print (.. "update: \n" x))
(table.insert messages
{:ticks 1
:msg (.. "update: \n" x)}))))
(fn love.keypressed [key scancode repeat]
;; (print key scancode repeat)
(when (= key "r")
(each [k v (lume.ripairs messages)]
(when (= v.type :reload-error)
(table.remove messages k)))
(print (.. (if (love.keyboard.isDown :lshift) :hard :soft)
" reloading..."))
(each [_ v (ipairs hotswap-modules)]
(match (lume.hotswap v)
(nil x) (table.insert messages
{:ticks -1
:type :reload-error
:msg (.. "can't reload module " v "\n" x)})))
(when (love.keyboard.isDown :lshift)
(love.load))))
|