redscript-mc 3.0.1 → 3.0.2

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 (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,557 @@
1
+ # Linalg
2
+
3
+ > Auto-generated from `src/stdlib/linalg.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [vec2d_dot](#vec2d-dot)
8
+ - [vec2d_length](#vec2d-length)
9
+ - [vec2d_dist](#vec2d-dist)
10
+ - [vec2d_normalize_x](#vec2d-normalize-x)
11
+ - [vec2d_normalize_y](#vec2d-normalize-y)
12
+ - [vec3d_dot](#vec3d-dot)
13
+ - [vec3d_length](#vec3d-length)
14
+ - [vec3d_dist](#vec3d-dist)
15
+ - [vec3d_cross_x](#vec3d-cross-x)
16
+ - [vec3d_cross_y](#vec3d-cross-y)
17
+ - [vec3d_cross_z](#vec3d-cross-z)
18
+ - [vec3d_normalize_x](#vec3d-normalize-x)
19
+ - [vec3d_normalize_y](#vec3d-normalize-y)
20
+ - [vec3d_normalize_z](#vec3d-normalize-z)
21
+ - [mat2d_det](#mat2d-det)
22
+ - [mat2d_mul_r0c0](#mat2d-mul-r0c0)
23
+ - [mat2d_mul_r0c1](#mat2d-mul-r0c1)
24
+ - [mat2d_mul_r1c0](#mat2d-mul-r1c0)
25
+ - [mat2d_mul_r1c1](#mat2d-mul-r1c1)
26
+ - [mat2d_vecmul_x](#mat2d-vecmul-x)
27
+ - [mat2d_vecmul_y](#mat2d-vecmul-y)
28
+ - [solve2d_x](#solve2d-x)
29
+ - [solve2d_y](#solve2d-y)
30
+
31
+ ---
32
+
33
+ ## `vec2d_dot` <Badge type="info" text="v2.0.0" />
34
+
35
+ Dot product of two 2D vectors.
36
+
37
+ ```redscript
38
+ fn vec2d_dot(ax: double, ay: double, bx: double, by: double): double
39
+ ```
40
+
41
+ **Parameters**
42
+
43
+ | Parameter | Description |
44
+ |-----------|-------------|
45
+ | `ax` | X component of vector A |
46
+ | `ay` | Y component of vector A |
47
+ | `bx` | X component of vector B |
48
+ | `by` | Y component of vector B |
49
+
50
+ **Returns:** `ax*bx + ay*by`
51
+
52
+ **Example**
53
+
54
+ ```redscript
55
+ let d: double = vec2d_dot(1.0d, 0.0d, 0.0d, 1.0d)
56
+ ```
57
+
58
+ ---
59
+
60
+ ## `vec2d_length` <Badge type="info" text="v2.0.0" />
61
+
62
+ Euclidean length of a 2D vector.
63
+
64
+ ```redscript
65
+ fn vec2d_length(x: double, y: double): double
66
+ ```
67
+
68
+ **Parameters**
69
+
70
+ | Parameter | Description |
71
+ |-----------|-------------|
72
+ | `x` | X component |
73
+ | `y` | Y component |
74
+
75
+ **Returns:** `sqrt(x² + y²)`
76
+
77
+ **Example**
78
+
79
+ ```redscript
80
+ let len: double = vec2d_length(3.0d, 4.0d)
81
+ ```
82
+
83
+ ---
84
+
85
+ ## `vec2d_dist` <Badge type="info" text="v2.0.0" />
86
+
87
+ Euclidean distance between two 2D points.
88
+
89
+ ```redscript
90
+ fn vec2d_dist(ax: double, ay: double, bx: double, by: double): double
91
+ ```
92
+
93
+ **Parameters**
94
+
95
+ | Parameter | Description |
96
+ |-----------|-------------|
97
+ | `ax` | X coordinate of point A |
98
+ | `ay` | Y coordinate of point A |
99
+ | `bx` | X coordinate of point B |
100
+ | `by` | Y coordinate of point B |
101
+
102
+ **Returns:** `sqrt((ax-bx)² + (ay-by)²)`
103
+
104
+ **Example**
105
+
106
+ ```redscript
107
+ let dist: double = vec2d_dist(0.0d, 0.0d, 3.0d, 4.0d)
108
+ ```
109
+
110
+ ---
111
+
112
+ ## `vec2d_normalize_x` <Badge type="info" text="v2.0.0" />
113
+
114
+ X component of the normalized unit vector for a 2D vector.
115
+
116
+ Returns `0.0` if the vector has zero length.
117
+
118
+ ```redscript
119
+ fn vec2d_normalize_x(x: double, y: double): double
120
+ ```
121
+
122
+ **Parameters**
123
+
124
+ | Parameter | Description |
125
+ |-----------|-------------|
126
+ | `x` | X component |
127
+ | `y` | Y component |
128
+
129
+ **Returns:** `x / ||(x, y)||`, or `0.0` for a zero vector
130
+
131
+ **Example**
132
+
133
+ ```redscript
134
+ let nx: double = vec2d_normalize_x(3.0d, 4.0d)
135
+ ```
136
+
137
+ ---
138
+
139
+ ## `vec2d_normalize_y` <Badge type="info" text="v2.0.0" />
140
+
141
+ Y component of the normalized unit vector for a 2D vector.
142
+
143
+ Returns `0.0` if the vector has zero length.
144
+
145
+ ```redscript
146
+ fn vec2d_normalize_y(x: double, y: double): double
147
+ ```
148
+
149
+ **Parameters**
150
+
151
+ | Parameter | Description |
152
+ |-----------|-------------|
153
+ | `x` | X component |
154
+ | `y` | Y component |
155
+
156
+ **Returns:** `y / ||(x, y)||`, or `0.0` for a zero vector
157
+
158
+ **Example**
159
+
160
+ ```redscript
161
+ let ny: double = vec2d_normalize_y(3.0d, 4.0d)
162
+ ```
163
+
164
+ ---
165
+
166
+ ## `vec3d_dot` <Badge type="info" text="v2.0.0" />
167
+
168
+ Dot product of two 3D vectors.
169
+
170
+ ```redscript
171
+ fn vec3d_dot(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
172
+ ```
173
+
174
+ **Parameters**
175
+
176
+ | Parameter | Description |
177
+ |-----------|-------------|
178
+ | `ax` | X component of vector A |
179
+ | `ay` | Y component of vector A |
180
+ | `az` | Z component of vector A |
181
+ | `bx` | X component of vector B |
182
+ | `by` | Y component of vector B |
183
+ | `bz` | Z component of vector B |
184
+
185
+ **Returns:** `ax*bx + ay*by + az*bz`
186
+
187
+ **Example**
188
+
189
+ ```redscript
190
+ let d: double = vec3d_dot(1.0d, 0.0d, 0.0d, 0.0d, 1.0d, 0.0d)
191
+ ```
192
+
193
+ ---
194
+
195
+ ## `vec3d_length` <Badge type="info" text="v2.0.0" />
196
+
197
+ Euclidean length of a 3D vector.
198
+
199
+ ```redscript
200
+ fn vec3d_length(x: double, y: double, z: double): double
201
+ ```
202
+
203
+ **Parameters**
204
+
205
+ | Parameter | Description |
206
+ |-----------|-------------|
207
+ | `x` | X component |
208
+ | `y` | Y component |
209
+ | `z` | Z component |
210
+
211
+ **Returns:** `sqrt(x² + y² + z²)`
212
+
213
+ **Example**
214
+
215
+ ```redscript
216
+ let len: double = vec3d_length(1.0d, 2.0d, 2.0d)
217
+ ```
218
+
219
+ ---
220
+
221
+ ## `vec3d_dist` <Badge type="info" text="v2.0.0" />
222
+
223
+ Euclidean distance between two 3D points.
224
+
225
+ ```redscript
226
+ fn vec3d_dist(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
227
+ ```
228
+
229
+ **Parameters**
230
+
231
+ | Parameter | Description |
232
+ |-----------|-------------|
233
+ | `ax` | X coordinate of point A |
234
+ | `ay` | Y coordinate of point A |
235
+ | `az` | Z coordinate of point A |
236
+ | `bx` | X coordinate of point B |
237
+ | `by` | Y coordinate of point B |
238
+ | `bz` | Z coordinate of point B |
239
+
240
+ **Returns:** `sqrt((ax-bx)² + (ay-by)² + (az-bz)²)`
241
+
242
+ ---
243
+
244
+ ## `vec3d_cross_x` <Badge type="info" text="v2.0.0" />
245
+
246
+ X component of the cross product `a × b`.
247
+
248
+ ```redscript
249
+ fn vec3d_cross_x(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
250
+ ```
251
+
252
+ **Parameters**
253
+
254
+ | Parameter | Description |
255
+ |-----------|-------------|
256
+ | `ax` | X of A @param ay Y of A @param az Z of A |
257
+ | `bx` | X of B @param by Y of B @param bz Z of B |
258
+
259
+ **Returns:** `ay*bz - az*by`
260
+
261
+ ---
262
+
263
+ ## `vec3d_cross_y` <Badge type="info" text="v2.0.0" />
264
+
265
+ Y component of the cross product `a × b`.
266
+
267
+ ```redscript
268
+ fn vec3d_cross_y(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
269
+ ```
270
+
271
+ **Parameters**
272
+
273
+ | Parameter | Description |
274
+ |-----------|-------------|
275
+ | `ax` | X of A @param ay Y of A @param az Z of A |
276
+ | `bx` | X of B @param by Y of B @param bz Z of B |
277
+
278
+ **Returns:** `az*bx - ax*bz`
279
+
280
+ ---
281
+
282
+ ## `vec3d_cross_z` <Badge type="info" text="v2.0.0" />
283
+
284
+ Z component of the cross product `a × b`.
285
+
286
+ ```redscript
287
+ fn vec3d_cross_z(ax: double, ay: double, az: double, bx: double, by: double, bz: double): double
288
+ ```
289
+
290
+ **Parameters**
291
+
292
+ | Parameter | Description |
293
+ |-----------|-------------|
294
+ | `ax` | X of A @param ay Y of A @param az Z of A |
295
+ | `bx` | X of B @param by Y of B @param bz Z of B |
296
+
297
+ **Returns:** `ax*by - ay*bx`
298
+
299
+ ---
300
+
301
+ ## `vec3d_normalize_x` <Badge type="info" text="v2.0.0" />
302
+
303
+ X component of the normalized unit vector for a 3D vector.
304
+
305
+ Returns `0.0` if the vector has zero length.
306
+
307
+ ```redscript
308
+ fn vec3d_normalize_x(x: double, y: double, z: double): double
309
+ ```
310
+
311
+ **Parameters**
312
+
313
+ | Parameter | Description |
314
+ |-----------|-------------|
315
+ | `x` | X component @param y Y component @param z Z component |
316
+
317
+ **Returns:** `x / ||(x, y, z)||`, or `0.0` for a zero vector
318
+
319
+ **Example**
320
+
321
+ ```redscript
322
+ let nx: double = vec3d_normalize_x(3.0d, 4.0d, 0.0d)
323
+ ```
324
+
325
+ ---
326
+
327
+ ## `vec3d_normalize_y` <Badge type="info" text="v2.0.0" />
328
+
329
+ Y component of the normalized unit vector for a 3D vector.
330
+
331
+ Returns `0.0` if the vector has zero length.
332
+
333
+ ```redscript
334
+ fn vec3d_normalize_y(x: double, y: double, z: double): double
335
+ ```
336
+
337
+ **Parameters**
338
+
339
+ | Parameter | Description |
340
+ |-----------|-------------|
341
+ | `x` | X component @param y Y component @param z Z component |
342
+
343
+ **Returns:** `y / ||(x, y, z)||`, or `0.0` for a zero vector
344
+
345
+ ---
346
+
347
+ ## `vec3d_normalize_z` <Badge type="info" text="v2.0.0" />
348
+
349
+ Z component of the normalized unit vector for a 3D vector.
350
+
351
+ Returns `0.0` if the vector has zero length.
352
+
353
+ ```redscript
354
+ fn vec3d_normalize_z(x: double, y: double, z: double): double
355
+ ```
356
+
357
+ **Parameters**
358
+
359
+ | Parameter | Description |
360
+ |-----------|-------------|
361
+ | `x` | X component @param y Y component @param z Z component |
362
+
363
+ **Returns:** `z / ||(x, y, z)||`, or `0.0` for a zero vector
364
+
365
+ ---
366
+
367
+ ## `mat2d_det` <Badge type="info" text="v2.0.0" />
368
+
369
+ Determinant of a 2×2 matrix `[[a, b], [c, d]]`.
370
+
371
+ ```redscript
372
+ fn mat2d_det(a: double, b: double, c: double, d: double): double
373
+ ```
374
+
375
+ **Parameters**
376
+
377
+ | Parameter | Description |
378
+ |-----------|-------------|
379
+ | `a` | Element [0,0] @param b Element [0,1] |
380
+ | `c` | Element [1,0] @param d Element [1,1] |
381
+
382
+ **Returns:** `a*d - b*c`
383
+
384
+ **Example**
385
+
386
+ ```redscript
387
+ let det: double = mat2d_det(1.0d, 2.0d, 3.0d, 4.0d)
388
+ ```
389
+
390
+ ---
391
+
392
+ ## `mat2d_mul_r0c0` <Badge type="info" text="v2.0.0" />
393
+
394
+ Element [0,0] of the 2×2 matrix product `M0 × M1`.
395
+
396
+ ```redscript
397
+ fn mat2d_mul_r0c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
398
+ ```
399
+
400
+ **Parameters**
401
+
402
+ | Parameter | Description |
403
+ |-----------|-------------|
404
+ | `a0` | M0 row-major elements (a0, b0, c0, d0) |
405
+ | `a1` | M1 row-major elements (a1, b1, c1, d1) |
406
+
407
+ **Returns:** `a0*a1 + b0*c1`
408
+
409
+ ---
410
+
411
+ ## `mat2d_mul_r0c1` <Badge type="info" text="v2.0.0" />
412
+
413
+ Element [0,1] of the 2×2 matrix product `M0 × M1`.
414
+
415
+ ```redscript
416
+ fn mat2d_mul_r0c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
417
+ ```
418
+
419
+ **Parameters**
420
+
421
+ | Parameter | Description |
422
+ |-----------|-------------|
423
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
424
+
425
+ **Returns:** `a0*b1 + b0*d1`
426
+
427
+ ---
428
+
429
+ ## `mat2d_mul_r1c0` <Badge type="info" text="v2.0.0" />
430
+
431
+ Element [1,0] of the 2×2 matrix product `M0 × M1`.
432
+
433
+ ```redscript
434
+ fn mat2d_mul_r1c0(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
435
+ ```
436
+
437
+ **Parameters**
438
+
439
+ | Parameter | Description |
440
+ |-----------|-------------|
441
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
442
+
443
+ **Returns:** `c0*a1 + d0*c1`
444
+
445
+ ---
446
+
447
+ ## `mat2d_mul_r1c1` <Badge type="info" text="v2.0.0" />
448
+
449
+ Element [1,1] of the 2×2 matrix product `M0 × M1`.
450
+
451
+ ```redscript
452
+ fn mat2d_mul_r1c1(a0: double, b0: double, c0: double, d0: double, a1: double, b1: double, c1: double, d1: double): double
453
+ ```
454
+
455
+ **Parameters**
456
+
457
+ | Parameter | Description |
458
+ |-----------|-------------|
459
+ | `a0` | M0 row-major elements @param a1 M1 row-major elements |
460
+
461
+ **Returns:** `c0*b1 + d0*d1`
462
+
463
+ ---
464
+
465
+ ## `mat2d_vecmul_x` <Badge type="info" text="v2.0.0" />
466
+
467
+ X component of the 2×2 matrix–vector product `M × v`.
468
+
469
+ ```redscript
470
+ fn mat2d_vecmul_x(a: double, b: double, c: double, d: double, vx: double, vy: double): double
471
+ ```
472
+
473
+ **Parameters**
474
+
475
+ | Parameter | Description |
476
+ |-----------|-------------|
477
+ | `a` | M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1] |
478
+ | `vx` | Vector X component @param vy Vector Y component |
479
+
480
+ **Returns:** `a*vx + b*vy`
481
+
482
+ ---
483
+
484
+ ## `mat2d_vecmul_y` <Badge type="info" text="v2.0.0" />
485
+
486
+ Y component of the 2×2 matrix–vector product `M × v`.
487
+
488
+ ```redscript
489
+ fn mat2d_vecmul_y(a: double, b: double, c: double, d: double, vx: double, vy: double): double
490
+ ```
491
+
492
+ **Parameters**
493
+
494
+ | Parameter | Description |
495
+ |-----------|-------------|
496
+ | `a` | M[0,0] @param b M[0,1] @param c M[1,0] @param d M[1,1] |
497
+ | `vx` | Vector X component @param vy Vector Y component |
498
+
499
+ **Returns:** `c*vx + d*vy`
500
+
501
+ ---
502
+
503
+ ## `solve2d_x` <Badge type="info" text="v2.0.0" />
504
+
505
+ X solution of the 2×2 linear system `[a b; c d] * [x; y] = [ex; ey]` via Cramer's rule.
506
+
507
+ Caller must ensure `det(a, b, c, d) ≠ 0`.
508
+
509
+ ```redscript
510
+ fn solve2d_x(a: double, b: double, c: double, d: double, ex: double, ey: double): double
511
+ ```
512
+
513
+ **Parameters**
514
+
515
+ | Parameter | Description |
516
+ |-----------|-------------|
517
+ | `a` | M[0,0] @param b M[0,1] |
518
+ | `c` | M[1,0] @param d M[1,1] |
519
+ | `ex` | RHS x @param ey RHS y |
520
+
521
+ **Returns:** `(ex*d - b*ey) / det`
522
+
523
+ **Example**
524
+
525
+ ```redscript
526
+ let x: double = solve2d_x(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
527
+ ```
528
+
529
+ ---
530
+
531
+ ## `solve2d_y` <Badge type="info" text="v2.0.0" />
532
+
533
+ Y solution of the 2×2 linear system `[a b; c d] * [x; y] = [ex; ey]` via Cramer's rule.
534
+
535
+ Caller must ensure `det(a, b, c, d) ≠ 0`.
536
+
537
+ ```redscript
538
+ fn solve2d_y(a: double, b: double, c: double, d: double, ex: double, ey: double): double
539
+ ```
540
+
541
+ **Parameters**
542
+
543
+ | Parameter | Description |
544
+ |-----------|-------------|
545
+ | `a` | M[0,0] @param b M[0,1] |
546
+ | `c` | M[1,0] @param d M[1,1] |
547
+ | `ex` | RHS x @param ey RHS y |
548
+
549
+ **Returns:** `(a*ey - ex*c) / det`
550
+
551
+ **Example**
552
+
553
+ ```redscript
554
+ let y: double = solve2d_y(1.0d, 0.0d, 0.0d, 1.0d, 3.0d, 4.0d)
555
+ ```
556
+
557
+ ---