mt-lang 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/docs/index.html +4 -3
  3. data/lib/milk_tea/base.rb +1 -1
  4. data/std/asset_pack.mt +267 -0
  5. data/std/async/libuv_runtime.mt +539 -0
  6. data/std/async/mailbox.mt +191 -0
  7. data/std/async/runtime.mt +87 -0
  8. data/std/async.mt +87 -0
  9. data/std/base64.mt +185 -0
  10. data/std/behavior_tree.mt +396 -0
  11. data/std/binary.mt +314 -0
  12. data/std/binary_heap.mt +157 -0
  13. data/std/bitset.mt +239 -0
  14. data/std/box2d.mt +535 -0
  15. data/std/bytes.mt +46 -0
  16. data/std/c/box2d.mt +1254 -0
  17. data/std/c/cgltf.mt +647 -0
  18. data/std/c/cjson.mt +106 -0
  19. data/std/c/crypto.mt +11 -0
  20. data/std/c/crypto_support.h +51 -0
  21. data/std/c/ctype.mt +19 -0
  22. data/std/c/ctype_bindgen.h +29 -0
  23. data/std/c/curl.mt +1223 -0
  24. data/std/c/enet.mt +473 -0
  25. data/std/c/errno.mt +41 -0
  26. data/std/c/errno_bindgen.h +53 -0
  27. data/std/c/flecs.mt +2945 -0
  28. data/std/c/fs.linux.mt +43 -0
  29. data/std/c/fs.windows.mt +43 -0
  30. data/std/c/fs_support.h +954 -0
  31. data/std/c/gl.mt +2065 -0
  32. data/std/c/gl_registry_helpers.h +10748 -0
  33. data/std/c/glfw.mt +499 -0
  34. data/std/c/libc.mt +167 -0
  35. data/std/c/libuv.mt +1491 -0
  36. data/std/c/math.mt +22 -0
  37. data/std/c/math_bindgen.h +31 -0
  38. data/std/c/miniaudio.mt +3420 -0
  39. data/std/c/pcre2.mt +735 -0
  40. data/std/c/process.mt +58 -0
  41. data/std/c/process_support.h +1147 -0
  42. data/std/c/raygui.mt +1602 -0
  43. data/std/c/raylib.mt +1245 -0
  44. data/std/c/raymath.mt +163 -0
  45. data/std/c/rlgl.mt +434 -0
  46. data/std/c/rpng.mt +60 -0
  47. data/std/c/rres.mt +187 -0
  48. data/std/c/sdl3.mt +4132 -0
  49. data/std/c/sqlite3.mt +951 -0
  50. data/std/c/stb_image.mt +52 -0
  51. data/std/c/stb_image_resize2.mt +128 -0
  52. data/std/c/stb_image_write.mt +19 -0
  53. data/std/c/stb_rect_pack.mt +38 -0
  54. data/std/c/stb_truetype.mt +175 -0
  55. data/std/c/stb_vorbis.mt +31 -0
  56. data/std/c/stdio.mt +90 -0
  57. data/std/c/steamworks.h +5769 -0
  58. data/std/c/steamworks.mt +4771 -0
  59. data/std/c/string.mt +16 -0
  60. data/std/c/string_bindgen.h +36 -0
  61. data/std/c/sync.mt +33 -0
  62. data/std/c/sync_support.h +219 -0
  63. data/std/c/terminal.mt +24 -0
  64. data/std/c/terminal_support.h +408 -0
  65. data/std/c/time.mt +26 -0
  66. data/std/c/tls.mt +24 -0
  67. data/std/c/tls_support.h +626 -0
  68. data/std/c/tracy.mt +53 -0
  69. data/std/c/zlib.mt +20 -0
  70. data/std/c/zlib_support.h +239 -0
  71. data/std/c/zstd.mt +231 -0
  72. data/std/cell.mt +60 -0
  73. data/std/cgltf.mt +115 -0
  74. data/std/cjson.mt +90 -0
  75. data/std/cli.mt +768 -0
  76. data/std/cookie.mt +198 -0
  77. data/std/counter.mt +160 -0
  78. data/std/crypto.mt +74 -0
  79. data/std/cstring.mt +13 -0
  80. data/std/ctype.mt +52 -0
  81. data/std/curl/runtime.mt +261 -0
  82. data/std/curl.mt +38 -0
  83. data/std/deque.mt +348 -0
  84. data/std/encoding.mt +93 -0
  85. data/std/enet.mt +133 -0
  86. data/std/env.mt +41 -0
  87. data/std/errno.mt +47 -0
  88. data/std/flecs.mt +978 -0
  89. data/std/fmt.mt +271 -0
  90. data/std/fs.linux.mt +696 -0
  91. data/std/fs.windows.mt +711 -0
  92. data/std/fsm.mt +267 -0
  93. data/std/gl.mt +2062 -0
  94. data/std/glfw.mt +471 -0
  95. data/std/goap.mt +342 -0
  96. data/std/graph.mt +521 -0
  97. data/std/gzip.mt +77 -0
  98. data/std/hash.mt +429 -0
  99. data/std/http/server.mt +810 -0
  100. data/std/http.mt +1227 -0
  101. data/std/intern.mt +53 -0
  102. data/std/jobs.mt +288 -0
  103. data/std/json.mt +627 -0
  104. data/std/libc.mt +34 -0
  105. data/std/libuv.mt +554 -0
  106. data/std/linear_algebra.mt +243 -0
  107. data/std/linked_map.mt +372 -0
  108. data/std/linked_map_view.mt +49 -0
  109. data/std/linked_set.mt +117 -0
  110. data/std/log.mt +69 -0
  111. data/std/map.mt +418 -0
  112. data/std/math.mt +24 -0
  113. data/std/mem/arena.mt +137 -0
  114. data/std/mem/endian.mt +51 -0
  115. data/std/mem/heap.mt +298 -0
  116. data/std/mem/pool.mt +164 -0
  117. data/std/mem/stack.mt +47 -0
  118. data/std/mem/tracking.mt +119 -0
  119. data/std/miniaudio.mt +1299 -0
  120. data/std/multiset.mt +191 -0
  121. data/std/net/channel.mt +727 -0
  122. data/std/net/clock.mt +237 -0
  123. data/std/net/discovery.mt +277 -0
  124. data/std/net/lobby.mt +813 -0
  125. data/std/net/manager.mt +539 -0
  126. data/std/net/mux.mt +839 -0
  127. data/std/net/nat.mt +122 -0
  128. data/std/net/packet.mt +219 -0
  129. data/std/net/punch.mt +162 -0
  130. data/std/net/rpc.mt +119 -0
  131. data/std/net/session.mt +1157 -0
  132. data/std/net/stun.mt +252 -0
  133. data/std/net/sync.mt +183 -0
  134. data/std/net/turn.mt +459 -0
  135. data/std/net.mt +2944 -0
  136. data/std/oauth2.mt +408 -0
  137. data/std/option.mt +51 -0
  138. data/std/ordered_map.mt +497 -0
  139. data/std/ordered_set.mt +348 -0
  140. data/std/path.mt +368 -0
  141. data/std/pcre2/runtime.mt +35 -0
  142. data/std/pcre2.mt +78 -0
  143. data/std/priority_queue.mt +55 -0
  144. data/std/process.mt +837 -0
  145. data/std/queue.mt +55 -0
  146. data/std/random.mt +146 -0
  147. data/std/raygui.mt +99 -0
  148. data/std/raylib/debug_console.mt +71 -0
  149. data/std/raylib/easing.mt +388 -0
  150. data/std/raylib/packed_assets.mt +255 -0
  151. data/std/raylib/runtime.mt +30 -0
  152. data/std/raylib/tracy_gpu.mt +37 -0
  153. data/std/raylib.mt +1510 -0
  154. data/std/raymath.mt +153 -0
  155. data/std/result.mt +89 -0
  156. data/std/rlgl.mt +268 -0
  157. data/std/rpng.mt +46 -0
  158. data/std/rres.mt +36 -0
  159. data/std/sdl3/runtime.mt +54 -0
  160. data/std/sdl3.mt +1731 -0
  161. data/std/serialize.mt +68 -0
  162. data/std/set.mt +124 -0
  163. data/std/spatial.mt +176 -0
  164. data/std/sqlite3.mt +151 -0
  165. data/std/stack.mt +55 -0
  166. data/std/stb_image.mt +47 -0
  167. data/std/stb_image_resize2.mt +41 -0
  168. data/std/stb_image_write.mt +17 -0
  169. data/std/stb_rect_pack.mt +15 -0
  170. data/std/stb_truetype.mt +77 -0
  171. data/std/stb_vorbis.mt +16 -0
  172. data/std/stdio.mt +88 -0
  173. data/std/steamworks.mt +1542 -0
  174. data/std/str.mt +293 -0
  175. data/std/string.mt +234 -0
  176. data/std/sync.mt +194 -0
  177. data/std/tar.mt +704 -0
  178. data/std/terminal.mt +1002 -0
  179. data/std/testing.mt +266 -0
  180. data/std/thread.mt +120 -0
  181. data/std/time.mt +105 -0
  182. data/std/tls.mt +616 -0
  183. data/std/toml.mt +1310 -0
  184. data/std/tracy.mt +42 -0
  185. data/std/uri.mt +118 -0
  186. data/std/url.mt +372 -0
  187. data/std/vec.mt +433 -0
  188. data/std/zstd.mt +94 -0
  189. metadata +187 -2
data/std/fsm.mt ADDED
@@ -0,0 +1,267 @@
1
+ import std.vec as vec
2
+
3
+ public enum DispatchKind: ubyte
4
+ ignored = 0
5
+ transitioned = 1
6
+
7
+ public struct DispatchResult[State]:
8
+ kind: DispatchKind
9
+ previous_state: State
10
+ current_state: State
11
+
12
+ public struct Transition[State, Event, Context]:
13
+ from_state: State
14
+ input: Event
15
+ to_state: State
16
+ guard: fn(context: ptr[Context], input: Event, current_state: State, next_state: State) -> bool
17
+ action: fn(context: ptr[Context], input: Event, previous_state: State, next_state: State) -> void
18
+
19
+ public struct StateHooks[State, Context]:
20
+ state: State
21
+ on_enter: fn(context: ptr[Context], state: State) -> void
22
+ on_exit: fn(context: ptr[Context], state: State) -> void
23
+ on_update: fn(context: ptr[Context], state: State) -> void
24
+
25
+ public struct StateMachine[State, Event, Context]:
26
+ current_state: State
27
+ transitions: vec.Vec[Transition[State, Event, Context]]
28
+ hooks: vec.Vec[StateHooks[State, Context]]
29
+ states_equal: fn(left: State, right: State) -> bool
30
+ events_equal: fn(left: Event, right: Event) -> bool
31
+
32
+
33
+ function always_allow_transition[State, Event, Context](
34
+ _context: ptr[Context],
35
+ _input: Event,
36
+ _current_state: State,
37
+ _next_state: State
38
+ ) -> bool:
39
+ return true
40
+
41
+
42
+ function noop_transition_action[State, Event, Context](
43
+ _context: ptr[Context],
44
+ _input: Event,
45
+ _previous_state: State,
46
+ _next_state: State
47
+ ) -> void:
48
+ pass
49
+
50
+
51
+ function noop_state_hook[State, Context](_context: ptr[Context], _state: State) -> void:
52
+ pass
53
+
54
+
55
+ function find_state_hooks[State, Event, Context](
56
+ machine: ref[StateMachine[State, Event, Context]],
57
+ state: State
58
+ ) -> ptr[StateHooks[State, Context]]?:
59
+ for entry in machine.hooks:
60
+ unsafe:
61
+ let current = read(entry)
62
+ if machine.states_equal(current.state, state):
63
+ return entry
64
+
65
+ return null
66
+
67
+
68
+ extending DispatchResult[State]:
69
+ public function did_transition() -> bool:
70
+ return this.kind == DispatchKind.transitioned
71
+
72
+
73
+ extending Transition[State, Event, Context]:
74
+ public static function create(
75
+ from_state: State,
76
+ input: Event,
77
+ to_state: State,
78
+ guard: fn(context: ptr[Context], input: Event, current_state: State, next_state: State) -> bool,
79
+ action: fn(context: ptr[Context], input: Event, previous_state: State, next_state: State) -> void
80
+ ) -> Transition[State, Event, Context]:
81
+ return Transition[State, Event, Context](
82
+ from_state = from_state,
83
+ input = input,
84
+ to_state = to_state,
85
+ guard = guard,
86
+ action = action
87
+ )
88
+
89
+
90
+ public static function always(
91
+ from_state: State,
92
+ input: Event,
93
+ to_state: State,
94
+ action: fn(context: ptr[Context], input: Event, previous_state: State, next_state: State) -> void
95
+ ) -> Transition[State, Event, Context]:
96
+ return Transition[State, Event, Context].create(
97
+ from_state,
98
+ input,
99
+ to_state,
100
+ always_allow_transition[State, Event, Context],
101
+ action
102
+ )
103
+
104
+
105
+ public static function simple(
106
+ from_state: State,
107
+ input: Event,
108
+ to_state: State
109
+ ) -> Transition[State, Event, Context]:
110
+ return Transition[State, Event, Context].create(
111
+ from_state,
112
+ input,
113
+ to_state,
114
+ always_allow_transition[State, Event, Context],
115
+ noop_transition_action[State, Event, Context]
116
+ )
117
+
118
+
119
+ extending StateHooks[State, Context]:
120
+ public static function create(
121
+ state: State,
122
+ on_enter: fn(context: ptr[Context], state: State) -> void,
123
+ on_exit: fn(context: ptr[Context], state: State) -> void,
124
+ on_update: fn(context: ptr[Context], state: State) -> void
125
+ ) -> StateHooks[State, Context]:
126
+ return StateHooks[State, Context](
127
+ state = state,
128
+ on_enter = on_enter,
129
+ on_exit = on_exit,
130
+ on_update = on_update
131
+ )
132
+
133
+
134
+ public static function noop(state: State) -> StateHooks[State, Context]:
135
+ return StateHooks[State, Context].create(
136
+ state,
137
+ noop_state_hook[State, Context],
138
+ noop_state_hook[State, Context],
139
+ noop_state_hook[State, Context]
140
+ )
141
+
142
+
143
+ extending StateMachine[State, Event, Context]:
144
+ public static function create(
145
+ initial_state: State,
146
+ states_equal: fn(left: State, right: State) -> bool,
147
+ events_equal: fn(left: Event, right: Event) -> bool
148
+ ) -> StateMachine[State, Event, Context]:
149
+ return StateMachine[State, Event, Context](
150
+ current_state = initial_state,
151
+ transitions = vec.Vec[Transition[State, Event, Context]].create(),
152
+ hooks = vec.Vec[StateHooks[State, Context]].create(),
153
+ states_equal = states_equal,
154
+ events_equal = events_equal
155
+ )
156
+
157
+
158
+ public editable function release() -> void:
159
+ this.transitions.release()
160
+ this.hooks.release()
161
+
162
+
163
+ public function state() -> State:
164
+ return this.current_state
165
+
166
+
167
+ public function transitions_len() -> ptr_uint:
168
+ return this.transitions.len()
169
+
170
+
171
+ public function hooks_len() -> ptr_uint:
172
+ return this.hooks.len()
173
+
174
+
175
+ public function is_in_state(state: State) -> bool:
176
+ return this.states_equal(this.current_state, state)
177
+
178
+
179
+ public editable function add_transition(transition: Transition[State, Event, Context]) -> void:
180
+ this.transitions.push(transition)
181
+
182
+
183
+ public editable function add_state_hooks(hooks: StateHooks[State, Context]) -> void:
184
+ let existing = find_state_hooks(ref_of(this), hooks.state)
185
+ if existing != null:
186
+ unsafe:
187
+ read(ptr[StateHooks[State, Context]]<-existing) = hooks
188
+ return
189
+
190
+ this.hooks.push(hooks)
191
+
192
+
193
+ public editable function tick(context: ref[Context]) -> void:
194
+ let maybe_hooks = find_state_hooks(ref_of(this), this.current_state) else:
195
+ return
196
+
197
+ unsafe:
198
+ let hooks = read(ptr[StateHooks[State, Context]]<-maybe_hooks)
199
+ hooks.on_update(ptr_of(context), this.current_state)
200
+
201
+
202
+ public editable function set_state(context: ref[Context], next_state: State) -> DispatchResult[State]:
203
+ let previous_state = this.current_state
204
+ if this.states_equal(previous_state, next_state):
205
+ return DispatchResult[State](
206
+ kind = DispatchKind.ignored,
207
+ previous_state = previous_state,
208
+ current_state = previous_state
209
+ )
210
+
211
+ let previous_hooks = find_state_hooks(ref_of(this), previous_state)
212
+ if previous_hooks != null:
213
+ unsafe:
214
+ let hooks = read(ptr[StateHooks[State, Context]]<-previous_hooks)
215
+ hooks.on_exit(ptr_of(context), previous_state)
216
+
217
+ this.current_state = next_state
218
+
219
+ let next_hooks = find_state_hooks(ref_of(this), next_state)
220
+ if next_hooks != null:
221
+ unsafe:
222
+ let hooks = read(ptr[StateHooks[State, Context]]<-next_hooks)
223
+ hooks.on_enter(ptr_of(context), next_state)
224
+
225
+ return DispatchResult[State](
226
+ kind = DispatchKind.transitioned,
227
+ previous_state = previous_state,
228
+ current_state = next_state
229
+ )
230
+
231
+
232
+ public editable function dispatch(context: ref[Context], input: Event) -> DispatchResult[State]:
233
+ for entry in this.transitions:
234
+ unsafe:
235
+ let transition = read(entry)
236
+ if not this.states_equal(transition.from_state, this.current_state):
237
+ continue
238
+ if not this.events_equal(transition.input, input):
239
+ continue
240
+ if not transition.guard(ptr_of(context), input, transition.from_state, transition.to_state):
241
+ continue
242
+
243
+ let previous_state = this.current_state
244
+ let previous_hooks = find_state_hooks(ref_of(this), previous_state)
245
+ if previous_hooks != null:
246
+ let hooks = read(ptr[StateHooks[State, Context]]<-previous_hooks)
247
+ hooks.on_exit(ptr_of(context), previous_state)
248
+
249
+ transition.action(ptr_of(context), input, previous_state, transition.to_state)
250
+ this.current_state = transition.to_state
251
+
252
+ let next_hooks = find_state_hooks(ref_of(this), this.current_state)
253
+ if next_hooks != null:
254
+ let hooks = read(ptr[StateHooks[State, Context]]<-next_hooks)
255
+ hooks.on_enter(ptr_of(context), this.current_state)
256
+
257
+ return DispatchResult[State](
258
+ kind = DispatchKind.transitioned,
259
+ previous_state = previous_state,
260
+ current_state = this.current_state
261
+ )
262
+
263
+ return DispatchResult[State](
264
+ kind = DispatchKind.ignored,
265
+ previous_state = this.current_state,
266
+ current_state = this.current_state
267
+ )