redscript-mc 2.6.2 → 3.0.0

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 (636) hide show
  1. package/.github/workflows/ci.yml +11 -0
  2. package/CHANGELOG.md +18 -9
  3. package/README-benchmarks.md +48 -0
  4. package/README-vscode-test.md +251 -0
  5. package/RELEASE_NOTES.md +74 -0
  6. package/ROADMAP.md +131 -167
  7. package/benchmarks/_shared.ts +468 -0
  8. package/benchmarks/baseline.json +2816 -0
  9. package/benchmarks/baseline.md +13 -0
  10. package/benchmarks/compiler-perf.report.json +207 -0
  11. package/benchmarks/compiler-perf.ts +76 -0
  12. package/benchmarks/results.md +13 -0
  13. package/benchmarks/stdlib-complexity.report.json +2606 -0
  14. package/benchmarks/stdlib-complexity.ts +54 -0
  15. package/benchmarks/stdlib-size.md +57 -0
  16. package/benchmarks/stdlib-size.ts +91 -0
  17. package/coverage-report.md +177 -0
  18. package/dist/src/__tests__/budget.test.js +4 -0
  19. package/dist/src/__tests__/cache/cache-behavior.test.d.ts +10 -0
  20. package/dist/src/__tests__/cache/cache-behavior.test.js +425 -0
  21. package/dist/src/__tests__/cache-extra.test.d.ts +5 -0
  22. package/dist/src/__tests__/cache-extra.test.js +211 -0
  23. package/dist/src/__tests__/cli-init.test.d.ts +1 -0
  24. package/dist/src/__tests__/cli-init.test.js +97 -0
  25. package/dist/src/__tests__/cli-publish.test.d.ts +9 -0
  26. package/dist/src/__tests__/cli-publish.test.js +189 -0
  27. package/dist/src/__tests__/cli.test.js +76 -0
  28. package/dist/src/__tests__/compile-preprocess.test.d.ts +11 -0
  29. package/dist/src/__tests__/compile-preprocess.test.js +328 -0
  30. package/dist/src/__tests__/compiler/break-stmt.test.d.ts +1 -0
  31. package/dist/src/__tests__/compiler/break-stmt.test.js +58 -0
  32. package/dist/src/__tests__/compiler/const-decl.test.d.ts +1 -0
  33. package/dist/src/__tests__/compiler/const-decl.test.js +123 -0
  34. package/dist/src/__tests__/compiler/continue-stmt.test.d.ts +1 -0
  35. package/dist/src/__tests__/compiler/continue-stmt.test.js +67 -0
  36. package/dist/src/__tests__/compiler/coroutine-extended.test.d.ts +17 -0
  37. package/dist/src/__tests__/compiler/coroutine-extended.test.js +565 -0
  38. package/dist/src/__tests__/compiler/deprecated.test.d.ts +4 -0
  39. package/dist/src/__tests__/compiler/deprecated.test.js +285 -0
  40. package/dist/src/__tests__/compiler/do-while.test.d.ts +1 -0
  41. package/dist/src/__tests__/compiler/do-while.test.js +120 -0
  42. package/dist/src/__tests__/compiler/enum-payload.test.d.ts +9 -0
  43. package/dist/src/__tests__/compiler/enum-payload.test.js +272 -0
  44. package/dist/src/__tests__/compiler/interface.test.d.ts +10 -0
  45. package/dist/src/__tests__/compiler/interface.test.js +258 -0
  46. package/dist/src/__tests__/compiler/labeled-loops.test.d.ts +1 -0
  47. package/dist/src/__tests__/compiler/labeled-loops.test.js +263 -0
  48. package/dist/src/__tests__/compiler/match-string.test.d.ts +1 -0
  49. package/dist/src/__tests__/compiler/match-string.test.js +43 -0
  50. package/dist/src/__tests__/compiler/memoize.test.d.ts +1 -0
  51. package/dist/src/__tests__/compiler/memoize.test.js +113 -0
  52. package/dist/src/__tests__/compiler/method-chain.test.d.ts +5 -0
  53. package/dist/src/__tests__/compiler/method-chain.test.js +115 -0
  54. package/dist/src/__tests__/compiler/module-import.test.d.ts +12 -0
  55. package/dist/src/__tests__/compiler/module-import.test.js +261 -0
  56. package/dist/src/__tests__/compiler/option-extensions.test.d.ts +6 -0
  57. package/dist/src/__tests__/compiler/option-extensions.test.js +191 -0
  58. package/dist/src/__tests__/compiler/profile-decorator.test.d.ts +1 -0
  59. package/dist/src/__tests__/compiler/profile-decorator.test.js +69 -0
  60. package/dist/src/__tests__/compiler/string-advanced.test.d.ts +7 -0
  61. package/dist/src/__tests__/compiler/string-advanced.test.js +281 -0
  62. package/dist/src/__tests__/compiler/struct-extends.test.d.ts +1 -0
  63. package/dist/src/__tests__/compiler/struct-extends.test.js +95 -0
  64. package/dist/src/__tests__/compiler/throttle-retry.test.d.ts +1 -0
  65. package/dist/src/__tests__/compiler/throttle-retry.test.js +166 -0
  66. package/dist/src/__tests__/compiler/tuple-type.test.d.ts +10 -0
  67. package/dist/src/__tests__/compiler/tuple-type.test.js +229 -0
  68. package/dist/src/__tests__/compiler/watch-decorator.test.d.ts +1 -0
  69. package/dist/src/__tests__/compiler/watch-decorator.test.js +65 -0
  70. package/dist/src/__tests__/config/project-config.test.d.ts +1 -0
  71. package/dist/src/__tests__/config/project-config.test.js +199 -0
  72. package/dist/src/__tests__/config-decorator.test.d.ts +8 -0
  73. package/dist/src/__tests__/config-decorator.test.js +142 -0
  74. package/dist/src/__tests__/diagnostics-extra.test.d.ts +6 -0
  75. package/dist/src/__tests__/diagnostics-extra.test.js +132 -0
  76. package/dist/src/__tests__/emit/compile-branches.test.d.ts +1 -0
  77. package/dist/src/__tests__/emit/compile-branches.test.js +123 -0
  78. package/dist/src/__tests__/emit/compile-coverage.test.d.ts +25 -0
  79. package/dist/src/__tests__/emit/compile-coverage.test.js +617 -0
  80. package/dist/src/__tests__/emit/compile-extra-branches.test.d.ts +12 -0
  81. package/dist/src/__tests__/emit/compile-extra-branches.test.js +225 -0
  82. package/dist/src/__tests__/emit/compile-mocked-branches.test.d.ts +0 -0
  83. package/dist/src/__tests__/emit/compile-mocked-branches.test.js +238 -0
  84. package/dist/src/__tests__/emit/execute-chain.test.d.ts +10 -0
  85. package/dist/src/__tests__/emit/execute-chain.test.js +94 -0
  86. package/dist/src/__tests__/emit/index.test.js +2 -1
  87. package/dist/src/__tests__/emit/modules-branches.test.d.ts +1 -0
  88. package/dist/src/__tests__/emit/modules-branches.test.js +88 -0
  89. package/dist/src/__tests__/emit/modules-coverage.test.d.ts +15 -0
  90. package/dist/src/__tests__/emit/modules-coverage.test.js +221 -0
  91. package/dist/src/__tests__/emit/modules-errors.test.d.ts +12 -0
  92. package/dist/src/__tests__/emit/modules-errors.test.js +169 -0
  93. package/dist/src/__tests__/emit/modules-rewrite.test.d.ts +17 -0
  94. package/dist/src/__tests__/emit/modules-rewrite.test.js +204 -0
  95. package/dist/src/__tests__/emit/source-map.test.d.ts +1 -0
  96. package/dist/src/__tests__/emit/source-map.test.js +167 -0
  97. package/dist/src/__tests__/enum.test.js +9 -4
  98. package/dist/src/__tests__/error-recovery.test.d.ts +7 -0
  99. package/dist/src/__tests__/error-recovery.test.js +217 -0
  100. package/dist/src/__tests__/events-types-extra.test.d.ts +10 -0
  101. package/dist/src/__tests__/events-types-extra.test.js +91 -0
  102. package/dist/src/__tests__/events-types.test.d.ts +4 -0
  103. package/dist/src/__tests__/events-types.test.js +56 -0
  104. package/dist/src/__tests__/formatter.test.js +13 -5
  105. package/dist/src/__tests__/hir/lower-extra.test.d.ts +9 -0
  106. package/dist/src/__tests__/hir/lower-extra.test.js +140 -0
  107. package/dist/src/__tests__/hir/monomorphize-extra.test.d.ts +15 -0
  108. package/dist/src/__tests__/hir/monomorphize-extra.test.js +200 -0
  109. package/dist/src/__tests__/hir/monomorphize-extra2.test.d.ts +16 -0
  110. package/dist/src/__tests__/hir/monomorphize-extra2.test.js +316 -0
  111. package/dist/src/__tests__/incremental.test.js +10 -2
  112. package/dist/src/__tests__/index-extra.test.d.ts +10 -0
  113. package/dist/src/__tests__/index-extra.test.js +71 -0
  114. package/dist/src/__tests__/lexer.test.js +2 -2
  115. package/dist/src/__tests__/lint/rules.test.d.ts +5 -0
  116. package/dist/src/__tests__/lint/rules.test.js +208 -0
  117. package/dist/src/__tests__/lir/lower.test.js +29 -0
  118. package/dist/src/__tests__/lir/verify.test.js +30 -0
  119. package/dist/src/__tests__/lsp/completion.test.d.ts +7 -0
  120. package/dist/src/__tests__/lsp/completion.test.js +583 -0
  121. package/dist/src/__tests__/lsp/definition.test.d.ts +7 -0
  122. package/dist/src/__tests__/lsp/definition.test.js +454 -0
  123. package/dist/src/__tests__/lsp/diagnostics.test.d.ts +10 -0
  124. package/dist/src/__tests__/lsp/diagnostics.test.js +98 -0
  125. package/dist/src/__tests__/lsp/hover-docs.test.d.ts +10 -0
  126. package/dist/src/__tests__/lsp/hover-docs.test.js +210 -0
  127. package/dist/src/__tests__/lsp.test.js +4 -1
  128. package/dist/src/__tests__/mc-integration/item-entity-events.test.js +4 -0
  129. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +4 -0
  130. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.d.ts +13 -0
  131. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1227 -0
  132. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.d.ts +13 -0
  133. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1509 -0
  134. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.d.ts +14 -0
  135. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1374 -0
  136. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.d.ts +10 -0
  137. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +759 -0
  138. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.d.ts +13 -0
  139. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +855 -0
  140. package/dist/src/__tests__/mc-integration/stdlib-coverage.test.js +4 -0
  141. package/dist/src/__tests__/mc-integration/syntax-coverage.test.js +4 -0
  142. package/dist/src/__tests__/mc-validator-coverage.test.d.ts +13 -0
  143. package/dist/src/__tests__/mc-validator-coverage.test.js +296 -0
  144. package/dist/src/__tests__/mc-validator-extra.test.d.ts +13 -0
  145. package/dist/src/__tests__/mc-validator-extra.test.js +245 -0
  146. package/dist/src/__tests__/mir/lower-extra.test.d.ts +20 -0
  147. package/dist/src/__tests__/mir/lower-extra.test.js +361 -0
  148. package/dist/src/__tests__/mir/lower-extra2.test.d.ts +17 -0
  149. package/dist/src/__tests__/mir/lower-extra2.test.js +317 -0
  150. package/dist/src/__tests__/mir/lower-extra3.test.d.ts +19 -0
  151. package/dist/src/__tests__/mir/lower-extra3.test.js +249 -0
  152. package/dist/src/__tests__/mir/lower-extra4.test.d.ts +23 -0
  153. package/dist/src/__tests__/mir/lower-extra4.test.js +606 -0
  154. package/dist/src/__tests__/mir/lower-extra5.test.d.ts +25 -0
  155. package/dist/src/__tests__/mir/lower-extra5.test.js +543 -0
  156. package/dist/src/__tests__/mir/lower-extra6.test.d.ts +16 -0
  157. package/dist/src/__tests__/mir/lower-extra6.test.js +471 -0
  158. package/dist/src/__tests__/mir/lower-extra7.test.d.ts +35 -0
  159. package/dist/src/__tests__/mir/lower-extra7.test.js +921 -0
  160. package/dist/src/__tests__/mir/lower-extra8.test.d.ts +19 -0
  161. package/dist/src/__tests__/mir/lower-extra8.test.js +626 -0
  162. package/dist/src/__tests__/mir/lower-extra9.test.d.ts +14 -0
  163. package/dist/src/__tests__/mir/lower-extra9.test.js +717 -0
  164. package/dist/src/__tests__/optimizer/auto-inline.test.d.ts +1 -0
  165. package/dist/src/__tests__/optimizer/auto-inline.test.js +176 -0
  166. package/dist/src/__tests__/optimizer/cse.test.d.ts +4 -0
  167. package/dist/src/__tests__/optimizer/cse.test.js +178 -0
  168. package/dist/src/__tests__/optimizer/inline_fn.test.d.ts +1 -0
  169. package/dist/src/__tests__/optimizer/inline_fn.test.js +221 -0
  170. package/dist/src/__tests__/optimizer/licm.test.d.ts +1 -0
  171. package/dist/src/__tests__/optimizer/licm.test.js +244 -0
  172. package/dist/src/__tests__/optimizer/optimizer-extended.test.d.ts +12 -0
  173. package/dist/src/__tests__/optimizer/optimizer-extended.test.js +993 -0
  174. package/dist/src/__tests__/optimizer/strength-reduction.test.d.ts +1 -0
  175. package/dist/src/__tests__/optimizer/strength-reduction.test.js +86 -0
  176. package/dist/src/__tests__/optimizer/tco.test.d.ts +14 -0
  177. package/dist/src/__tests__/optimizer/tco.test.js +203 -0
  178. package/dist/src/__tests__/parser-coverage.test.d.ts +25 -0
  179. package/dist/src/__tests__/parser-coverage.test.js +491 -0
  180. package/dist/src/__tests__/parser-extra.test.d.ts +6 -0
  181. package/dist/src/__tests__/parser-extra.test.js +451 -0
  182. package/dist/src/__tests__/parser.test.js +12 -0
  183. package/dist/src/__tests__/repl-extra.test.d.ts +13 -0
  184. package/dist/src/__tests__/repl-extra.test.js +174 -0
  185. package/dist/src/__tests__/repl-server-extra.test.d.ts +10 -0
  186. package/dist/src/__tests__/repl-server-extra.test.js +161 -0
  187. package/dist/src/__tests__/repl-server.test.d.ts +6 -0
  188. package/dist/src/__tests__/repl-server.test.js +146 -0
  189. package/dist/src/__tests__/runtime-extra.test.d.ts +15 -0
  190. package/dist/src/__tests__/runtime-extra.test.js +732 -0
  191. package/dist/src/__tests__/singleton-decorator.test.d.ts +11 -0
  192. package/dist/src/__tests__/singleton-decorator.test.js +260 -0
  193. package/dist/src/__tests__/sourcemap.test.js +1 -1
  194. package/dist/src/__tests__/stdlib/advanced.test.d.ts +5 -0
  195. package/dist/src/__tests__/stdlib/advanced.test.js +301 -0
  196. package/dist/src/__tests__/stdlib/bigint.test.d.ts +4 -0
  197. package/dist/src/__tests__/stdlib/bigint.test.js +83 -0
  198. package/dist/src/__tests__/stdlib/bits.test.d.ts +4 -0
  199. package/dist/src/__tests__/stdlib/bits.test.js +96 -0
  200. package/dist/src/__tests__/stdlib/bossbar.test.d.ts +4 -0
  201. package/dist/src/__tests__/stdlib/bossbar.test.js +72 -0
  202. package/dist/src/__tests__/stdlib/color.test.d.ts +4 -0
  203. package/dist/src/__tests__/stdlib/color.test.js +84 -0
  204. package/dist/src/__tests__/stdlib/combat.test.d.ts +4 -0
  205. package/dist/src/__tests__/stdlib/combat.test.js +64 -0
  206. package/dist/src/__tests__/stdlib/cooldown.test.d.ts +4 -0
  207. package/dist/src/__tests__/stdlib/cooldown.test.js +64 -0
  208. package/dist/src/__tests__/stdlib/dialog.test.js +15 -7
  209. package/dist/src/__tests__/stdlib/ecs.test.d.ts +4 -0
  210. package/dist/src/__tests__/stdlib/ecs.test.js +81 -0
  211. package/dist/src/__tests__/stdlib/effects.test.d.ts +4 -0
  212. package/dist/src/__tests__/stdlib/effects.test.js +72 -0
  213. package/dist/src/__tests__/stdlib/events.test.d.ts +4 -0
  214. package/dist/src/__tests__/stdlib/events.test.js +55 -0
  215. package/dist/src/__tests__/stdlib/expr.test.d.ts +4 -0
  216. package/dist/src/__tests__/stdlib/expr.test.js +77 -0
  217. package/dist/src/__tests__/stdlib/fft.test.d.ts +4 -0
  218. package/dist/src/__tests__/stdlib/fft.test.js +82 -0
  219. package/dist/src/__tests__/stdlib/graph.test.d.ts +4 -0
  220. package/dist/src/__tests__/stdlib/graph.test.js +102 -0
  221. package/dist/src/__tests__/stdlib/interactions.test.d.ts +4 -0
  222. package/dist/src/__tests__/stdlib/interactions.test.js +60 -0
  223. package/dist/src/__tests__/stdlib/inventory.test.d.ts +4 -0
  224. package/dist/src/__tests__/stdlib/inventory.test.js +68 -0
  225. package/dist/src/__tests__/stdlib/linalg.test.d.ts +5 -0
  226. package/dist/src/__tests__/stdlib/linalg.test.js +78 -0
  227. package/dist/src/__tests__/stdlib/map.test.d.ts +1 -0
  228. package/dist/src/__tests__/stdlib/map.test.js +84 -0
  229. package/dist/src/__tests__/stdlib/math.test.js +19 -6
  230. package/dist/src/__tests__/stdlib/math_hp.test.d.ts +4 -0
  231. package/dist/src/__tests__/stdlib/math_hp.test.js +80 -0
  232. package/dist/src/__tests__/stdlib/mobs.test.d.ts +4 -0
  233. package/dist/src/__tests__/stdlib/mobs.test.js +61 -0
  234. package/dist/src/__tests__/stdlib/noise.test.d.ts +4 -0
  235. package/dist/src/__tests__/stdlib/noise.test.js +73 -0
  236. package/dist/src/__tests__/stdlib/ode.test.d.ts +4 -0
  237. package/dist/src/__tests__/stdlib/ode.test.js +68 -0
  238. package/dist/src/__tests__/stdlib/parabola.test.d.ts +4 -0
  239. package/dist/src/__tests__/stdlib/parabola.test.js +77 -0
  240. package/dist/src/__tests__/stdlib/particles.test.d.ts +4 -0
  241. package/dist/src/__tests__/stdlib/particles.test.js +68 -0
  242. package/dist/src/__tests__/stdlib/physics.test.d.ts +4 -0
  243. package/dist/src/__tests__/stdlib/physics.test.js +76 -0
  244. package/dist/src/__tests__/stdlib/player.test.d.ts +4 -0
  245. package/dist/src/__tests__/stdlib/player.test.js +64 -0
  246. package/dist/src/__tests__/stdlib/quaternion.test.d.ts +4 -0
  247. package/dist/src/__tests__/stdlib/quaternion.test.js +73 -0
  248. package/dist/src/__tests__/stdlib/queue.test.d.ts +1 -0
  249. package/dist/src/__tests__/stdlib/queue.test.js +97 -0
  250. package/dist/src/__tests__/stdlib/random.test.d.ts +4 -0
  251. package/dist/src/__tests__/stdlib/random.test.js +76 -0
  252. package/dist/src/__tests__/stdlib/result.test.d.ts +12 -0
  253. package/dist/src/__tests__/stdlib/result.test.js +329 -0
  254. package/dist/src/__tests__/stdlib/scheduler.test.js +19 -8
  255. package/dist/src/__tests__/stdlib/set_int.test.d.ts +1 -0
  256. package/dist/src/__tests__/stdlib/set_int.test.js +88 -0
  257. package/dist/src/__tests__/stdlib/sets.test.d.ts +6 -0
  258. package/dist/src/__tests__/stdlib/sets.test.js +60 -0
  259. package/dist/src/__tests__/stdlib/signal.test.d.ts +4 -0
  260. package/dist/src/__tests__/stdlib/signal.test.js +84 -0
  261. package/dist/src/__tests__/stdlib/spawn.test.d.ts +4 -0
  262. package/dist/src/__tests__/stdlib/spawn.test.js +68 -0
  263. package/dist/src/__tests__/stdlib/string.test.d.ts +12 -0
  264. package/dist/src/__tests__/stdlib/string.test.js +231 -0
  265. package/dist/src/__tests__/stdlib/strings.test.d.ts +4 -0
  266. package/dist/src/__tests__/stdlib/strings.test.js +83 -0
  267. package/dist/src/__tests__/stdlib/tags.test.d.ts +4 -0
  268. package/dist/src/__tests__/stdlib/tags.test.js +57 -0
  269. package/dist/src/__tests__/stdlib/teams.test.d.ts +4 -0
  270. package/dist/src/__tests__/stdlib/teams.test.js +72 -0
  271. package/dist/src/__tests__/stdlib/timer.test.d.ts +4 -0
  272. package/dist/src/__tests__/stdlib/timer.test.js +79 -0
  273. package/dist/src/__tests__/stdlib/vec.test.d.ts +5 -0
  274. package/dist/src/__tests__/stdlib/vec.test.js +94 -0
  275. package/dist/src/__tests__/stdlib/world.test.d.ts +4 -0
  276. package/dist/src/__tests__/stdlib/world.test.js +72 -0
  277. package/dist/src/__tests__/struct-display.test.d.ts +1 -0
  278. package/dist/src/__tests__/struct-display.test.js +64 -0
  279. package/dist/src/__tests__/test-framework/runner.test.d.ts +10 -0
  280. package/dist/src/__tests__/test-framework/runner.test.js +193 -0
  281. package/dist/src/__tests__/tuner/adapters.test.d.ts +14 -0
  282. package/dist/src/__tests__/tuner/adapters.test.js +194 -0
  283. package/dist/src/__tests__/tuner/simulator-extra.test.d.ts +4 -0
  284. package/dist/src/__tests__/tuner/simulator-extra.test.js +193 -0
  285. package/dist/src/__tests__/typechecker-coverage.test.d.ts +30 -0
  286. package/dist/src/__tests__/typechecker-coverage.test.js +627 -0
  287. package/dist/src/__tests__/typechecker.test.js +3 -3
  288. package/dist/src/__tests__/watch-decorator.test.d.ts +1 -0
  289. package/dist/src/__tests__/watch-decorator.test.js +54 -0
  290. package/dist/src/ast/types.d.ts +102 -3
  291. package/dist/src/cache/incremental.d.ts +13 -14
  292. package/dist/src/cache/incremental.js +106 -89
  293. package/dist/src/cache/index.d.ts +8 -2
  294. package/dist/src/cache/index.js +18 -6
  295. package/dist/src/cli.d.ts +1 -0
  296. package/dist/src/cli.js +466 -17
  297. package/dist/src/config/project-config.d.ts +29 -0
  298. package/dist/src/config/project-config.js +180 -0
  299. package/dist/src/diagnostics/index.d.ts +9 -0
  300. package/dist/src/diagnostics/index.js +18 -1
  301. package/dist/src/emit/compile.d.ts +10 -0
  302. package/dist/src/emit/compile.js +395 -50
  303. package/dist/src/emit/index.d.ts +40 -0
  304. package/dist/src/emit/index.js +307 -14
  305. package/dist/src/emit/modules.js +21 -3
  306. package/dist/src/emit/sourcemap.d.ts +23 -27
  307. package/dist/src/emit/sourcemap.js +52 -30
  308. package/dist/src/formatter/index.js +33 -8
  309. package/dist/src/hir/deprecated.d.ts +13 -0
  310. package/dist/src/hir/deprecated.js +218 -0
  311. package/dist/src/hir/lower.js +114 -8
  312. package/dist/src/hir/monomorphize.js +22 -2
  313. package/dist/src/hir/types.d.ts +65 -1
  314. package/dist/src/index.d.ts +6 -0
  315. package/dist/src/index.js +18 -3
  316. package/dist/src/lexer/index.d.ts +2 -1
  317. package/dist/src/lexer/index.js +39 -3
  318. package/dist/src/lint/index.d.ts +45 -0
  319. package/dist/src/lint/index.js +930 -0
  320. package/dist/src/lir/lower.js +29 -2
  321. package/dist/src/lir/types.d.ts +2 -0
  322. package/dist/src/lsp/server.js +92 -5
  323. package/dist/src/mir/lower.js +775 -34
  324. package/dist/src/mir/macro.js +36 -2
  325. package/dist/src/mir/types.d.ts +12 -0
  326. package/dist/src/mir/verify.js +9 -0
  327. package/dist/src/optimizer/auto-inline.d.ts +2 -0
  328. package/dist/src/optimizer/auto-inline.js +67 -0
  329. package/dist/src/optimizer/cse.d.ts +20 -0
  330. package/dist/src/optimizer/cse.js +234 -0
  331. package/dist/src/optimizer/inline.d.ts +26 -0
  332. package/dist/src/optimizer/inline.js +286 -0
  333. package/dist/src/optimizer/interprocedural.js +4 -0
  334. package/dist/src/optimizer/licm.d.ts +32 -0
  335. package/dist/src/optimizer/licm.js +371 -0
  336. package/dist/src/optimizer/pipeline.js +12 -2
  337. package/dist/src/optimizer/strength_reduction.d.ts +15 -0
  338. package/dist/src/optimizer/strength_reduction.js +90 -0
  339. package/dist/src/optimizer/tco.d.ts +53 -0
  340. package/dist/src/optimizer/tco.js +238 -0
  341. package/dist/src/parser/index.d.ts +32 -0
  342. package/dist/src/parser/index.js +421 -59
  343. package/dist/src/repl-server.d.ts +13 -0
  344. package/dist/src/repl-server.js +127 -0
  345. package/dist/src/structs/expand.d.ts +15 -0
  346. package/dist/src/structs/expand.js +46 -0
  347. package/dist/src/testing/runner.d.ts +40 -0
  348. package/dist/src/testing/runner.js +237 -0
  349. package/dist/src/typechecker/index.d.ts +3 -0
  350. package/dist/src/typechecker/index.js +254 -9
  351. package/dist/tsconfig.tsbuildinfo +1 -1
  352. package/doc-drafts/redscript-docs/docs/en/stdlib/graph.md +104 -0
  353. package/doc-drafts/redscript-docs/docs/en/stdlib/parabola.md +113 -0
  354. package/doc-drafts/redscript-docs/docs/en/stdlib/pathfind.md +104 -0
  355. package/doc-drafts/redscript-docs/docs/en/stdlib/physics.md +134 -0
  356. package/doc-drafts/redscript-docs/docs/en/stdlib/quaternion.md +135 -0
  357. package/doc-drafts/redscript-docs/docs/zh/stdlib/graph.md +104 -0
  358. package/doc-drafts/redscript-docs/docs/zh/stdlib/parabola.md +113 -0
  359. package/doc-drafts/redscript-docs/docs/zh/stdlib/pathfind.md +104 -0
  360. package/doc-drafts/redscript-docs/docs/zh/stdlib/physics.md +134 -0
  361. package/doc-drafts/redscript-docs/docs/zh/stdlib/quaternion.md +135 -0
  362. package/docs/stdlib/result.md +156 -0
  363. package/docs/stdlib/result.zh.md +156 -0
  364. package/editors/vscode/fixtures/test.mcrs +7 -0
  365. package/editors/vscode/out/extension.js +2095 -225
  366. package/editors/vscode/out/lsp-server.js +519 -51
  367. package/editors/vscode/package-lock.json +9 -4
  368. package/editors/vscode/package.json +1 -1
  369. package/examples/display-demo.mcrs +64 -0
  370. package/examples/game/racing.mcrs +301 -0
  371. package/examples/game/tower_defense.mcrs +311 -0
  372. package/examples/math/physics_sim.mcrs +322 -0
  373. package/examples/rpg/boss_fight.mcrs +313 -0
  374. package/examples/rpg/health_system.mcrs +237 -0
  375. package/examples/rpg/inventory.mcrs +265 -0
  376. package/examples/util/debug_hud.mcrs +279 -0
  377. package/jest.config.js +10 -0
  378. package/package.json +12 -3
  379. package/playground/index.html +823 -0
  380. package/scripts/gen-docs.ts +533 -0
  381. package/scripts/update-redscript-docs-stdlib.sh +770 -0
  382. package/src/__tests__/budget.test.ts +5 -0
  383. package/src/__tests__/cache/cache-behavior.test.ts +480 -0
  384. package/src/__tests__/cache-extra.test.ts +199 -0
  385. package/src/__tests__/cli-docs.test.ts +77 -0
  386. package/src/__tests__/cli-init.test.ts +91 -0
  387. package/src/__tests__/cli-publish.test.ts +190 -0
  388. package/src/__tests__/cli.test.ts +117 -1
  389. package/src/__tests__/compile-preprocess.test.ts +366 -0
  390. package/src/__tests__/compiler/break-stmt.test.ts +66 -0
  391. package/src/__tests__/compiler/const-decl.test.ts +141 -0
  392. package/src/__tests__/compiler/continue-stmt.test.ts +81 -0
  393. package/src/__tests__/compiler/coroutine-extended.test.ts +723 -0
  394. package/src/__tests__/compiler/deprecated.test.ts +305 -0
  395. package/src/__tests__/compiler/do-while.test.ts +130 -0
  396. package/src/__tests__/compiler/enum-payload.test.ts +299 -0
  397. package/src/__tests__/compiler/interface.test.ts +287 -0
  398. package/src/__tests__/compiler/labeled-loops.test.ts +279 -0
  399. package/src/__tests__/compiler/match-string.test.ts +45 -0
  400. package/src/__tests__/compiler/memoize.test.ts +126 -0
  401. package/src/__tests__/compiler/method-chain.test.ts +121 -0
  402. package/src/__tests__/compiler/module-import.test.ts +240 -0
  403. package/src/__tests__/compiler/option-extensions.test.ts +207 -0
  404. package/src/__tests__/compiler/profile-decorator.test.ts +79 -0
  405. package/src/__tests__/compiler/string-advanced.test.ts +310 -0
  406. package/src/__tests__/compiler/struct-extends.test.ts +109 -0
  407. package/src/__tests__/compiler/throttle-retry.test.ts +191 -0
  408. package/src/__tests__/compiler/tuple-type.test.ts +263 -0
  409. package/src/__tests__/compiler/watch-decorator.test.ts +72 -0
  410. package/src/__tests__/config/project-config.test.ts +181 -0
  411. package/src/__tests__/config-decorator.test.ts +157 -0
  412. package/src/__tests__/diagnostics-extra.test.ts +155 -0
  413. package/src/__tests__/emit/compile-branches.test.ts +135 -0
  414. package/src/__tests__/emit/compile-coverage.test.ts +696 -0
  415. package/src/__tests__/emit/compile-extra-branches.test.ts +228 -0
  416. package/src/__tests__/emit/compile-mocked-branches.test.ts +249 -0
  417. package/src/__tests__/emit/compile.test.ts +6 -1
  418. package/src/__tests__/emit/execute-chain.test.ts +114 -0
  419. package/src/__tests__/emit/index.test.ts +2 -1
  420. package/src/__tests__/emit/modules-branches.test.ts +90 -0
  421. package/src/__tests__/emit/modules-coverage.test.ts +241 -0
  422. package/src/__tests__/emit/modules-errors.test.ts +192 -0
  423. package/src/__tests__/emit/modules-rewrite.test.ts +232 -0
  424. package/src/__tests__/emit/source-map.test.ts +152 -0
  425. package/src/__tests__/enum.test.ts +9 -4
  426. package/src/__tests__/error-recovery.test.ts +226 -0
  427. package/src/__tests__/events-types-extra.test.ts +110 -0
  428. package/src/__tests__/events-types.test.ts +66 -0
  429. package/src/__tests__/formatter.test.ts +15 -5
  430. package/src/__tests__/generics.test.ts +16 -9
  431. package/src/__tests__/hir/lower-extra.test.ts +151 -0
  432. package/src/__tests__/hir/monomorphize-coverage.test.ts +432 -0
  433. package/src/__tests__/hir/monomorphize-extra.test.ts +220 -0
  434. package/src/__tests__/hir/monomorphize-extra2.test.ts +350 -0
  435. package/src/__tests__/impl.test.ts +12 -8
  436. package/src/__tests__/incremental.test.ts +10 -2
  437. package/src/__tests__/index-extra.test.ts +79 -0
  438. package/src/__tests__/lexer.test.ts +2 -2
  439. package/src/__tests__/lint/hir-coverage.test.ts +1716 -0
  440. package/src/__tests__/lint/rules-coverage.test.ts +598 -0
  441. package/src/__tests__/lint/rules.test.ts +230 -0
  442. package/src/__tests__/lir/lower.test.ts +33 -0
  443. package/src/__tests__/lir/verify.test.ts +33 -0
  444. package/src/__tests__/lsp/completion.test.ts +687 -0
  445. package/src/__tests__/lsp/definition.test.ts +499 -0
  446. package/src/__tests__/lsp/diagnostics.test.ts +108 -0
  447. package/src/__tests__/lsp/hover-docs.test.ts +222 -0
  448. package/src/__tests__/lsp.test.ts +4 -1
  449. package/src/__tests__/mc-integration/item-entity-events.test.ts +5 -0
  450. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +5 -0
  451. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1105 -0
  452. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1366 -0
  453. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1245 -0
  454. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +755 -0
  455. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +771 -0
  456. package/src/__tests__/mc-integration/stdlib-coverage.test.ts +5 -0
  457. package/src/__tests__/mc-integration/syntax-coverage.test.ts +5 -0
  458. package/src/__tests__/mc-validator-coverage.test.ts +325 -0
  459. package/src/__tests__/mc-validator-extra.test.ts +252 -0
  460. package/src/__tests__/mir/lower-extra.test.ts +402 -0
  461. package/src/__tests__/mir/lower-extra2.test.ts +348 -0
  462. package/src/__tests__/mir/lower-extra3.test.ts +277 -0
  463. package/src/__tests__/mir/lower-extra4.test.ts +636 -0
  464. package/src/__tests__/mir/lower-extra5.test.ts +612 -0
  465. package/src/__tests__/mir/lower-extra6.test.ts +520 -0
  466. package/src/__tests__/mir/lower-extra7.test.ts +1045 -0
  467. package/src/__tests__/mir/lower-extra8.test.ts +704 -0
  468. package/src/__tests__/mir/lower-extra9.test.ts +821 -0
  469. package/src/__tests__/optimizer/auto-inline.test.ts +206 -0
  470. package/src/__tests__/optimizer/cse.test.ts +195 -0
  471. package/src/__tests__/optimizer/inline_fn.test.ts +263 -0
  472. package/src/__tests__/optimizer/licm.test.ts +358 -0
  473. package/src/__tests__/optimizer/nbt-coalesce.test.ts +147 -0
  474. package/src/__tests__/optimizer/optimizer-extended.test.ts +1081 -0
  475. package/src/__tests__/optimizer/scoreboard-batch.test.ts +141 -0
  476. package/src/__tests__/optimizer/strength-reduction.test.ts +111 -0
  477. package/src/__tests__/optimizer/tco-coverage.test.ts +309 -0
  478. package/src/__tests__/optimizer/tco.test.ts +238 -0
  479. package/src/__tests__/option.test.ts +14 -7
  480. package/src/__tests__/parser-coverage.test.ts +576 -0
  481. package/src/__tests__/parser-extra.test.ts +531 -0
  482. package/src/__tests__/parser.test.ts +14 -0
  483. package/src/__tests__/repl-extra.test.ts +195 -0
  484. package/src/__tests__/repl-server-extra.test.ts +150 -0
  485. package/src/__tests__/repl-server.test.ts +122 -0
  486. package/src/__tests__/runtime-extra.test.ts +862 -0
  487. package/src/__tests__/singleton-decorator.test.ts +285 -0
  488. package/src/__tests__/sourcemap.test.ts +1 -1
  489. package/src/__tests__/stdlib/advanced.test.ts +312 -0
  490. package/src/__tests__/stdlib/bigint.test.ts +57 -0
  491. package/src/__tests__/stdlib/bits.test.ts +75 -0
  492. package/src/__tests__/stdlib/bossbar.test.ts +45 -0
  493. package/src/__tests__/stdlib/color.test.ts +60 -0
  494. package/src/__tests__/stdlib/combat.test.ts +35 -0
  495. package/src/__tests__/stdlib/cooldown.test.ts +35 -0
  496. package/src/__tests__/stdlib/dialog.test.ts +14 -6
  497. package/src/__tests__/stdlib/ecs.test.ts +54 -0
  498. package/src/__tests__/stdlib/effects.test.ts +45 -0
  499. package/src/__tests__/stdlib/events.test.ts +23 -0
  500. package/src/__tests__/stdlib/expr.test.ts +48 -0
  501. package/src/__tests__/stdlib/fft.test.ts +54 -0
  502. package/src/__tests__/stdlib/graph.test.ts +77 -0
  503. package/src/__tests__/stdlib/interactions.test.ts +30 -0
  504. package/src/__tests__/stdlib/inventory.test.ts +40 -0
  505. package/src/__tests__/stdlib/linalg.test.ts +52 -0
  506. package/src/__tests__/stdlib/map.test.ts +55 -0
  507. package/src/__tests__/stdlib/math.test.ts +19 -5
  508. package/src/__tests__/stdlib/math_hp.test.ts +55 -0
  509. package/src/__tests__/stdlib/mobs.test.ts +40 -0
  510. package/src/__tests__/stdlib/noise.test.ts +46 -0
  511. package/src/__tests__/stdlib/ode.test.ts +40 -0
  512. package/src/__tests__/stdlib/parabola.test.ts +51 -0
  513. package/src/__tests__/stdlib/particles.test.ts +40 -0
  514. package/src/__tests__/stdlib/physics.test.ts +50 -0
  515. package/src/__tests__/stdlib/player.test.ts +35 -0
  516. package/src/__tests__/stdlib/quaternion.test.ts +46 -0
  517. package/src/__tests__/stdlib/queue.test.ts +73 -0
  518. package/src/__tests__/stdlib/random.test.ts +50 -0
  519. package/src/__tests__/stdlib/result.test.ts +326 -0
  520. package/src/__tests__/stdlib/scheduler.test.ts +18 -7
  521. package/src/__tests__/stdlib/set_int.test.ts +62 -0
  522. package/src/__tests__/stdlib/sets.test.ts +28 -0
  523. package/src/__tests__/stdlib/signal.test.ts +60 -0
  524. package/src/__tests__/stdlib/spawn.test.ts +40 -0
  525. package/src/__tests__/stdlib/string.test.ts +224 -0
  526. package/src/__tests__/stdlib/strings.test.ts +55 -0
  527. package/src/__tests__/stdlib/tags.test.ts +32 -0
  528. package/src/__tests__/stdlib/teams.test.ts +45 -0
  529. package/src/__tests__/stdlib/timer.test.ts +53 -0
  530. package/src/__tests__/stdlib/vec.test.ts +72 -0
  531. package/src/__tests__/stdlib/world.test.ts +45 -0
  532. package/src/__tests__/struct-display.test.ts +69 -0
  533. package/src/__tests__/test-framework/runner.test.ts +208 -0
  534. package/src/__tests__/tuner/adapters.test.ts +232 -0
  535. package/src/__tests__/tuner/simulator-extra.test.ts +222 -0
  536. package/src/__tests__/tuple.test.ts +11 -4
  537. package/src/__tests__/typechecker-coverage.test.ts +671 -0
  538. package/src/__tests__/typechecker.test.ts +4 -3
  539. package/src/__tests__/watch-decorator.test.ts +59 -0
  540. package/src/ast/types.ts +65 -3
  541. package/src/cache/incremental.ts +128 -99
  542. package/src/cache/index.ts +35 -8
  543. package/src/cli.ts +538 -29
  544. package/src/config/project-config.ts +176 -0
  545. package/src/diagnostics/index.ts +22 -0
  546. package/src/docs.ts +98 -0
  547. package/src/emit/compile.ts +408 -51
  548. package/src/emit/index.ts +366 -18
  549. package/src/emit/modules.ts +19 -3
  550. package/src/emit/sourcemap.ts +64 -43
  551. package/src/formatter/index.ts +35 -8
  552. package/src/hir/deprecated.ts +212 -0
  553. package/src/hir/lower.ts +128 -8
  554. package/src/hir/monomorphize.ts +24 -2
  555. package/src/hir/types.ts +26 -1
  556. package/src/index.ts +23 -3
  557. package/src/lexer/index.ts +45 -6
  558. package/src/lint/index.ts +922 -0
  559. package/src/lir/lower.ts +30 -2
  560. package/src/lir/types.ts +4 -0
  561. package/src/lsp/server.ts +100 -1
  562. package/src/mir/lower.ts +785 -40
  563. package/src/mir/macro.ts +30 -2
  564. package/src/mir/types.ts +13 -0
  565. package/src/mir/verify.ts +10 -2
  566. package/src/optimizer/auto-inline.ts +86 -0
  567. package/src/optimizer/copy_prop.ts +2 -2
  568. package/src/optimizer/coroutine.ts +3 -3
  569. package/src/optimizer/cse.ts +205 -0
  570. package/src/optimizer/dce.ts +2 -2
  571. package/src/optimizer/inline.ts +335 -0
  572. package/src/optimizer/interprocedural.ts +5 -1
  573. package/src/optimizer/licm.ts +454 -0
  574. package/src/optimizer/nbt-coalesce.ts +109 -0
  575. package/src/optimizer/pipeline.ts +16 -2
  576. package/src/optimizer/scoreboard-batch.ts +52 -0
  577. package/src/optimizer/strength_reduction.ts +95 -0
  578. package/src/optimizer/tco.ts +267 -0
  579. package/src/optimizer/unroll.ts +2 -2
  580. package/src/parser/index.ts +426 -53
  581. package/src/repl-server.ts +102 -0
  582. package/src/stdlib/advanced.mcrs +271 -101
  583. package/src/stdlib/bigint.mcrs +97 -11
  584. package/src/stdlib/bits.mcrs +75 -12
  585. package/src/stdlib/bossbar.mcrs +37 -8
  586. package/src/stdlib/calculus.mcrs +82 -26
  587. package/src/stdlib/color.mcrs +98 -16
  588. package/src/stdlib/combat.mcrs +23 -5
  589. package/src/stdlib/cooldown.mcrs +19 -0
  590. package/src/stdlib/dialog.mcrs +45 -7
  591. package/src/stdlib/easing.mcrs +132 -12
  592. package/src/stdlib/ecs.mcrs +142 -25
  593. package/src/stdlib/effects.mcrs +88 -12
  594. package/src/stdlib/events.mcrs +21 -2
  595. package/src/stdlib/expr.mcrs +18 -3
  596. package/src/stdlib/fft.mcrs +66 -56
  597. package/src/stdlib/geometry.mcrs +137 -39
  598. package/src/stdlib/graph.mcrs +73 -0
  599. package/src/stdlib/heap.mcrs +49 -8
  600. package/src/stdlib/i18n/zh.yaml +2891 -0
  601. package/src/stdlib/interactions.mcrs +43 -20
  602. package/src/stdlib/inventory.mcrs +14 -3
  603. package/src/stdlib/linalg.mcrs +185 -30
  604. package/src/stdlib/list.mcrs +168 -18
  605. package/src/stdlib/map.mcrs +112 -0
  606. package/src/stdlib/math.mcrs +68 -18
  607. package/src/stdlib/math_hp.mcrs +124 -33
  608. package/src/stdlib/matrix.mcrs +133 -20
  609. package/src/stdlib/mobs.mcrs +87 -0
  610. package/src/stdlib/noise.mcrs +65 -21
  611. package/src/stdlib/ode.mcrs +96 -0
  612. package/src/stdlib/parabola.mcrs +104 -29
  613. package/src/stdlib/particles.mcrs +78 -21
  614. package/src/stdlib/pathfind.mcrs +89 -35
  615. package/src/stdlib/physics.mcrs +134 -26
  616. package/src/stdlib/player.mcrs +18 -0
  617. package/src/stdlib/quaternion.mcrs +213 -9
  618. package/src/stdlib/queue.mcrs +123 -0
  619. package/src/stdlib/random.mcrs +63 -18
  620. package/src/stdlib/result.mcrs +111 -0
  621. package/src/stdlib/scheduler.mcrs +59 -10
  622. package/src/stdlib/set_int.mcrs +240 -0
  623. package/src/stdlib/sets.mcrs +49 -19
  624. package/src/stdlib/signal.mcrs +151 -79
  625. package/src/stdlib/sort.mcrs +44 -24
  626. package/src/stdlib/spawn.mcrs +30 -7
  627. package/src/stdlib/state.mcrs +40 -5
  628. package/src/stdlib/strings.mcrs +131 -3
  629. package/src/stdlib/tags.mcrs +2 -2
  630. package/src/stdlib/teams.mcrs +22 -10
  631. package/src/stdlib/timer.mcrs +36 -6
  632. package/src/stdlib/vec.mcrs +44 -9
  633. package/src/stdlib/world.mcrs +57 -25
  634. package/src/structs/expand.ts +64 -0
  635. package/src/testing/runner.ts +271 -0
  636. package/src/typechecker/index.ts +273 -9
@@ -11,14 +11,16 @@
11
11
  // SETUP - Call once on @load
12
12
  // =============================================
13
13
 
14
- /// Initialize interaction scoreboards
14
+ /// Initializes the scoreboard objectives used by this module.
15
+ /// Call once during pack setup before any per-tick interaction checks.
16
+ /// Creates `rs.click`, `rs.sneak`, and `rs.attack`.
15
17
  fn interactions_init() {
16
18
  // Right click detection (carrot on a stick)
17
19
  scoreboard_add_objective("rs.click", "minecraft.used:minecraft.carrot_on_a_stick");
18
-
20
+
19
21
  // Sneak time tracking
20
22
  scoreboard_add_objective("rs.sneak", "minecraft.custom:minecraft.sneak_time");
21
-
23
+
22
24
  // Attack detection (left click on entity)
23
25
  scoreboard_add_objective("rs.attack", "minecraft.custom:minecraft.damage_dealt");
24
26
  }
@@ -29,8 +31,11 @@ fn interactions_init() {
29
31
  // Uses Carrot on a Stick item
30
32
  // Give players: /give @p carrot_on_a_stick{CustomModelData:1234}
31
33
 
32
- /// Check if player right-clicked (carrot on stick)
33
- /// Call this in @tick, resets after detection
34
+ /// Detects right-click input using the `rs.click` scoreboard.
35
+ /// Players with a positive click count are reset and tagged with `rs.clicked`.
36
+ /// The `callback_fn` parameter is reserved for future callback dispatch and is
37
+ /// not used by the current implementation.
38
+ /// @param callback_fn Reserved callback identifier, currently unused
34
39
  fn on_right_click(callback_fn: string) {
35
40
  // Players with click score > 0 have clicked
36
41
  foreach (p in @a) {
@@ -44,7 +49,8 @@ fn on_right_click(callback_fn: string) {
44
49
  }
45
50
  }
46
51
 
47
- /// Example: detect right click and do something
52
+ /// Demonstrates how to consume `rs.click` directly.
53
+ /// Broadcasts a message when a player right-clicks and resets the click count.
48
54
  fn example_right_click() {
49
55
  foreach (p in @a) {
50
56
  let clicks: int = scoreboard_get(p, "rs.click");
@@ -57,11 +63,13 @@ fn example_right_click() {
57
63
  }
58
64
 
59
65
  // =============================================
60
- // SNEAK DETECTION
66
+ // SNEAK DETECTION
61
67
  // =============================================
62
68
 
63
- /// Check if player just started sneaking
64
- /// Returns 1 if sneaking, 0 otherwise
69
+ /// Returns whether the target is currently sneaking.
70
+ /// This checks whether `rs.sneak` is greater than zero.
71
+ /// @param target Player selector to inspect
72
+ /// @returns `1` if sneaking, otherwise `0`
65
73
  fn is_sneaking(target: selector) -> int {
66
74
  let sneak_time: int = scoreboard_get(target, "rs.sneak");
67
75
  if (sneak_time > 0) {
@@ -70,7 +78,9 @@ fn is_sneaking(target: selector) -> int {
70
78
  return 0;
71
79
  }
72
80
 
73
- /// Detect sneak start (first tick of sneaking)
81
+ /// Tags players who started sneaking on the current tick.
82
+ /// Players with `rs.sneak == 1` receive the `rs.sneak_start` tag, and the tag
83
+ /// is removed from everyone else.
74
84
  fn on_sneak_start() {
75
85
  foreach (p in @a) {
76
86
  let sneak_time: int = scoreboard_get(p, "rs.sneak");
@@ -88,7 +98,8 @@ fn on_sneak_start() {
88
98
  // =============================================
89
99
  // Uses execute with rotation checks
90
100
 
91
- /// Check if player is looking up (pitch < -45)
101
+ /// Tags players currently looking upward.
102
+ /// Players with pitch from `-90` to `-45` receive the `rs.look_up` tag.
92
103
  fn check_look_up() {
93
104
  // Now supports p[filters] syntax sugar!
94
105
  foreach (p in @a) {
@@ -101,7 +112,8 @@ fn check_look_up() {
101
112
  }
102
113
  }
103
114
 
104
- /// Check if player is looking down (pitch > 45)
115
+ /// Tags players currently looking downward.
116
+ /// Players with pitch from `45` to `90` receive the `rs.look_down` tag.
105
117
  fn check_look_down() {
106
118
  foreach (p in @a) {
107
119
  execute if entity p[x_rotation=45..90] run {
@@ -113,7 +125,8 @@ fn check_look_down() {
113
125
  }
114
126
  }
115
127
 
116
- /// Check if player is looking straight (pitch -45 to 45)
128
+ /// Tags players currently looking roughly straight ahead.
129
+ /// Players with pitch from `-45` to `45` receive the `rs.look_straight` tag.
117
130
  fn check_look_straight() {
118
131
  foreach (p in @a) {
119
132
  execute if entity p[x_rotation=-45..45] run {
@@ -130,15 +143,17 @@ fn check_look_straight() {
130
143
  // =============================================
131
144
  // Use execute if data or predicates
132
145
 
133
- /// Check if holding specific item (by tag)
134
- /// Usage: check_holding_tag("my_wand") checks for tag rs.holding.my_wand
146
+ /// Placeholder helper for item-in-hand checks.
147
+ /// The current implementation only prints guidance because robust item checks
148
+ /// require predicates or explicit NBT checks.
149
+ /// @param item_id Expected item identifier or logical item key
135
150
  fn check_holding_item(item_id: string) {
136
151
  // This requires predicate files in datapack
137
152
  // Example predicate: data/ns/predicates/holding_diamond_sword.json
138
- // { "condition": "minecraft:entity_properties",
153
+ // { "condition": "minecraft:entity_properties",
139
154
  // "entity": "this",
140
155
  // "predicate": { "equipment": { "mainhand": { "items": ["minecraft:diamond_sword"] }}}}
141
-
156
+
142
157
  // For now, use NBT check via execute
143
158
  say("Use execute if data for item checks");
144
159
  }
@@ -148,12 +163,14 @@ fn check_holding_item(item_id: string) {
148
163
  // =============================================
149
164
  // Common pattern: Sneak + Use for special ability
150
165
 
151
- /// Detect sneak + right click combo
166
+ /// Detects a sneak-plus-right-click combo.
167
+ /// Players who click while sneaking receive `rs.sneak_click`; otherwise they
168
+ /// receive the normal `rs.clicked` tag. Click counters are reset in both cases.
152
169
  fn on_sneak_click() {
153
170
  foreach (p in @a) {
154
171
  let clicks: int = scoreboard_get(p, "rs.click");
155
172
  let sneak: int = scoreboard_get(p, "rs.sneak");
156
-
173
+
157
174
  if (clicks > 0) {
158
175
  if (sneak > 0) {
159
176
  // Sneak + Click!
@@ -174,14 +191,20 @@ fn on_sneak_click() {
174
191
  // Detect double-tap sneak (toggle fly, etc)
175
192
 
176
193
  let last_sneak_tick: int = 0;
194
+
195
+ /// Double-sneak detection window in ticks.
196
+ /// A second sneak start within this many ticks counts as a double tap.
177
197
  const DOUBLE_TAP_WINDOW: int = 10; // 0.5 second
178
198
 
199
+ /// Detects a double-tap sneak pattern.
200
+ /// Requires external scoreboards `rs.last_sneak` and `rs.tick` to be updated by
201
+ /// the caller. Players who qualify receive the `rs.double_sneak` tag.
179
202
  fn on_double_sneak() {
180
203
  foreach (p in @a) {
181
204
  let sneak: int = scoreboard_get(p, "rs.sneak");
182
205
  let last: int = scoreboard_get(p, "rs.last_sneak");
183
206
  let now: int = scoreboard_get(p, "rs.tick");
184
-
207
+
185
208
  // Just started sneaking
186
209
  if (sneak == 1) {
187
210
  let diff: int = now - last;
@@ -1,11 +1,14 @@
1
1
  // Inventory management helpers
2
2
 
3
- /// Clear all items from a player's inventory
3
+ /// Clears all inventory slots from the target selector.
4
+ /// @param target Player or entity selector whose inventory should be cleared
4
5
  fn clear_inventory(target: selector) {
5
6
  clear(target);
6
7
  }
7
8
 
8
- /// Give a kit of items to a player
9
+ /// Gives a melee-focused warrior kit to the target selector.
10
+ /// The kit includes iron armor, a sword, a shield, and food.
11
+ /// @param target Player or entity selector receiving the kit
9
12
  fn give_kit_warrior(target: selector) {
10
13
  give(target, "minecraft:iron_sword", 1);
11
14
  give(target, "minecraft:iron_chestplate", 1);
@@ -15,6 +18,9 @@ fn give_kit_warrior(target: selector) {
15
18
  give(target, "minecraft:cooked_beef", 16);
16
19
  }
17
20
 
21
+ /// Gives a ranged archer kit to the target selector.
22
+ /// The kit includes a bow, arrows, light armor, and food.
23
+ /// @param target Player or entity selector receiving the kit
18
24
  fn give_kit_archer(target: selector) {
19
25
  give(target, "minecraft:bow", 1);
20
26
  give(target, "minecraft:arrow", 64);
@@ -24,6 +30,9 @@ fn give_kit_archer(target: selector) {
24
30
  give(target, "minecraft:cooked_beef", 16);
25
31
  }
26
32
 
33
+ /// Gives a utility-heavy mage kit to the target selector.
34
+ /// The kit includes mobility, consumables, and splash damage items.
35
+ /// @param target Player or entity selector receiving the kit
27
36
  fn give_kit_mage(target: selector) {
28
37
  give(target, "minecraft:wooden_sword", 1);
29
38
  give(target, "minecraft:golden_apple", 8);
@@ -32,7 +41,9 @@ fn give_kit_mage(target: selector) {
32
41
  give(target, "minecraft:cooked_beef", 16);
33
42
  }
34
43
 
35
- /// Remove a specific item from player
44
+ /// Removes all copies of a specific item from the target selector.
45
+ /// @param target Player or entity selector whose inventory will be filtered
46
+ /// @param item Item ID or item-with-NBT argument accepted by `clear`
36
47
  fn remove_item(target: selector, item: string) {
37
48
  clear(target, item);
38
49
  }
@@ -31,14 +31,30 @@ module library;
31
31
 
32
32
  // ─── 2D Vector ────────────────────────────────────────────────────────────────
33
33
 
34
- // vec2d_dot(ax, ay, bx, by): dot product of 2D vectors a and b.
34
+ /// Dot product of two 2D vectors.
35
+ ///
36
+ /// @since 2.0.0
37
+ /// @param ax X component of vector A
38
+ /// @param ay Y component of vector A
39
+ /// @param bx X component of vector B
40
+ /// @param by Y component of vector B
41
+ /// @returns `ax*bx + ay*by`
42
+ /// @example
43
+ /// let d: double = vec2d_dot(1.0d, 0.0d, 0.0d, 1.0d)
35
44
  fn vec2d_dot(ax: double, ay: double, bx: double, by: double): double {
36
45
  let t0: double = ax * bx;
37
46
  let t1: double = ay * by;
38
47
  return t0 + t1;
39
48
  }
40
49
 
41
- // vec2d_length(x, y): Euclidean length of 2D vector.
50
+ /// Euclidean length of a 2D vector.
51
+ ///
52
+ /// @since 2.0.0
53
+ /// @param x X component
54
+ /// @param y Y component
55
+ /// @returns `sqrt(x² + y²)`
56
+ /// @example
57
+ /// let len: double = vec2d_length(3.0d, 4.0d)
42
58
  fn vec2d_length(x: double, y: double): double {
43
59
  let xx: double = x * x;
44
60
  let yy: double = y * y;
@@ -46,14 +62,23 @@ fn vec2d_length(x: double, y: double): double {
46
62
  return double_sqrt(s) as double;
47
63
  }
48
64
 
49
- // vec2d_dist(ax, ay, bx, by): Euclidean distance between two 2D points.
65
+ /// Euclidean distance between two 2D points.
66
+ ///
67
+ /// @since 2.0.0
68
+ /// @param ax X coordinate of point A
69
+ /// @param ay Y coordinate of point A
70
+ /// @param bx X coordinate of point B
71
+ /// @param by Y coordinate of point B
72
+ /// @returns `sqrt((ax-bx)² + (ay-by)²)`
73
+ /// @example
74
+ /// let dist: double = vec2d_dist(0.0d, 0.0d, 3.0d, 4.0d)
50
75
  fn vec2d_dist(ax: double, ay: double, bx: double, by: double): double {
51
76
  let dx: double = ax - bx;
52
77
  let dy: double = ay - by;
53
78
  return vec2d_length(dx, dy);
54
79
  }
55
80
 
56
- // _vec2d_len_sq_fx(x, y): squared length as ×10000 fixed int (for zero-check).
81
+ // _vec2d_len_sq_fx(x, y): squared length as integer (for zero-check).
57
82
  fn _vec2d_len_sq_fx(x: double, y: double): int {
58
83
  let xx: double = x * x;
59
84
  let yy: double = y * y;
@@ -61,8 +86,16 @@ fn _vec2d_len_sq_fx(x: double, y: double): int {
61
86
  return sq as int;
62
87
  }
63
88
 
64
- // vec2d_normalize_x(x, y): x component of the unit vector.
65
- // Returns 0.0 if the vector has zero length.
89
+ /// X component of the normalized unit vector for a 2D vector.
90
+ ///
91
+ /// Returns `0.0` if the vector has zero length.
92
+ ///
93
+ /// @since 2.0.0
94
+ /// @param x X component
95
+ /// @param y Y component
96
+ /// @returns `x / ||(x, y)||`, or `0.0` for a zero vector
97
+ /// @example
98
+ /// let nx: double = vec2d_normalize_x(3.0d, 4.0d)
66
99
  fn vec2d_normalize_x(x: double, y: double): double {
67
100
  let sq_fx: int = _vec2d_len_sq_fx(x, y);
68
101
  if (sq_fx == 0) {
@@ -72,8 +105,16 @@ fn vec2d_normalize_x(x: double, y: double): double {
72
105
  return x / len;
73
106
  }
74
107
 
75
- // vec2d_normalize_y(x, y): y component of the unit vector.
76
- // Returns 0.0 if the vector has zero length.
108
+ /// Y component of the normalized unit vector for a 2D vector.
109
+ ///
110
+ /// Returns `0.0` if the vector has zero length.
111
+ ///
112
+ /// @since 2.0.0
113
+ /// @param x X component
114
+ /// @param y Y component
115
+ /// @returns `y / ||(x, y)||`, or `0.0` for a zero vector
116
+ /// @example
117
+ /// let ny: double = vec2d_normalize_y(3.0d, 4.0d)
77
118
  fn vec2d_normalize_y(x: double, y: double): double {
78
119
  let sq_fx: int = _vec2d_len_sq_fx(x, y);
79
120
  if (sq_fx == 0) {
@@ -85,7 +126,18 @@ fn vec2d_normalize_y(x: double, y: double): double {
85
126
 
86
127
  // ─── 3D Vector ────────────────────────────────────────────────────────────────
87
128
 
88
- // vec3d_dot(ax,ay,az, bx,by,bz): dot product of 3D vectors a and b.
129
+ /// Dot product of two 3D vectors.
130
+ ///
131
+ /// @since 2.0.0
132
+ /// @param ax X component of vector A
133
+ /// @param ay Y component of vector A
134
+ /// @param az Z component of vector A
135
+ /// @param bx X component of vector B
136
+ /// @param by Y component of vector B
137
+ /// @param bz Z component of vector B
138
+ /// @returns `ax*bx + ay*by + az*bz`
139
+ /// @example
140
+ /// let d: double = vec3d_dot(1.0d, 0.0d, 0.0d, 0.0d, 1.0d, 0.0d)
89
141
  fn vec3d_dot(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double {
90
142
  let t0: double = ax * bx;
91
143
  let t1: double = ay * by;
@@ -94,7 +146,15 @@ fn vec3d_dot(ax: double, ay: double, az: double, bx: double, by: double, bz: dou
94
146
  return s + t2;
95
147
  }
96
148
 
97
- // vec3d_length(x, y, z): Euclidean length of 3D vector.
149
+ /// Euclidean length of a 3D vector.
150
+ ///
151
+ /// @since 2.0.0
152
+ /// @param x X component
153
+ /// @param y Y component
154
+ /// @param z Z component
155
+ /// @returns `sqrt(x² + y² + z²)`
156
+ /// @example
157
+ /// let len: double = vec3d_length(1.0d, 2.0d, 2.0d)
98
158
  fn vec3d_length(x: double, y: double, z: double): double {
99
159
  let xx: double = x * x;
100
160
  let yy: double = y * y;
@@ -104,7 +164,16 @@ fn vec3d_length(x: double, y: double, z: double): double {
104
164
  return double_sqrt(s2) as double;
105
165
  }
106
166
 
107
- // vec3d_dist(ax,ay,az, bx,by,bz): Euclidean distance between two 3D points.
167
+ /// Euclidean distance between two 3D points.
168
+ ///
169
+ /// @since 2.0.0
170
+ /// @param ax X coordinate of point A
171
+ /// @param ay Y coordinate of point A
172
+ /// @param az Z coordinate of point A
173
+ /// @param bx X coordinate of point B
174
+ /// @param by Y coordinate of point B
175
+ /// @param bz Z coordinate of point B
176
+ /// @returns `sqrt((ax-bx)² + (ay-by)² + (az-bz)²)`
108
177
  fn vec3d_dist(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double {
109
178
  let dx: double = ax - bx;
110
179
  let dy: double = ay - by;
@@ -112,28 +181,43 @@ fn vec3d_dist(ax: double, ay: double, az: double, bx: double, by: double, bz: do
112
181
  return vec3d_length(dx, dy, dz);
113
182
  }
114
183
 
115
- // vec3d_cross_x: x component of cross product a × b.
184
+ /// X component of the cross product `a × b`.
185
+ ///
186
+ /// @since 2.0.0
187
+ /// @param ax X of A @param ay Y of A @param az Z of A
188
+ /// @param bx X of B @param by Y of B @param bz Z of B
189
+ /// @returns `ay*bz - az*by`
116
190
  fn vec3d_cross_x(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double {
117
191
  let t0: double = ay * bz;
118
192
  let t1: double = az * by;
119
193
  return t0 - t1;
120
194
  }
121
195
 
122
- // vec3d_cross_y: y component of cross product a × b.
196
+ /// Y component of the cross product `a × b`.
197
+ ///
198
+ /// @since 2.0.0
199
+ /// @param ax X of A @param ay Y of A @param az Z of A
200
+ /// @param bx X of B @param by Y of B @param bz Z of B
201
+ /// @returns `az*bx - ax*bz`
123
202
  fn vec3d_cross_y(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double {
124
203
  let t0: double = az * bx;
125
204
  let t1: double = ax * bz;
126
205
  return t0 - t1;
127
206
  }
128
207
 
129
- // vec3d_cross_z: z component of cross product a × b.
208
+ /// Z component of the cross product `a × b`.
209
+ ///
210
+ /// @since 2.0.0
211
+ /// @param ax X of A @param ay Y of A @param az Z of A
212
+ /// @param bx X of B @param by Y of B @param bz Z of B
213
+ /// @returns `ax*by - ay*bx`
130
214
  fn vec3d_cross_z(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double {
131
215
  let t0: double = ax * by;
132
216
  let t1: double = ay * bx;
133
217
  return t0 - t1;
134
218
  }
135
219
 
136
- // _vec3d_len_sq_fx(x, y, z): squared length as ×10000 fixed int (for zero-check).
220
+ // _vec3d_len_sq_fx(x, y, z): squared length as integer (for zero-check).
137
221
  fn _vec3d_len_sq_fx(x: double, y: double, z: double): int {
138
222
  let xx: double = x * x;
139
223
  let yy: double = y * y;
@@ -143,8 +227,15 @@ fn _vec3d_len_sq_fx(x: double, y: double, z: double): int {
143
227
  return sq as int;
144
228
  }
145
229
 
146
- // vec3d_normalize_x(x, y, z): x component of the unit vector.
147
- // Returns 0.0 if the vector has zero length.
230
+ /// X component of the normalized unit vector for a 3D vector.
231
+ ///
232
+ /// Returns `0.0` if the vector has zero length.
233
+ ///
234
+ /// @since 2.0.0
235
+ /// @param x X component @param y Y component @param z Z component
236
+ /// @returns `x / ||(x, y, z)||`, or `0.0` for a zero vector
237
+ /// @example
238
+ /// let nx: double = vec3d_normalize_x(3.0d, 4.0d, 0.0d)
148
239
  fn vec3d_normalize_x(x: double, y: double, z: double): double {
149
240
  let sq_fx: int = _vec3d_len_sq_fx(x, y, z);
150
241
  if (sq_fx == 0) {
@@ -154,8 +245,13 @@ fn vec3d_normalize_x(x: double, y: double, z: double): double {
154
245
  return x / len;
155
246
  }
156
247
 
157
- // vec3d_normalize_y(x, y, z): y component of the unit vector.
158
- // Returns 0.0 if the vector has zero length.
248
+ /// Y component of the normalized unit vector for a 3D vector.
249
+ ///
250
+ /// Returns `0.0` if the vector has zero length.
251
+ ///
252
+ /// @since 2.0.0
253
+ /// @param x X component @param y Y component @param z Z component
254
+ /// @returns `y / ||(x, y, z)||`, or `0.0` for a zero vector
159
255
  fn vec3d_normalize_y(x: double, y: double, z: double): double {
160
256
  let sq_fx: int = _vec3d_len_sq_fx(x, y, z);
161
257
  if (sq_fx == 0) {
@@ -165,8 +261,13 @@ fn vec3d_normalize_y(x: double, y: double, z: double): double {
165
261
  return y / len;
166
262
  }
167
263
 
168
- // vec3d_normalize_z(x, y, z): z component of the unit vector.
169
- // Returns 0.0 if the vector has zero length.
264
+ /// Z component of the normalized unit vector for a 3D vector.
265
+ ///
266
+ /// Returns `0.0` if the vector has zero length.
267
+ ///
268
+ /// @since 2.0.0
269
+ /// @param x X component @param y Y component @param z Z component
270
+ /// @returns `z / ||(x, y, z)||`, or `0.0` for a zero vector
170
271
  fn vec3d_normalize_z(x: double, y: double, z: double): double {
171
272
  let sq_fx: int = _vec3d_len_sq_fx(x, y, z);
172
273
  if (sq_fx == 0) {
@@ -182,49 +283,83 @@ fn vec3d_normalize_z(x: double, y: double, z: double): double {
182
283
  // [ a b ] a = m[0,0] b = m[0,1]
183
284
  // [ c d ] c = m[1,0] d = m[1,1]
184
285
 
185
- // mat2d_det(a,b,c,d): determinant of a 2×2 matrix.
286
+ /// Determinant of a 2×2 matrix `[[a, b], [c, d]]`.
287
+ ///
288
+ /// @since 2.0.0
289
+ /// @param a Element [0,0] @param b Element [0,1]
290
+ /// @param c Element [1,0] @param d Element [1,1]
291
+ /// @returns `a*d - b*c`
292
+ /// @example
293
+ /// let det: double = mat2d_det(1.0d, 2.0d, 3.0d, 4.0d)
186
294
  fn mat2d_det(a: double, b: double, c: double, d: double): double {
187
295
  let t0: double = a * d;
188
296
  let t1: double = b * c;
189
297
  return t0 - t1;
190
298
  }
191
299
 
192
- // mat2d_mul_r0c0: element [0,0] of matrix product M0 × M1.
300
+ /// Element [0,0] of the 2×2 matrix product `M0 × M1`.
301
+ ///
302
+ /// @since 2.0.0
303
+ /// @param a0 M0 row-major elements (a0, b0, c0, d0)
304
+ /// @param a1 M1 row-major elements (a1, b1, c1, d1)
305
+ /// @returns `a0*a1 + b0*c1`
193
306
  fn mat2d_mul_r0c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double {
194
307
  let t0: double = a0 * a1;
195
308
  let t1: double = b0 * c1;
196
309
  return t0 + t1;
197
310
  }
198
311
 
199
- // mat2d_mul_r0c1: element [0,1] of matrix product M0 × M1.
312
+ /// Element [0,1] of the 2×2 matrix product `M0 × M1`.
313
+ ///
314
+ /// @since 2.0.0
315
+ /// @param a0 M0 row-major elements @param a1 M1 row-major elements
316
+ /// @returns `a0*b1 + b0*d1`
200
317
  fn mat2d_mul_r0c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double {
201
318
  let t0: double = a0 * b1;
202
319
  let t1: double = b0 * d1;
203
320
  return t0 + t1;
204
321
  }
205
322
 
206
- // mat2d_mul_r1c0: element [1,0] of matrix product M0 × M1.
323
+ /// Element [1,0] of the 2×2 matrix product `M0 × M1`.
324
+ ///
325
+ /// @since 2.0.0
326
+ /// @param a0 M0 row-major elements @param a1 M1 row-major elements
327
+ /// @returns `c0*a1 + d0*c1`
207
328
  fn mat2d_mul_r1c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double {
208
329
  let t0: double = c0 * a1;
209
330
  let t1: double = d0 * c1;
210
331
  return t0 + t1;
211
332
  }
212
333
 
213
- // mat2d_mul_r1c1: element [1,1] of matrix product M0 × M1.
334
+ /// Element [1,1] of the 2×2 matrix product `M0 × M1`.
335
+ ///
336
+ /// @since 2.0.0
337
+ /// @param a0 M0 row-major elements @param a1 M1 row-major elements
338
+ /// @returns `c0*b1 + d0*d1`
214
339
  fn mat2d_mul_r1c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double {
215
340
  let t0: double = c0 * b1;
216
341
  let t1: double = d0 * d1;
217
342
  return t0 + t1;
218
343
  }
219
344
 
220
- // mat2d_vecmul_x(a,b,c,d, vx,vy): x component of matrix-vector product M × v.
345
+ /// X component of the 2×2 matrixvector product `M × v`.
346
+ ///
347
+ /// @since 2.0.0
348
+ /// @param a M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1]
349
+ /// @param vx Vector X component @param vy Vector Y component
350
+ /// @returns `a*vx + b*vy`
221
351
  fn mat2d_vecmul_x(a: double, b: double, c: double, d: double, vx: double, vy: double): double {
222
352
  let t0: double = a * vx;
223
353
  let t1: double = b * vy;
224
354
  return t0 + t1;
225
355
  }
226
356
 
227
- // mat2d_vecmul_y(a,b,c,d, vx,vy): y component of matrix-vector product M × v.
357
+ /// Y component of the 2×2 matrixvector product `M × v`.
358
+ ///
359
+ /// @since 2.0.0
360
+ /// @param a M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1]
361
+ /// @param vx Vector X component @param vy Vector Y component
362
+ /// @returns `c*vx + d*vy`
228
363
  fn mat2d_vecmul_y(a: double, b: double, c: double, d: double, vx: double, vy: double): double {
229
364
  let t0: double = c * vx;
230
365
  let t1: double = d * vy;
@@ -241,7 +376,17 @@ fn mat2d_vecmul_y(a: double, b: double, c: double, d: double, vx: double, vy: do
241
376
  //
242
377
  // NOTE: det must be non-zero; no guard is applied (caller's responsibility).
243
378
 
244
- // solve2d_x: x solution component via Cramer's rule.
379
+ /// X solution of the 2×2 linear system `[a b; c d] * [x; y] = [ex; ey]` via Cramer's rule.
380
+ ///
381
+ /// Caller must ensure `det(a, b, c, d) ≠ 0`.
382
+ ///
383
+ /// @since 2.0.0
384
+ /// @param a M[0,0] @param b M[0,1]
385
+ /// @param c M[1,0] @param d M[1,1]
386
+ /// @param ex RHS x @param ey RHS y
387
+ /// @returns `(ex*d - b*ey) / det`
388
+ /// @example
389
+ /// let x: double = solve2d_x(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
245
390
  fn solve2d_x(a: double, b: double, c: double, d: double, ex: double, ey: double): double {
246
391
  let num: double = ex * d;
247
392
  let sub: double = b * ey;
@@ -250,7 +395,17 @@ fn solve2d_x(a: double, b: double, c: double, d: double, ex: double, ey: double)
250
395
  return numer / det;
251
396
  }
252
397
 
253
- // solve2d_y: y solution component via Cramer's rule.
398
+ /// Y solution of the 2×2 linear system `[a b; c d] * [x; y] = [ex; ey]` via Cramer's rule.
399
+ ///
400
+ /// Caller must ensure `det(a, b, c, d) ≠ 0`.
401
+ ///
402
+ /// @since 2.0.0
403
+ /// @param a M[0,0] @param b M[0,1]
404
+ /// @param c M[1,0] @param d M[1,1]
405
+ /// @param ex RHS x @param ey RHS y
406
+ /// @returns `(a*ey - ex*c) / det`
407
+ /// @example
408
+ /// let y: double = solve2d_y(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
254
409
  fn solve2d_y(a: double, b: double, c: double, d: double, ex: double, ey: double): double {
255
410
  let num: double = a * ey;
256
411
  let sub: double = ex * c;