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,193 @@
1
+ # Math
2
+
3
+ > 本文档由 `src/stdlib/math.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [abs](#abs)
8
+ - [sign](#sign)
9
+ - [min](#min)
10
+ - [max](#max)
11
+ - [clamp](#clamp)
12
+ - [lerp](#lerp)
13
+ - [sqrt_fixed](#sqrt-fixed)
14
+
15
+ ---
16
+
17
+ ## `abs` <Badge type="info" text="v1.0.0" />
18
+
19
+ 返回 x 的绝对值(支持泛型 T)
20
+
21
+ ```redscript
22
+ fn abs<T>(x: T) -> T
23
+ ```
24
+
25
+ **参数**
26
+
27
+ | 参数 | 说明 |
28
+ |------|------|
29
+ | `x` | 输入值(任意数值类型 T) |
30
+
31
+ **返回:** 若 x >= 0 则返回 x,否则返回 -x
32
+
33
+ **示例**
34
+
35
+ ```redscript
36
+ let a = abs(-5) // result: 5
37
+ let b = abs(3) // result: 3
38
+ ```
39
+
40
+ ---
41
+
42
+ ## `sign` <Badge type="info" text="v1.0.0" />
43
+
44
+ 返回 x 的符号:1、0 或 -1
45
+
46
+ ```redscript
47
+ fn sign(x: int) -> int
48
+ ```
49
+
50
+ **参数**
51
+
52
+ | 参数 | 说明 |
53
+ |------|------|
54
+ | `x` | 输入整数 |
55
+
56
+ **返回:** x > 0 返回 1,x < 0 返回 -1,x == 0 返回 0
57
+
58
+ **示例**
59
+
60
+ ```redscript
61
+ let s = sign(-42) // result: -1
62
+ ```
63
+
64
+ ---
65
+
66
+ ## `min` <Badge type="info" text="v1.0.0" />
67
+
68
+ 返回两个值中较小的一个
69
+
70
+ ```redscript
71
+ fn min<T>(a: T, b: T) -> T
72
+ ```
73
+
74
+ **参数**
75
+
76
+ | 参数 | 说明 |
77
+ |------|------|
78
+ | `a` | 第一个值 |
79
+ | `b` | 第二个值 |
80
+
81
+ **返回:** a < b 则返回 a,否则返回 b
82
+
83
+ **示例**
84
+
85
+ ```redscript
86
+ let m = min(3, 7) // result: 3
87
+ ```
88
+
89
+ ---
90
+
91
+ ## `max` <Badge type="info" text="v1.0.0" />
92
+
93
+ 返回两个值中较大的一个
94
+
95
+ ```redscript
96
+ fn max<T>(a: T, b: T) -> T
97
+ ```
98
+
99
+ **参数**
100
+
101
+ | 参数 | 说明 |
102
+ |------|------|
103
+ | `a` | 第一个值 |
104
+ | `b` | 第二个值 |
105
+
106
+ **返回:** a > b 则返回 a,否则返回 b
107
+
108
+ **示例**
109
+
110
+ ```redscript
111
+ let m = max(3, 7) // result: 7
112
+ ```
113
+
114
+ ---
115
+
116
+ ## `clamp` <Badge type="info" text="v1.0.0" />
117
+
118
+ 将 x 限制在 [lo, hi] 范围内
119
+
120
+ ```redscript
121
+ fn clamp<T>(x: T, lo: T, hi: T) -> T
122
+ ```
123
+
124
+ **参数**
125
+
126
+ | 参数 | 说明 |
127
+ |------|------|
128
+ | `x` | 输入值 |
129
+ | `lo` | 下界(含) |
130
+ | `hi` | 上界(含) |
131
+
132
+ **返回:** x < lo 返回 lo;x > hi 返回 hi;否则返回 x
133
+
134
+ **示例**
135
+
136
+ ```redscript
137
+ let c = clamp(150, 0, 100) // result: 100
138
+ let d = clamp(50, 0, 100) // result: 50
139
+ ```
140
+
141
+ ---
142
+
143
+ ## `lerp` <Badge type="info" text="v1.0.0" />
144
+
145
+ 在 a 和 b 之间进行线性插值,t 为定点数(范围 0-1000)
146
+
147
+ ```redscript
148
+ fn lerp(a: int, b: int, t: int) -> int
149
+ ```
150
+
151
+ **参数**
152
+
153
+ | 参数 | 说明 |
154
+ |------|------|
155
+ | `a` | 起始值 |
156
+ | `b` | 结束值 |
157
+ | `t` | 插值因子 ×1000(0 = a,1000 = b) |
158
+
159
+ **返回:** a + (b - a) * t / 1000
160
+
161
+ **示例**
162
+
163
+ ```redscript
164
+ let v = lerp(0, 1000, 500) // result: 500
165
+ let w = lerp(100, 200, 750) // result: 175
166
+ ```
167
+
168
+ ---
169
+
170
+ ## `sqrt_fixed` <Badge type="info" text="v1.0.0" />
171
+
172
+ 定点数平方根(精度 ×1000)
173
+
174
+ ```redscript
175
+ fn sqrt_fixed(x: int) -> int
176
+ ```
177
+
178
+ **参数**
179
+
180
+ | 参数 | 说明 |
181
+ |------|------|
182
+ | `x` | 输入值 ×1000(即 2.0 传入 2000) |
183
+
184
+ **返回:** sqrt(x/1000) × 1000
185
+
186
+ **示例**
187
+
188
+ ```redscript
189
+ let s = sqrt_fixed(2000) // result: ~1414 (√2 × 1000)
190
+ let t = sqrt_fixed(1000) // result: 1000 (√1 × 1000)
191
+ ```
192
+
193
+ ---
@@ -0,0 +1,143 @@
1
+ # Math_hp
2
+
3
+ > 本文档由 `src/stdlib/math_hp.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [double_mul_fixed](#double-mul-fixed)
8
+ - [double_mul](#double-mul)
9
+ - [ln_hp](#ln-hp)
10
+ - [ln_5term](#ln-5term)
11
+ - [double_sqrt](#double-sqrt)
12
+ - [pow_fast](#pow-fast)
13
+
14
+ ---
15
+
16
+ ## `double_mul_fixed` <Badge type="info" text="v1.3.0" />
17
+
18
+ 使用宏技巧将双精度值 d 乘以定点整数 f(×10000),全程保持 IEEE 754 双精度精度。
19
+
20
+ ```redscript
21
+ fn double_mul_fixed(d: double, f: int): double
22
+ ```
23
+
24
+ **参数**
25
+
26
+ | 参数 | 说明 |
27
+ |------|------|
28
+ | `d` | 双精度操作数(NBT 存储) |
29
+ | `f` | 定点乘数 ×10000(如 15000 = 1.5) |
30
+
31
+ **返回:** d × (f/10000) 的双精度结果
32
+
33
+ **示例**
34
+
35
+ ```redscript
36
+ let r: double = double_mul_fixed(3.14d, 20000); // 6.28 (3.14 × 2.0)
37
+ ```
38
+
39
+ ---
40
+
41
+ ## `double_mul` <Badge type="info" text="v1.3.0" />
42
+
43
+ 通过计分板整数近似实现双精度乘法(约 4 位有效小数)。|a|×|b| > ~21474 时会溢出。
44
+
45
+ ```redscript
46
+ fn double_mul(a: double, b: double): double
47
+ ```
48
+
49
+ **参数**
50
+
51
+ | 参数 | 说明 |
52
+ |------|------|
53
+ | `a` | 第一个因数(双精度) |
54
+ | `b` | 第二个因数(双精度) |
55
+
56
+ **返回:** a × b(近似,约 4 位精度)
57
+
58
+ ---
59
+
60
+ ## `ln_hp` <Badge type="info" text="v1.3.0" />
61
+
62
+ 高精度自然对数,通过对 5 项 atanh 级数结果进行一次 Newton 修正(~8–9 位精度)。有效范围 x ∈ [100, 1000000]。
63
+
64
+ ```redscript
65
+ fn ln_hp(x: int): int
66
+ ```
67
+
68
+ **参数**
69
+
70
+ | 参数 | 说明 |
71
+ |------|------|
72
+ | `x` | 输入值 ×10000(如 10000 = 1.0,27183 ≈ e) |
73
+
74
+ **返回:** ln(x/10000) ×10000
75
+
76
+ **示例**
77
+
78
+ ```redscript
79
+ let r: int = ln_hp(27183); // ≈ 10000 (ln(e) ≈ 1.0)
80
+ ```
81
+
82
+ ---
83
+
84
+ ## `ln_5term` <Badge type="info" text="v1.3.0" />
85
+
86
+ 使用 5 项 atanh 级数计算自然对数(比 3 项 ln() 精度高 2 倍,最大误差 ≈ 0.000002)。
87
+
88
+ ```redscript
89
+ fn ln_5term(x: int): int
90
+ ```
91
+
92
+ **参数**
93
+
94
+ | 参数 | 说明 |
95
+ |------|------|
96
+ | `x` | 输入值 ×10000 |
97
+
98
+ **返回:** ln(x/10000) ×10000
99
+
100
+ ---
101
+
102
+ ## `double_sqrt` <Badge type="info" text="v1.3.0" />
103
+
104
+ 双精度平方根,内部转换为定点数后用 isqrt 计算,再转回双精度。
105
+
106
+ ```redscript
107
+ fn double_sqrt(x: double): double
108
+ ```
109
+
110
+ **参数**
111
+
112
+ | 参数 | 说明 |
113
+ |------|------|
114
+ | `x` | 输入双精度值(必须 ≥ 0) |
115
+
116
+ **返回:** √x(双精度)
117
+
118
+ ---
119
+
120
+ ## `pow_fast` <Badge type="info" text="v1.3.0" />
121
+
122
+ 双精度底数的整数次方,使用二进制快速幂(O(log n)),支持负指数。
123
+
124
+ ```redscript
125
+ fn pow_fast(base: double, exp_val: int): double
126
+ ```
127
+
128
+ **参数**
129
+
130
+ | 参数 | 说明 |
131
+ |------|------|
132
+ | `base` | 底数(双精度) |
133
+ | `exp_val` | 整数指数(可以为负) |
134
+
135
+ **返回:** base^exp_val(双精度)
136
+
137
+ **示例**
138
+
139
+ ```redscript
140
+ let r: double = pow_fast(2.0d, 10); // 1024.0
141
+ ```
142
+
143
+ ---
@@ -0,0 +1,396 @@
1
+ # Matrix
2
+
3
+ > 本文档由 `src/stdlib/matrix.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [rotate2d_x](#rotate2d-x)
8
+ - [rotate2d_y](#rotate2d-y)
9
+ - [scale_x](#scale-x)
10
+ - [scale_y](#scale-y)
11
+ - [scale_z](#scale-z)
12
+ - [uniform_scale](#uniform-scale)
13
+ - [rotate_y_x](#rotate-y-x)
14
+ - [rotate_y_z](#rotate-y-z)
15
+ - [rotate_x_y](#rotate-x-y)
16
+ - [rotate_x_z](#rotate-x-z)
17
+ - [quat_sin_half](#quat-sin-half)
18
+ - [quat_cos_half](#quat-cos-half)
19
+ - [billboard_y](#billboard-y)
20
+ - [lerp_angle](#lerp-angle)
21
+ - [mat3_mul_elem](#mat3-mul-elem)
22
+ - [mat3_mul_vec3_elem](#mat3-mul-vec3-elem)
23
+ - [mat4_mul_elem](#mat4-mul-elem)
24
+ - [mat4_mul_vec4_elem](#mat4-mul-vec4-elem)
25
+
26
+ ---
27
+
28
+ ## `rotate2d_x` <Badge type="info" text="v2.0.0" />
29
+
30
+ 将 (x, y) 绕原点旋转 angle_deg(×10000°)后的 X 分量
31
+
32
+ ```redscript
33
+ fn rotate2d_x(x: int, y: int, angle_deg: int): int
34
+ ```
35
+
36
+ **参数**
37
+
38
+ | 参数 | 说明 |
39
+ |------|------|
40
+ | `x` | 输入 X 坐标 ×10000 |
41
+ | `y` | 输入 Y 坐标 ×10000 |
42
+ | `angle_deg` | 角度 ×10000(如 450000 = 45°) |
43
+
44
+ **返回:** x*cos(angle) - y*sin(angle),×10000
45
+
46
+ **示例**
47
+
48
+ ```redscript
49
+ let rx: int = rotate2d_x(10000, 0, 900000)
50
+ ```
51
+
52
+ ---
53
+
54
+ ## `rotate2d_y` <Badge type="info" text="v2.0.0" />
55
+
56
+ 将 (x, y) 绕原点旋转 angle_deg(×10000°)后的 Y 分量
57
+
58
+ ```redscript
59
+ fn rotate2d_y(x: int, y: int, angle_deg: int): int
60
+ ```
61
+
62
+ **参数**
63
+
64
+ | 参数 | 说明 |
65
+ |------|------|
66
+ | `x` | 输入 X 坐标 ×10000 |
67
+ | `y` | 输入 Y 坐标 ×10000 |
68
+ | `angle_deg` | 角度 ×10000 |
69
+
70
+ **返回:** x*sin(angle) + y*cos(angle),×10000
71
+
72
+ ---
73
+
74
+ ## `scale_x` <Badge type="info" text="v2.0.0" />
75
+
76
+ 对 X 坐标施加缩放(sx_fx ×10000)
77
+
78
+ ```redscript
79
+ fn scale_x(x: int, sx_fx: int): int
80
+ ```
81
+
82
+ **参数**
83
+
84
+ | 参数 | 说明 |
85
+ |------|------|
86
+ | `x` | 输入 X 值 ×10000 |
87
+ | `sx_fx` | 缩放系数 ×10000(如 20000 = 2×) |
88
+
89
+ **返回:** x * sx_fx / 10000
90
+
91
+ ---
92
+
93
+ ## `scale_y` <Badge type="info" text="v2.0.0" />
94
+
95
+ 对 Y 坐标施加缩放
96
+
97
+ ```redscript
98
+ fn scale_y(y: int, sy_fx: int): int
99
+ ```
100
+
101
+ **参数**
102
+
103
+ | 参数 | 说明 |
104
+ |------|------|
105
+ | `y` | 输入 Y 值 ×10000 |
106
+ | `sy_fx` | 缩放系数 ×10000 |
107
+
108
+ **返回:** y * sy_fx / 10000
109
+
110
+ ---
111
+
112
+ ## `scale_z` <Badge type="info" text="v2.0.0" />
113
+
114
+ 对 Z 坐标施加缩放
115
+
116
+ ```redscript
117
+ fn scale_z(z: int, sz_fx: int): int
118
+ ```
119
+
120
+ **参数**
121
+
122
+ | 参数 | 说明 |
123
+ |------|------|
124
+ | `z` | 输入 Z 值 ×10000 |
125
+ | `sz_fx` | 缩放系数 ×10000 |
126
+
127
+ **返回:** z * sz_fx / 10000
128
+
129
+ ---
130
+
131
+ ## `uniform_scale` <Badge type="info" text="v2.0.0" />
132
+
133
+ 对单个分量施加均匀缩放
134
+
135
+ ```redscript
136
+ fn uniform_scale(v: int, s_fx: int): int
137
+ ```
138
+
139
+ **参数**
140
+
141
+ | 参数 | 说明 |
142
+ |------|------|
143
+ | `v` | 输入分量 ×10000 |
144
+ | `s_fx` | 均匀缩放系数 ×10000 |
145
+
146
+ **返回:** v * s_fx / 10000
147
+
148
+ ---
149
+
150
+ ## `rotate_y_x` <Badge type="info" text="v2.0.0" />
151
+
152
+ 绕 Y 轴旋转 angle_deg(×10000°)后的 X 分量
153
+
154
+ ```redscript
155
+ fn rotate_y_x(x: int, z: int, angle_deg: int): int
156
+ ```
157
+
158
+ **参数**
159
+
160
+ | 参数 | 说明 |
161
+ |------|------|
162
+ | `x` | Input X coordinate ×10000 |
163
+ | `z` | Input Z coordinate ×10000 |
164
+ | `angle_deg` | 角度 ×10000 |
165
+
166
+ **返回:** x*cos + z*sin,×10000
167
+
168
+ ---
169
+
170
+ ## `rotate_y_z` <Badge type="info" text="v2.0.0" />
171
+
172
+ 绕 Y 轴旋转 angle_deg(×10000°)后的 Z 分量
173
+
174
+ ```redscript
175
+ fn rotate_y_z(x: int, z: int, angle_deg: int): int
176
+ ```
177
+
178
+ **参数**
179
+
180
+ | 参数 | 说明 |
181
+ |------|------|
182
+ | `x` | Input X coordinate ×10000 |
183
+ | `z` | Input Z coordinate ×10000 |
184
+ | `angle_deg` | 角度 ×10000 |
185
+
186
+ **返回:** -x*sin + z*cos,×10000
187
+
188
+ ---
189
+
190
+ ## `rotate_x_y` <Badge type="info" text="v2.0.0" />
191
+
192
+ 绕 X 轴旋转 angle_deg(×10000°)后的 Y 分量
193
+
194
+ ```redscript
195
+ fn rotate_x_y(y: int, z: int, angle_deg: int): int
196
+ ```
197
+
198
+ **参数**
199
+
200
+ | 参数 | 说明 |
201
+ |------|------|
202
+ | `y` | Input Y coordinate ×10000 |
203
+ | `z` | Input Z coordinate ×10000 |
204
+ | `angle_deg` | 角度 ×10000 |
205
+
206
+ **返回:** y*cos - z*sin,×10000
207
+
208
+ ---
209
+
210
+ ## `rotate_x_z` <Badge type="info" text="v2.0.0" />
211
+
212
+ 绕 X 轴旋转 angle_deg(×10000°)后的 Z 分量
213
+
214
+ ```redscript
215
+ fn rotate_x_z(y: int, z: int, angle_deg: int): int
216
+ ```
217
+
218
+ **参数**
219
+
220
+ | 参数 | 说明 |
221
+ |------|------|
222
+ | `y` | Input Y coordinate ×10000 |
223
+ | `z` | Input Z coordinate ×10000 |
224
+ | `angle_deg` | 角度 ×10000 |
225
+
226
+ **返回:** y*sin + z*cos,×10000
227
+
228
+ ---
229
+
230
+ ## `quat_sin_half` <Badge type="info" text="v2.0.0" />
231
+
232
+ 用于 Display Entity Y 轴四元数的 sin(angle/2),×1000
233
+
234
+ ```redscript
235
+ fn quat_sin_half(angle_deg_fx: int): int
236
+ ```
237
+
238
+ **参数**
239
+
240
+ | 参数 | 说明 |
241
+ |------|------|
242
+ | `angle_deg_fx` | 完整旋转角度 ×10000 |
243
+
244
+ **返回:** sin(angle/2),×1000
245
+
246
+ ---
247
+
248
+ ## `quat_cos_half` <Badge type="info" text="v2.0.0" />
249
+
250
+ 用于 Display Entity Y 轴四元数的 cos(angle/2),×1000
251
+
252
+ ```redscript
253
+ fn quat_cos_half(angle_deg_fx: int): int
254
+ ```
255
+
256
+ **参数**
257
+
258
+ | 参数 | 说明 |
259
+ |------|------|
260
+ | `angle_deg_fx` | 完整旋转角度 ×10000 |
261
+
262
+ **返回:** cos(angle/2),×1000
263
+
264
+ ---
265
+
266
+ ## `billboard_y` <Badge type="info" text="v2.0.0" />
267
+
268
+ 计算朝向玩家的广告牌 Y 轴旋转角度
269
+
270
+ ```redscript
271
+ fn billboard_y(player_yaw_fx: int): int
272
+ ```
273
+
274
+ **参数**
275
+
276
+ | 参数 | 说明 |
277
+ |------|------|
278
+ | `player_yaw_fx` | 玩家偏航角 ×10000(来自实体 NBT Rotation[0]) |
279
+
280
+ **返回:** 广告牌 Y 旋转 ×10000,范围 [0, 3600000)
281
+
282
+ **示例**
283
+
284
+ ```redscript
285
+ let by: int = billboard_y(player_yaw)
286
+ ```
287
+
288
+ ---
289
+
290
+ ## `lerp_angle` <Badge type="info" text="v2.0.0" />
291
+
292
+ 在两个角度(×10000)之间沿最短弧线性插值
293
+
294
+ ```redscript
295
+ fn lerp_angle(a_fx: int, b_fx: int, t: int): int
296
+ ```
297
+
298
+ **参数**
299
+
300
+ | 参数 | 说明 |
301
+ |------|------|
302
+ | `a_fx` | 起始角度 ×10000 |
303
+ | `b_fx` | 终止角度 ×10000 |
304
+ | `t` | 插值系数 ×10000(0 = a,10000 = b) |
305
+
306
+ **返回:** 插值角度 ×10000
307
+
308
+ **示例**
309
+
310
+ ```redscript
311
+ let a: int = lerp_angle(0, 3600000, 5000)
312
+ ```
313
+
314
+ ---
315
+
316
+ ## `mat3_mul_elem` <Badge type="info" text="v2.0.0" />
317
+
318
+ 计算 3×3 矩阵乘积 A×B 的元素 C[row][col](×10000)
319
+
320
+ ```redscript
321
+ fn mat3_mul_elem( a00: int, a01: int, a02: int, a10: int, a11: int, a12: int, a20: int, a21: int, a22: int, b00: int, b01: int, b02: int, b10: int, b11: int, b12: int,
322
+ ```
323
+
324
+ **参数**
325
+
326
+ | 参数 | 说明 |
327
+ |------|------|
328
+ | `a00` | A[0,0] … a22: A[2,2](9 个行主序元素,×10000) |
329
+ | `b00` | B[0,0] … b22: B[2,2](9 个行主序元素,×10000) |
330
+ | `row` | 目标行索引(0–2) |
331
+ | `col` | 目标列索引(0–2) |
332
+
333
+ **返回:** C[row][col],×10000
334
+
335
+ ---
336
+
337
+ ## `mat3_mul_vec3_elem` <Badge type="info" text="v2.0.0" />
338
+
339
+ 计算 3×3 矩阵与列向量乘积 A×v 的一个分量
340
+
341
+ ```redscript
342
+ fn mat3_mul_vec3_elem( a00: int, a01: int, a02: int, a10: int, a11: int, a12: int, a20: int, a21: int, a22: int, vx: int, vy: int, vz: int, comp: int
343
+ ```
344
+
345
+ **参数**
346
+
347
+ | 参数 | 说明 |
348
+ |------|------|
349
+ | `a00` | A 的 9 个行主序元素,×10000 |
350
+ | `vx` | Vector X ×10000 @param vy Vector Y ×10000 @param vz Vector Z ×10000 |
351
+ | `comp` | 输出分量索引(0=x, 1=y, 2=z) |
352
+
353
+ **返回:** (A×v)[comp],×10000
354
+
355
+ ---
356
+
357
+ ## `mat4_mul_elem` <Badge type="info" text="v2.0.0" />
358
+
359
+ 计算 4×4 矩阵乘积 A×B 的元素 C[row][col](×10000)
360
+
361
+ ```redscript
362
+ fn mat4_mul_elem( a00: int, a01: int, a02: int, a03: int, a10: int, a11: int, a12: int, a13: int, a20: int, a21: int, a22: int, a23: int, a30: int, a31: int, a32: int, a33: int, b00: int, b01: int, b02: int, b03: int,
363
+ ```
364
+
365
+ **参数**
366
+
367
+ | 参数 | 说明 |
368
+ |------|------|
369
+ | `a00` | A 的 16 个行主序元素,×10000 |
370
+ | `b00` | B 的 16 个行主序元素,×10000 |
371
+ | `row` | 目标行索引(0–3) |
372
+ | `col` | 目标列索引(0–3) |
373
+
374
+ **返回:** C[row][col],×10000
375
+
376
+ ---
377
+
378
+ ## `mat4_mul_vec4_elem` <Badge type="info" text="v2.0.0" />
379
+
380
+ 计算 4×4 矩阵与齐次向量乘积 A×v 的一个分量
381
+
382
+ ```redscript
383
+ fn mat4_mul_vec4_elem( a00: int, a01: int, a02: int, a03: int, a10: int, a11: int, a12: int, a13: int, a20: int, a21: int, a22: int, a23: int, a30: int, a31: int, a32: int, a33: int, vx: int, vy: int, vz: int, vw: int,
384
+ ```
385
+
386
+ **参数**
387
+
388
+ | 参数 | 说明 |
389
+ |------|------|
390
+ | `a00` | A 的 16 个行主序元素,×10000 |
391
+ | `vx` | Vector X ×10000 @param vy Y @param vz Z @param vw W |
392
+ | `comp` | 输出分量索引(0=x, 1=y, 2=z, 3=w) |
393
+
394
+ **返回:** (A×v)[comp],×10000
395
+
396
+ ---