generated-text-input.lua
· 11 KiB · Lua
Eredeti
Playground
local min, max, huge = math.min, math.max, math.huge
local machine = {}
machine.counters = {
["run current frame"] = 0,
["step timer"] = 0,
["clear the screen"] = 0,
["draw scene"] = 0,
["present current frame"] = 0,
["sleep for 1ms"] = 0,
["next cycle"] = 0,
["run main loop"] = 1,
["@poll inputs"] = 0,
["@quit love"] = 0,
["@step timer"] = 0,
["@clear screen"] = 0,
["@text input"] = 0,
["@text received"] = 0,
["@quit"] = 0,
["@push text"] = 0,
["@draw buffer"] = 0,
["@present"] = 0,
["@is backspace pressed"] = 0,
["@backspace was pressed"] = 0,
["@delete character"] = 0,
["@is new line pressed"] = 0,
["@new line was pressed"] = 0,
["@insert new line"] = 0,
["handling inputs"] = 0,
["handle text input"] = 0,
["@exit code"] = 0,
["handle return or enter"] = 0,
["check for text input event"] = 0,
["push text to buffer"] = 0,
["check for backspace"] = 0,
["delete character from buffer"] = 0,
["check for new line"] = 0,
["insert new line"] = 0,
["@sleep"] = 0,
["drawing scene"] = 0,
["draw buffer"] = 0,
["handle backspace"] = 0,
["poll inputs"] = 0,
["handle inputs"] = 0,
}
function machine.on_poll_inputs(counters)
end
function machine.on_quit_love(counters)
end
function machine.on_step_timer(counters)
end
function machine.on_clear_screen(counters)
end
function machine.on_present(counters)
end
function machine.on_sleep(counters, sleep)
end
function machine.on_text_input(counters)
end
function machine.on_push_text_to_buffer(counters)
end
function machine.on_draw_buffer(counters)
end
function machine.on_is_backspace_pressed(counters)
end
function machine.on_delete_character(counters)
end
function machine.on_is_new_line_pressed(counters)
end
function machine.on_insert_new_line(counters)
end
function match(self, counters)
if counters["@poll inputs"] > 0 then
self.on_poll_inputs(counters)
counters["@poll inputs"] = 0
return true
end
if counters["@quit love"] > 0 then
counters["@exit code"] = self.on_quit_love(counters)
counters["@quit love"] = 0
return true
end
if counters["@step timer"] > 0 then
self.on_step_timer(counters)
counters["@step timer"] = 0
return true
end
if counters["@clear screen"] > 0 then
self.on_clear_screen(counters)
counters["@clear screen"] = 0
return true
end
if counters["@present"] > 0 then
self.on_present(counters)
counters["@present"] = 0
return true
end
if counters["@sleep"] > 0 then
self.on_sleep(counters, counters["@sleep"])
counters["@sleep"] = 0
return true
end
if counters["@text input"] > 0 then
counters["@text received"] = self.on_text_input(counters)
counters["@text input"] = 0
return true
end
if counters["@push text"] > 0 then
self.on_push_text_to_buffer(counters)
counters["@push text"] = 0
return true
end
if counters["@draw buffer"] > 0 then
self.on_draw_buffer(counters)
counters["@draw buffer"] = 0
return true
end
if counters["@is backspace pressed"] > 0 then
counters["@backspace was pressed"] = self.on_is_backspace_pressed(counters)
counters["@is backspace pressed"] = 0
return true
end
if counters["@delete character"] > 0 then
self.on_delete_character(counters)
counters["@delete character"] = 0
return true
end
if counters["@is new line pressed"] > 0 then
counters["@new line was pressed"] = self.on_is_new_line_pressed(counters)
counters["@is new line pressed"] = 0
return true
end
if counters["@insert new line"] > 0 then
self.on_insert_new_line(counters)
counters["@insert new line"] = 0
return true
end
if counters["handling inputs"] > 0 then
acc = counters["handling inputs"]
counters["handling inputs"] = max(counters["handling inputs"] - acc, 0)
counters["handle text input"] = counters["handle text input"] + acc * 1
counters["handle backspace"] = counters["handle backspace"] + acc * 1
counters["handle return or enter"] = counters["handle return or enter"] + acc * 1
return true
end
if counters["handle text input"] > 0 then
acc = counters["handle text input"]
counters["handle text input"] = max(counters["handle text input"] - acc, 0)
counters["check for text input event"] = counters["check for text input event"] + acc * 1
counters["push text to buffer"] = counters["push text to buffer"] + acc * 1
return true
end
if counters["check for text input event"] > 0 then
acc = counters["check for text input event"]
counters["check for text input event"] = max(counters["check for text input event"] - acc, 0)
counters["@text input"] = counters["@text input"] + acc * 1
return true
end
if counters["push text to buffer"] > 0 and counters["@text received"] > 0 then
local acc = huge
acc = min(acc, counters["@text received"])
acc = min(acc, counters["push text to buffer"])
counters["push text to buffer"] = max(counters["push text to buffer"] - acc, 0)
counters["@text received"] = max(counters["@text received"] - acc, 0)
counters["@push text"] = counters["@push text"] + acc * 1
counters["handle text input"] = counters["handle text input"] + acc * 1
return true
end
if counters["push text to buffer"] > 0 then
acc = counters["push text to buffer"]
counters["push text to buffer"] = max(counters["push text to buffer"] - acc, 0)
return true
end
if counters["handle backspace"] > 0 then
acc = counters["handle backspace"]
counters["handle backspace"] = max(counters["handle backspace"] - acc, 0)
counters["check for backspace"] = counters["check for backspace"] + acc * 1
counters["delete character from buffer"] = counters["delete character from buffer"] + acc * 1
return true
end
if counters["check for backspace"] > 0 then
acc = counters["check for backspace"]
counters["check for backspace"] = max(counters["check for backspace"] - acc, 0)
counters["@is backspace pressed"] = counters["@is backspace pressed"] + acc * 1
return true
end
if counters["delete character from buffer"] > 0 and counters["@backspace was pressed"] > 0 then
local acc = huge
acc = min(acc, counters["@backspace was pressed"])
acc = min(acc, counters["delete character from buffer"])
counters["delete character from buffer"] = max(counters["delete character from buffer"] - acc, 0)
counters["@backspace was pressed"] = max(counters["@backspace was pressed"] - acc, 0)
counters["@delete character"] = counters["@delete character"] + acc * 1
return true
end
if counters["delete character from buffer"] > 0 then
acc = counters["delete character from buffer"]
counters["delete character from buffer"] = max(counters["delete character from buffer"] - acc, 0)
return true
end
if counters["handle return or enter"] > 0 then
acc = counters["handle return or enter"]
counters["handle return or enter"] = max(counters["handle return or enter"] - acc, 0)
counters["check for new line"] = counters["check for new line"] + acc * 1
counters["insert new line"] = counters["insert new line"] + acc * 1
return true
end
if counters["check for new line"] > 0 then
acc = counters["check for new line"]
counters["check for new line"] = max(counters["check for new line"] - acc, 0)
counters["@is new line pressed"] = counters["@is new line pressed"] + acc * 1
return true
end
if counters["insert new line"] > 0 and counters["@new line was pressed"] > 0 then
local acc = huge
acc = min(acc, counters["@new line was pressed"])
acc = min(acc, counters["insert new line"])
counters["insert new line"] = max(counters["insert new line"] - acc, 0)
counters["@new line was pressed"] = max(counters["@new line was pressed"] - acc, 0)
counters["@insert new line"] = counters["@insert new line"] + acc * 1
return true
end
if counters["insert new line"] > 0 then
acc = counters["insert new line"]
counters["insert new line"] = max(counters["insert new line"] - acc, 0)
return true
end
if counters["drawing scene"] > 0 then
acc = counters["drawing scene"]
counters["drawing scene"] = max(counters["drawing scene"] - acc, 0)
counters["draw buffer"] = counters["draw buffer"] + acc * 1
return true
end
if counters["draw buffer"] > 0 then
acc = counters["draw buffer"]
counters["draw buffer"] = max(counters["draw buffer"] - acc, 0)
counters["@draw buffer"] = counters["@draw buffer"] + acc * 1
return true
end
if counters["run main loop"] > 0 then
acc = counters["run main loop"]
counters["run main loop"] = max(counters["run main loop"] - acc, 0)
counters["run current frame"] = counters["run current frame"] + acc * 1
counters["poll inputs"] = counters["poll inputs"] + acc * 1
counters["handle inputs"] = counters["handle inputs"] + acc * 1
return true
end
if counters["poll inputs"] > 0 then
acc = counters["poll inputs"]
counters["poll inputs"] = max(counters["poll inputs"] - acc, 0)
counters["@poll inputs"] = counters["@poll inputs"] + acc * 1
return true
end
if counters["handle inputs"] > 0 then
acc = counters["handle inputs"]
counters["handle inputs"] = max(counters["handle inputs"] - acc, 0)
counters["handling inputs"] = counters["handling inputs"] + acc * 1
return true
end
if counters["run current frame"] > 0 and counters["@quit"] > 0 then
local acc = huge
acc = min(acc, counters["run current frame"])
acc = min(acc, counters["@quit"])
counters["run current frame"] = max(counters["run current frame"] - acc, 0)
counters["@quit"] = max(counters["@quit"] - acc, 0)
counters["@quit love"] = counters["@quit love"] + acc * 1
return true
end
if counters["run current frame"] > 0 then
acc = counters["run current frame"]
counters["run current frame"] = max(counters["run current frame"] - acc, 0)
counters["step timer"] = counters["step timer"] + acc * 1
counters["clear the screen"] = counters["clear the screen"] + acc * 1
counters["draw scene"] = counters["draw scene"] + acc * 1
counters["present current frame"] = counters["present current frame"] + acc * 1
counters["sleep for 1ms"] = counters["sleep for 1ms"] + acc * 1
counters["next cycle"] = counters["next cycle"] + acc * 1
return true
end
if counters["step timer"] > 0 then
acc = counters["step timer"]
counters["step timer"] = max(counters["step timer"] - acc, 0)
counters["@step timer"] = counters["@step timer"] + acc * 1
return true
end
if counters["clear the screen"] > 0 then
acc = counters["clear the screen"]
counters["clear the screen"] = max(counters["clear the screen"] - acc, 0)
counters["@clear screen"] = counters["@clear screen"] + acc * 1
return true
end
if counters["draw scene"] > 0 then
acc = counters["draw scene"]
counters["draw scene"] = max(counters["draw scene"] - acc, 0)
counters["drawing scene"] = counters["drawing scene"] + acc * 1
return true
end
if counters["present current frame"] > 0 then
acc = counters["present current frame"]
counters["present current frame"] = max(counters["present current frame"] - acc, 0)
counters["@present"] = counters["@present"] + acc * 1
return true
end
if counters["sleep for 1ms"] > 0 then
acc = counters["sleep for 1ms"]
counters["sleep for 1ms"] = max(counters["sleep for 1ms"] - acc, 0)
counters["@sleep"] = counters["@sleep"] + acc * 1
return true
end
if counters["next cycle"] > 0 then
acc = counters["next cycle"]
counters["next cycle"] = max(counters["next cycle"] - acc, 0)
counters["run main loop"] = counters["run main loop"] + acc * 1
return true
end
return false
end
function machine:run()
local counters = self.counters
while match(self, counters) do end
end
return machine
1 | local min, max, huge = math.min, math.max, math.huge |
2 | local machine = {} |
3 | |
4 | machine.counters = { |
5 | ["run current frame"] = 0, |
6 | ["step timer"] = 0, |
7 | ["clear the screen"] = 0, |
8 | ["draw scene"] = 0, |
9 | ["present current frame"] = 0, |
10 | ["sleep for 1ms"] = 0, |
11 | ["next cycle"] = 0, |
12 | ["run main loop"] = 1, |
13 | ["@poll inputs"] = 0, |
14 | ["@quit love"] = 0, |
15 | ["@step timer"] = 0, |
16 | ["@clear screen"] = 0, |
17 | ["@text input"] = 0, |
18 | ["@text received"] = 0, |
19 | ["@quit"] = 0, |
20 | ["@push text"] = 0, |
21 | ["@draw buffer"] = 0, |
22 | ["@present"] = 0, |
23 | ["@is backspace pressed"] = 0, |
24 | ["@backspace was pressed"] = 0, |
25 | ["@delete character"] = 0, |
26 | ["@is new line pressed"] = 0, |
27 | ["@new line was pressed"] = 0, |
28 | ["@insert new line"] = 0, |
29 | ["handling inputs"] = 0, |
30 | ["handle text input"] = 0, |
31 | ["@exit code"] = 0, |
32 | ["handle return or enter"] = 0, |
33 | ["check for text input event"] = 0, |
34 | ["push text to buffer"] = 0, |
35 | ["check for backspace"] = 0, |
36 | ["delete character from buffer"] = 0, |
37 | ["check for new line"] = 0, |
38 | ["insert new line"] = 0, |
39 | ["@sleep"] = 0, |
40 | ["drawing scene"] = 0, |
41 | ["draw buffer"] = 0, |
42 | ["handle backspace"] = 0, |
43 | ["poll inputs"] = 0, |
44 | ["handle inputs"] = 0, |
45 | } |
46 | |
47 | function machine.on_poll_inputs(counters) |
48 | end |
49 | |
50 | function machine.on_quit_love(counters) |
51 | end |
52 | |
53 | function machine.on_step_timer(counters) |
54 | end |
55 | |
56 | function machine.on_clear_screen(counters) |
57 | end |
58 | |
59 | function machine.on_present(counters) |
60 | end |
61 | |
62 | function machine.on_sleep(counters, sleep) |
63 | end |
64 | |
65 | function machine.on_text_input(counters) |
66 | end |
67 | |
68 | function machine.on_push_text_to_buffer(counters) |
69 | end |
70 | |
71 | function machine.on_draw_buffer(counters) |
72 | end |
73 | |
74 | function machine.on_is_backspace_pressed(counters) |
75 | end |
76 | |
77 | function machine.on_delete_character(counters) |
78 | end |
79 | |
80 | function machine.on_is_new_line_pressed(counters) |
81 | end |
82 | |
83 | function machine.on_insert_new_line(counters) |
84 | end |
85 | |
86 | function match(self, counters) |
87 | if counters["@poll inputs"] > 0 then |
88 | self.on_poll_inputs(counters) |
89 | counters["@poll inputs"] = 0 |
90 | return true |
91 | end |
92 | if counters["@quit love"] > 0 then |
93 | counters["@exit code"] = self.on_quit_love(counters) |
94 | counters["@quit love"] = 0 |
95 | return true |
96 | end |
97 | if counters["@step timer"] > 0 then |
98 | self.on_step_timer(counters) |
99 | counters["@step timer"] = 0 |
100 | return true |
101 | end |
102 | if counters["@clear screen"] > 0 then |
103 | self.on_clear_screen(counters) |
104 | counters["@clear screen"] = 0 |
105 | return true |
106 | end |
107 | if counters["@present"] > 0 then |
108 | self.on_present(counters) |
109 | counters["@present"] = 0 |
110 | return true |
111 | end |
112 | if counters["@sleep"] > 0 then |
113 | self.on_sleep(counters, counters["@sleep"]) |
114 | counters["@sleep"] = 0 |
115 | return true |
116 | end |
117 | if counters["@text input"] > 0 then |
118 | counters["@text received"] = self.on_text_input(counters) |
119 | counters["@text input"] = 0 |
120 | return true |
121 | end |
122 | if counters["@push text"] > 0 then |
123 | self.on_push_text_to_buffer(counters) |
124 | counters["@push text"] = 0 |
125 | return true |
126 | end |
127 | if counters["@draw buffer"] > 0 then |
128 | self.on_draw_buffer(counters) |
129 | counters["@draw buffer"] = 0 |
130 | return true |
131 | end |
132 | if counters["@is backspace pressed"] > 0 then |
133 | counters["@backspace was pressed"] = self.on_is_backspace_pressed(counters) |
134 | counters["@is backspace pressed"] = 0 |
135 | return true |
136 | end |
137 | if counters["@delete character"] > 0 then |
138 | self.on_delete_character(counters) |
139 | counters["@delete character"] = 0 |
140 | return true |
141 | end |
142 | if counters["@is new line pressed"] > 0 then |
143 | counters["@new line was pressed"] = self.on_is_new_line_pressed(counters) |
144 | counters["@is new line pressed"] = 0 |
145 | return true |
146 | end |
147 | if counters["@insert new line"] > 0 then |
148 | self.on_insert_new_line(counters) |
149 | counters["@insert new line"] = 0 |
150 | return true |
151 | end |
152 | if counters["handling inputs"] > 0 then |
153 | acc = counters["handling inputs"] |
154 | counters["handling inputs"] = max(counters["handling inputs"] - acc, 0) |
155 | counters["handle text input"] = counters["handle text input"] + acc * 1 |
156 | counters["handle backspace"] = counters["handle backspace"] + acc * 1 |
157 | counters["handle return or enter"] = counters["handle return or enter"] + acc * 1 |
158 | return true |
159 | end |
160 | if counters["handle text input"] > 0 then |
161 | acc = counters["handle text input"] |
162 | counters["handle text input"] = max(counters["handle text input"] - acc, 0) |
163 | counters["check for text input event"] = counters["check for text input event"] + acc * 1 |
164 | counters["push text to buffer"] = counters["push text to buffer"] + acc * 1 |
165 | return true |
166 | end |
167 | if counters["check for text input event"] > 0 then |
168 | acc = counters["check for text input event"] |
169 | counters["check for text input event"] = max(counters["check for text input event"] - acc, 0) |
170 | counters["@text input"] = counters["@text input"] + acc * 1 |
171 | return true |
172 | end |
173 | if counters["push text to buffer"] > 0 and counters["@text received"] > 0 then |
174 | local acc = huge |
175 | acc = min(acc, counters["@text received"]) |
176 | acc = min(acc, counters["push text to buffer"]) |
177 | counters["push text to buffer"] = max(counters["push text to buffer"] - acc, 0) |
178 | counters["@text received"] = max(counters["@text received"] - acc, 0) |
179 | counters["@push text"] = counters["@push text"] + acc * 1 |
180 | counters["handle text input"] = counters["handle text input"] + acc * 1 |
181 | return true |
182 | end |
183 | if counters["push text to buffer"] > 0 then |
184 | acc = counters["push text to buffer"] |
185 | counters["push text to buffer"] = max(counters["push text to buffer"] - acc, 0) |
186 | return true |
187 | end |
188 | if counters["handle backspace"] > 0 then |
189 | acc = counters["handle backspace"] |
190 | counters["handle backspace"] = max(counters["handle backspace"] - acc, 0) |
191 | counters["check for backspace"] = counters["check for backspace"] + acc * 1 |
192 | counters["delete character from buffer"] = counters["delete character from buffer"] + acc * 1 |
193 | return true |
194 | end |
195 | if counters["check for backspace"] > 0 then |
196 | acc = counters["check for backspace"] |
197 | counters["check for backspace"] = max(counters["check for backspace"] - acc, 0) |
198 | counters["@is backspace pressed"] = counters["@is backspace pressed"] + acc * 1 |
199 | return true |
200 | end |
201 | if counters["delete character from buffer"] > 0 and counters["@backspace was pressed"] > 0 then |
202 | local acc = huge |
203 | acc = min(acc, counters["@backspace was pressed"]) |
204 | acc = min(acc, counters["delete character from buffer"]) |
205 | counters["delete character from buffer"] = max(counters["delete character from buffer"] - acc, 0) |
206 | counters["@backspace was pressed"] = max(counters["@backspace was pressed"] - acc, 0) |
207 | counters["@delete character"] = counters["@delete character"] + acc * 1 |
208 | return true |
209 | end |
210 | if counters["delete character from buffer"] > 0 then |
211 | acc = counters["delete character from buffer"] |
212 | counters["delete character from buffer"] = max(counters["delete character from buffer"] - acc, 0) |
213 | return true |
214 | end |
215 | if counters["handle return or enter"] > 0 then |
216 | acc = counters["handle return or enter"] |
217 | counters["handle return or enter"] = max(counters["handle return or enter"] - acc, 0) |
218 | counters["check for new line"] = counters["check for new line"] + acc * 1 |
219 | counters["insert new line"] = counters["insert new line"] + acc * 1 |
220 | return true |
221 | end |
222 | if counters["check for new line"] > 0 then |
223 | acc = counters["check for new line"] |
224 | counters["check for new line"] = max(counters["check for new line"] - acc, 0) |
225 | counters["@is new line pressed"] = counters["@is new line pressed"] + acc * 1 |
226 | return true |
227 | end |
228 | if counters["insert new line"] > 0 and counters["@new line was pressed"] > 0 then |
229 | local acc = huge |
230 | acc = min(acc, counters["@new line was pressed"]) |
231 | acc = min(acc, counters["insert new line"]) |
232 | counters["insert new line"] = max(counters["insert new line"] - acc, 0) |
233 | counters["@new line was pressed"] = max(counters["@new line was pressed"] - acc, 0) |
234 | counters["@insert new line"] = counters["@insert new line"] + acc * 1 |
235 | return true |
236 | end |
237 | if counters["insert new line"] > 0 then |
238 | acc = counters["insert new line"] |
239 | counters["insert new line"] = max(counters["insert new line"] - acc, 0) |
240 | return true |
241 | end |
242 | if counters["drawing scene"] > 0 then |
243 | acc = counters["drawing scene"] |
244 | counters["drawing scene"] = max(counters["drawing scene"] - acc, 0) |
245 | counters["draw buffer"] = counters["draw buffer"] + acc * 1 |
246 | return true |
247 | end |
248 | if counters["draw buffer"] > 0 then |
249 | acc = counters["draw buffer"] |
250 | counters["draw buffer"] = max(counters["draw buffer"] - acc, 0) |
251 | counters["@draw buffer"] = counters["@draw buffer"] + acc * 1 |
252 | return true |
253 | end |
254 | if counters["run main loop"] > 0 then |
255 | acc = counters["run main loop"] |
256 | counters["run main loop"] = max(counters["run main loop"] - acc, 0) |
257 | counters["run current frame"] = counters["run current frame"] + acc * 1 |
258 | counters["poll inputs"] = counters["poll inputs"] + acc * 1 |
259 | counters["handle inputs"] = counters["handle inputs"] + acc * 1 |
260 | return true |
261 | end |
262 | if counters["poll inputs"] > 0 then |
263 | acc = counters["poll inputs"] |
264 | counters["poll inputs"] = max(counters["poll inputs"] - acc, 0) |
265 | counters["@poll inputs"] = counters["@poll inputs"] + acc * 1 |
266 | return true |
267 | end |
268 | if counters["handle inputs"] > 0 then |
269 | acc = counters["handle inputs"] |
270 | counters["handle inputs"] = max(counters["handle inputs"] - acc, 0) |
271 | counters["handling inputs"] = counters["handling inputs"] + acc * 1 |
272 | return true |
273 | end |
274 | if counters["run current frame"] > 0 and counters["@quit"] > 0 then |
275 | local acc = huge |
276 | acc = min(acc, counters["run current frame"]) |
277 | acc = min(acc, counters["@quit"]) |
278 | counters["run current frame"] = max(counters["run current frame"] - acc, 0) |
279 | counters["@quit"] = max(counters["@quit"] - acc, 0) |
280 | counters["@quit love"] = counters["@quit love"] + acc * 1 |
281 | return true |
282 | end |
283 | if counters["run current frame"] > 0 then |
284 | acc = counters["run current frame"] |
285 | counters["run current frame"] = max(counters["run current frame"] - acc, 0) |
286 | counters["step timer"] = counters["step timer"] + acc * 1 |
287 | counters["clear the screen"] = counters["clear the screen"] + acc * 1 |
288 | counters["draw scene"] = counters["draw scene"] + acc * 1 |
289 | counters["present current frame"] = counters["present current frame"] + acc * 1 |
290 | counters["sleep for 1ms"] = counters["sleep for 1ms"] + acc * 1 |
291 | counters["next cycle"] = counters["next cycle"] + acc * 1 |
292 | return true |
293 | end |
294 | if counters["step timer"] > 0 then |
295 | acc = counters["step timer"] |
296 | counters["step timer"] = max(counters["step timer"] - acc, 0) |
297 | counters["@step timer"] = counters["@step timer"] + acc * 1 |
298 | return true |
299 | end |
300 | if counters["clear the screen"] > 0 then |
301 | acc = counters["clear the screen"] |
302 | counters["clear the screen"] = max(counters["clear the screen"] - acc, 0) |
303 | counters["@clear screen"] = counters["@clear screen"] + acc * 1 |
304 | return true |
305 | end |
306 | if counters["draw scene"] > 0 then |
307 | acc = counters["draw scene"] |
308 | counters["draw scene"] = max(counters["draw scene"] - acc, 0) |
309 | counters["drawing scene"] = counters["drawing scene"] + acc * 1 |
310 | return true |
311 | end |
312 | if counters["present current frame"] > 0 then |
313 | acc = counters["present current frame"] |
314 | counters["present current frame"] = max(counters["present current frame"] - acc, 0) |
315 | counters["@present"] = counters["@present"] + acc * 1 |
316 | return true |
317 | end |
318 | if counters["sleep for 1ms"] > 0 then |
319 | acc = counters["sleep for 1ms"] |
320 | counters["sleep for 1ms"] = max(counters["sleep for 1ms"] - acc, 0) |
321 | counters["@sleep"] = counters["@sleep"] + acc * 1 |
322 | return true |
323 | end |
324 | if counters["next cycle"] > 0 then |
325 | acc = counters["next cycle"] |
326 | counters["next cycle"] = max(counters["next cycle"] - acc, 0) |
327 | counters["run main loop"] = counters["run main loop"] + acc * 1 |
328 | return true |
329 | end |
330 | return false |
331 | end |
332 | |
333 | function machine:run() |
334 | local counters = self.counters |
335 | while match(self, counters) do end |
336 | end |
337 | |
338 | return machine |