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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
----
-- löve Copilot entrypoint.
--
-- @classmod LoveCopilot
import CLICopilot from require 'alv.copilot.cli'
import T, Struct, Array from require 'alv.base'
export COPILOT
vec2 = Array 2, T.num
mouse_evt = Struct pos: vec2, button: T.num
class LoveCopilot extends CLICopilot
new: (arg) =>
table.remove arg, 1
super arg
@drawlist = {}
@mouse_pos = vec2\mk_sig { love.mouse.getPosition! }
@mouse_delta = vec2\mk_evt!
@mouse_presses = mouse_evt\mk_evt!
@mouse_releases = mouse_evt\mk_evt!
@wheel_delta = vec2\mk_evt!
@key_presses = T.str\mk_evt!
@key_releases = T.str\mk_evt!
@textinput = T.str\mk_evt!
w, h = love.window.getMode!
@window_size = vec2\mk_sig { w, h }
draw: =>
love.graphics.reset!
love.graphics.clear!
for id, list in pairs @drawlist
for fn in *list
fn!
love.graphics.present!
run: =>
@setup!
love.run = ->
return ->
love.event.pump!
did_tick = false
for name, a,b,c,d,e,f in love.event.poll!
COPILOT = @
switch name
when 'quit'
return a or 0
when 'mousemoved'
@mouse_pos\set { a, b }
@mouse_delta\set { c, d }, true
when 'mousepressed'
@mouse_presses\set { pos: { a, b }, button: c }, true
when 'mousereleased'
@mouse_releases\set { pos: { a, b }, button: c }, true
when 'wheelmoved'
@wheel_delta\set { a, b }, true
when 'keypressed'
@key_presses\set a, true
when 'textinput'
@textinput\set a, true
when 'keyreleased'
@key_releases\set a, true
when 'resize'
@window_size\set { a, b }
--else
-- print "unhandled: '#{name}'", a,b,c,d,e,f
COPILOT = nil
did_tick = true
@tick!
@tick! unless did_tick
@draw!
love.timer.sleep 0.001 if love.timer
{
:LoveCopilot
}
|