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,561 @@
1
+ # List
2
+
3
+ > 本文档由 `src/stdlib/list.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [sort2_min](#sort2-min)
8
+ - [sort2_max](#sort2-max)
9
+ - [list_min3](#list-min3)
10
+ - [list_max3](#list-max3)
11
+ - [list_min5](#list-min5)
12
+ - [list_max5](#list-max5)
13
+ - [list_sum5](#list-sum5)
14
+ - [list_sum4](#list-sum4)
15
+ - [list_sum3](#list-sum3)
16
+ - [avg3](#avg3)
17
+ - [avg5](#avg5)
18
+ - [sort3](#sort3)
19
+ - [weighted2](#weighted2)
20
+ - [weighted3](#weighted3)
21
+ - [sort4](#sort4)
22
+ - [sort5](#sort5)
23
+ - [list_sort_asc](#list-sort-asc)
24
+ - [list_sort_desc](#list-sort-desc)
25
+ - [list_sum](#list-sum)
26
+ - [list_avg](#list-avg)
27
+ - [list_min](#list-min)
28
+ - [list_max](#list-max)
29
+ - [list_contains](#list-contains)
30
+ - [list_index_of](#list-index-of)
31
+ - [list_shuffle](#list-shuffle)
32
+ - [list_dedup_count](#list-dedup-count)
33
+
34
+ ---
35
+
36
+ ## `sort2_min` <Badge type="info" text="v1.0.0" />
37
+
38
+ 返回两个整数中较小的一个。
39
+
40
+ ```redscript
41
+ fn sort2_min(a: int, b: int): int
42
+ ```
43
+
44
+ **参数**
45
+
46
+ | 参数 | 说明 |
47
+ |------|------|
48
+ | `a` | 第一个值 |
49
+ | `b` | 第二个值 |
50
+
51
+ **返回:** a ≤ b 则返回 a,否则返回 b
52
+
53
+ ---
54
+
55
+ ## `sort2_max` <Badge type="info" text="v1.0.0" />
56
+
57
+ 返回两个整数中较大的一个。
58
+
59
+ ```redscript
60
+ fn sort2_max(a: int, b: int): int
61
+ ```
62
+
63
+ **参数**
64
+
65
+ | 参数 | 说明 |
66
+ |------|------|
67
+ | `a` | 第一个值 |
68
+ | `b` | 第二个值 |
69
+
70
+ **返回:** a ≥ b 则返回 a,否则返回 b
71
+
72
+ ---
73
+
74
+ ## `list_min3` <Badge type="info" text="v1.0.0" />
75
+
76
+ 三个整数中的最小值。
77
+
78
+ ```redscript
79
+ fn list_min3(a: int, b: int, c: int): int
80
+ ```
81
+
82
+ **参数**
83
+
84
+ | 参数 | 说明 |
85
+ |------|------|
86
+ | `a` | 值 1 |
87
+ | `b` | 值 2 |
88
+ | `c` | 值 3 |
89
+
90
+ **返回:** a、b、c 中的最小值
91
+
92
+ ---
93
+
94
+ ## `list_max3` <Badge type="info" text="v1.0.0" />
95
+
96
+ 三个整数中的最大值。
97
+
98
+ ```redscript
99
+ fn list_max3(a: int, b: int, c: int): int
100
+ ```
101
+
102
+ **参数**
103
+
104
+ | 参数 | 说明 |
105
+ |------|------|
106
+ | `a` | 值 1 |
107
+ | `b` | 值 2 |
108
+ | `c` | 值 3 |
109
+
110
+ **返回:** a、b、c 中的最大值
111
+
112
+ ---
113
+
114
+ ## `list_min5` <Badge type="info" text="v1.0.0" />
115
+
116
+ 五个整数中的最小值。
117
+
118
+ ```redscript
119
+ fn list_min5(a: int, b: int, c: int, d: int, e: int): int
120
+ ```
121
+
122
+ **参数**
123
+
124
+ | 参数 | 说明 |
125
+ |------|------|
126
+ | `a` | 值 1 |
127
+ | `b` | 值 2 |
128
+ | `c` | 值 3 |
129
+ | `d` | 值 4 |
130
+ | `e` | 值 5 |
131
+
132
+ **返回:** 五个输入中的最小值
133
+
134
+ ---
135
+
136
+ ## `list_max5` <Badge type="info" text="v1.0.0" />
137
+
138
+ 五个整数中的最大值。
139
+
140
+ ```redscript
141
+ fn list_max5(a: int, b: int, c: int, d: int, e: int): int
142
+ ```
143
+
144
+ **参数**
145
+
146
+ | 参数 | 说明 |
147
+ |------|------|
148
+ | `a` | 值 1 |
149
+ | `b` | 值 2 |
150
+ | `c` | 值 3 |
151
+ | `d` | 值 4 |
152
+ | `e` | 值 5 |
153
+
154
+ **返回:** 五个输入中的最大值
155
+
156
+ ---
157
+
158
+ ## `list_sum5` <Badge type="info" text="v1.0.0" />
159
+
160
+ 五个整数之和。
161
+
162
+ ```redscript
163
+ fn list_sum5(a: int, b: int, c: int, d: int, e: int): int
164
+ ```
165
+
166
+ **参数**
167
+
168
+ | 参数 | 说明 |
169
+ |------|------|
170
+ | `a` | 值 1 |
171
+ | `b` | 值 2 |
172
+ | `c` | 值 3 |
173
+ | `d` | 值 4 |
174
+ | `e` | 值 5 |
175
+
176
+ **返回:** a + b + c + d + e
177
+
178
+ ---
179
+
180
+ ## `list_sum4` <Badge type="info" text="v1.0.0" />
181
+
182
+ 四个整数之和。
183
+
184
+ ```redscript
185
+ fn list_sum4(a: int, b: int, c: int, d: int): int
186
+ ```
187
+
188
+ **参数**
189
+
190
+ | 参数 | 说明 |
191
+ |------|------|
192
+ | `a` | 值 1 |
193
+ | `b` | 值 2 |
194
+ | `c` | 值 3 |
195
+ | `d` | 值 4 |
196
+
197
+ **返回:** a + b + c + d
198
+
199
+ ---
200
+
201
+ ## `list_sum3` <Badge type="info" text="v1.0.0" />
202
+
203
+ 三个整数之和。
204
+
205
+ ```redscript
206
+ fn list_sum3(a: int, b: int, c: int): int
207
+ ```
208
+
209
+ **参数**
210
+
211
+ | 参数 | 说明 |
212
+ |------|------|
213
+ | `a` | 值 1 |
214
+ | `b` | 值 2 |
215
+ | `c` | 值 3 |
216
+
217
+ **返回:** a + b + c
218
+
219
+ ---
220
+
221
+ ## `avg3` <Badge type="info" text="v1.0.0" />
222
+
223
+ 三个值的整数均值(向零截断)。
224
+
225
+ ```redscript
226
+ fn avg3(a: int, b: int, c: int): int
227
+ ```
228
+
229
+ **参数**
230
+
231
+ | 参数 | 说明 |
232
+ |------|------|
233
+ | `a` | 值 1 |
234
+ | `b` | 值 2 |
235
+ | `c` | 值 3 |
236
+
237
+ **返回:** (a + b + c) / 3
238
+
239
+ ---
240
+
241
+ ## `avg5` <Badge type="info" text="v1.0.0" />
242
+
243
+ 五个值的整数均值(向零截断)。
244
+
245
+ ```redscript
246
+ fn avg5(a: int, b: int, c: int, d: int, e: int): int
247
+ ```
248
+
249
+ **参数**
250
+
251
+ | 参数 | 说明 |
252
+ |------|------|
253
+ | `a` | 值 1 |
254
+ | `b` | 值 2 |
255
+ | `c` | 值 3 |
256
+ | `d` | 值 4 |
257
+ | `e` | 值 5 |
258
+
259
+ **返回:** (a + b + c + d + e) / 5
260
+
261
+ ---
262
+
263
+ ## `sort3` <Badge type="info" text="v1.0.0" />
264
+
265
+ 对三个值排序,返回指定位置的值(0 = 最小,1 = 中间,2 = 最大)。
266
+
267
+ ```redscript
268
+ fn sort3(a: int, b: int, c: int, pos: int): int
269
+ ```
270
+
271
+ **参数**
272
+
273
+ | 参数 | 说明 |
274
+ |------|------|
275
+ | `a` | 值 1 |
276
+ | `b` | 值 2 |
277
+ | `c` | 值 3 |
278
+ | `pos` | 排序后的位置(0、1 或 2) |
279
+
280
+ **返回:** 指定排序位置的值
281
+
282
+ ---
283
+
284
+ ## `weighted2` <Badge type="info" text="v1.0.0" />
285
+
286
+ 利用 LCG 种子在两个选项(0 或 1)间做加权随机选择。
287
+
288
+ ```redscript
289
+ fn weighted2(seed: int, w0: int, w1: int): int
290
+ ```
291
+
292
+ **参数**
293
+
294
+ | 参数 | 说明 |
295
+ |------|------|
296
+ | `seed` | LCG 种子(任意整数) |
297
+ | `w0` | 选项 0 的权重 |
298
+ | `w1` | 选项 1 的权重 |
299
+
300
+ **返回:** 以概率 w0/(w0+w1) 返回 0,否则返回 1
301
+
302
+ ---
303
+
304
+ ## `weighted3` <Badge type="info" text="v1.0.0" />
305
+
306
+ 利用 LCG 种子在三个选项(0、1 或 2)间做加权随机选择。
307
+
308
+ ```redscript
309
+ fn weighted3(seed: int, w0: int, w1: int, w2: int): int
310
+ ```
311
+
312
+ **参数**
313
+
314
+ | 参数 | 说明 |
315
+ |------|------|
316
+ | `seed` | LCG 种子 |
317
+ | `w0` | 选项 0 的权重 |
318
+ | `w1` | 选项 1 的权重 |
319
+ | `w2` | 选项 2 的权重 |
320
+
321
+ **返回:** 按权重比例返回 0、1 或 2
322
+
323
+ ---
324
+
325
+ ## `sort4` <Badge type="info" text="v1.0.0" />
326
+
327
+ 使用 5 次比较的最优排序网络对四个值排序,返回指定位置的值。
328
+
329
+ ```redscript
330
+ fn sort4(a: int, b: int, c: int, d: int, pos: int): int
331
+ ```
332
+
333
+ **参数**
334
+
335
+ | 参数 | 说明 |
336
+ |------|------|
337
+ | `a` | 值 1 |
338
+ | `b` | 值 2 |
339
+ | `c` | 值 3 |
340
+ | `d` | 值 4 |
341
+ | `pos` | 排序后的位置(0 = 最小,3 = 最大) |
342
+
343
+ **返回:** 指定排序位置的值
344
+
345
+ ---
346
+
347
+ ## `sort5` <Badge type="info" text="v1.0.0" />
348
+
349
+ 使用 9 次比较的 Batcher 奇偶归并排序网络对五个值排序,返回指定位置的值。
350
+
351
+ ```redscript
352
+ fn sort5(a: int, b: int, c: int, d: int, e: int, pos: int): int
353
+ ```
354
+
355
+ **参数**
356
+
357
+ | 参数 | 说明 |
358
+ |------|------|
359
+ | `a` | 值 1 |
360
+ | `b` | 值 2 |
361
+ | `c` | 值 3 |
362
+ | `d` | 值 4 |
363
+ | `e` | 值 5 |
364
+ | `pos` | 排序后的位置(0 = 最小,4 = 最大) |
365
+
366
+ **返回:** 指定排序位置的值
367
+
368
+ ---
369
+
370
+ ## `list_sort_asc` <Badge type="info" text="v1.0.0" />
371
+
372
+ 原地升序冒泡排序(任意长度)。需要 RedScript ≥ 2.4.0(数组引用传参)。
373
+
374
+ ```redscript
375
+ fn list_sort_asc(arr: int[], len: int)
376
+ ```
377
+
378
+ **参数**
379
+
380
+ | 参数 | 说明 |
381
+ |------|------|
382
+ | `arr` | 待排序数组(原地修改) |
383
+ | `len` | 要排序的元素数量 |
384
+
385
+ **返回:** 无返回值
386
+
387
+ ---
388
+
389
+ ## `list_sort_desc` <Badge type="info" text="v1.0.0" />
390
+
391
+ 原地降序冒泡排序(任意长度)。需要 RedScript ≥ 2.4.0。
392
+
393
+ ```redscript
394
+ fn list_sort_desc(arr: int[], len: int)
395
+ ```
396
+
397
+ **参数**
398
+
399
+ | 参数 | 说明 |
400
+ |------|------|
401
+ | `arr` | 待排序数组(原地修改) |
402
+ | `len` | 要排序的元素数量 |
403
+
404
+ **返回:** 无返回值
405
+
406
+ ---
407
+
408
+ ## `list_sum` <Badge type="info" text="v1.0.0" />
409
+
410
+ 数组所有元素之和。
411
+
412
+ ```redscript
413
+ fn list_sum(arr: int[], len: int): int
414
+ ```
415
+
416
+ **参数**
417
+
418
+ | 参数 | 说明 |
419
+ |------|------|
420
+ | `arr` | 输入数组 |
421
+ | `len` | 元素数量 |
422
+
423
+ **返回:** arr[0..len) 的总和
424
+
425
+ ---
426
+
427
+ ## `list_avg` <Badge type="info" text="v1.0.0" />
428
+
429
+ 数组算术均值,返回定点数 ×10000。
430
+
431
+ ```redscript
432
+ fn list_avg(arr: int[], len: int): int
433
+ ```
434
+
435
+ **参数**
436
+
437
+ | 参数 | 说明 |
438
+ |------|------|
439
+ | `arr` | 输入数组 |
440
+ | `len` | 元素数量(须 > 0) |
441
+
442
+ **返回:** (sum ×10000) / len;空数组返回 0
443
+
444
+ ---
445
+
446
+ ## `list_min` <Badge type="info" text="v1.0.0" />
447
+
448
+ 数组中的最小元素(数组至少有一个元素)。
449
+
450
+ ```redscript
451
+ fn list_min(arr: int[], len: int): int
452
+ ```
453
+
454
+ **参数**
455
+
456
+ | 参数 | 说明 |
457
+ |------|------|
458
+ | `arr` | 输入数组 |
459
+ | `len` | 元素数量 |
460
+
461
+ **返回:** arr[0..len) 中的最小值
462
+
463
+ ---
464
+
465
+ ## `list_max` <Badge type="info" text="v1.0.0" />
466
+
467
+ 数组中的最大元素(数组至少有一个元素)。
468
+
469
+ ```redscript
470
+ fn list_max(arr: int[], len: int): int
471
+ ```
472
+
473
+ **参数**
474
+
475
+ | 参数 | 说明 |
476
+ |------|------|
477
+ | `arr` | 输入数组 |
478
+ | `len` | 元素数量 |
479
+
480
+ **返回:** arr[0..len) 中的最大值
481
+
482
+ ---
483
+
484
+ ## `list_contains` <Badge type="info" text="v1.0.0" />
485
+
486
+ 检查数组中是否存在某个值。
487
+
488
+ ```redscript
489
+ fn list_contains(arr: int[], len: int, val: int): int
490
+ ```
491
+
492
+ **参数**
493
+
494
+ | 参数 | 说明 |
495
+ |------|------|
496
+ | `arr` | 输入数组 |
497
+ | `len` | 元素数量 |
498
+ | `val` | 要搜索的值 |
499
+
500
+ **返回:** 找到返回 1,否则返回 0
501
+
502
+ ---
503
+
504
+ ## `list_index_of` <Badge type="info" text="v1.0.0" />
505
+
506
+ 查找值在数组中第一次出现的索引。
507
+
508
+ ```redscript
509
+ fn list_index_of(arr: int[], len: int, val: int): int
510
+ ```
511
+
512
+ **参数**
513
+
514
+ | 参数 | 说明 |
515
+ |------|------|
516
+ | `arr` | 输入数组 |
517
+ | `len` | 元素数量 |
518
+ | `val` | 要搜索的值 |
519
+
520
+ **返回:** 第一个索引,未找到返回 -1
521
+
522
+ ---
523
+
524
+ ## `list_shuffle` <Badge type="info" text="v1.0.0" />
525
+
526
+ Fisher-Yates 原地随机打乱,使用线性同余生成器。
527
+
528
+ ```redscript
529
+ fn list_shuffle(arr: int[], len: int, seed: int): int[]
530
+ ```
531
+
532
+ **参数**
533
+
534
+ | 参数 | 说明 |
535
+ |------|------|
536
+ | `arr` | 待打乱数组(原地修改) |
537
+ | `len` | 元素数量 |
538
+ | `seed` | 初始 LCG 种子(任意整数) |
539
+
540
+ **返回:** 打乱后的数组(与 arr 相同引用)
541
+
542
+ ---
543
+
544
+ ## `list_dedup_count` <Badge type="info" text="v1.0.0" />
545
+
546
+ 统计数组中唯一值的数量(O(n²),适合小数组)。
547
+
548
+ ```redscript
549
+ fn list_dedup_count(arr: int[], len: int): int
550
+ ```
551
+
552
+ **参数**
553
+
554
+ | 参数 | 说明 |
555
+ |------|------|
556
+ | `arr` | 输入数组 |
557
+ | `len` | 元素数量 |
558
+
559
+ **返回:** arr[0..len) 中不同值的个数
560
+
561
+ ---
@@ -0,0 +1,132 @@
1
+ # Map
2
+
3
+ > 本文档由 `src/stdlib/map.mcrs` 自动生成,请勿手动编辑。
4
+
5
+ ## API 列表
6
+
7
+ - [map_set](#map-set)
8
+ - [map_get](#map-get)
9
+ - [map_has](#map-has)
10
+ - [map_delete](#map-delete)
11
+ - [map_clear](#map-clear)
12
+
13
+ ---
14
+
15
+ ## `map_set` <Badge type="info" text="v3.0.0" />
16
+
17
+ 将整数值写入 storage rs:maps.{map_name}.{key}
18
+
19
+ ```redscript
20
+ fn map_set(map_name: string, key: string, value: int)
21
+ ```
22
+
23
+ **参数**
24
+
25
+ | 参数 | 说明 |
26
+ |------|------|
27
+ | `map_name` | rs:maps 下的顶层 map 名称 |
28
+ | `key` | map compound 内的键名 |
29
+ | `value` | 要写入的整数值 |
30
+
31
+ **示例**
32
+
33
+ ```redscript
34
+ map_set("Stats", "kills", 7)
35
+ ```
36
+
37
+ ---
38
+
39
+ ## `map_get` <Badge type="info" text="v3.0.0" />
40
+
41
+ 读取 storage rs:maps.{map_name}.{key} 中的整数值
42
+
43
+ ```redscript
44
+ fn map_get(map_name: string, key: string): int
45
+ ```
46
+
47
+ **参数**
48
+
49
+ | 参数 | 说明 |
50
+ |------|------|
51
+ | `map_name` | rs:maps 下的顶层 map 名称 |
52
+ | `key` | map compound 内的键名 |
53
+
54
+ **返回:** 已存储的整数值;若键不存在则返回 0
55
+
56
+ **示例**
57
+
58
+ ```redscript
59
+ let kills: int = map_get("Stats", "kills")
60
+ ```
61
+
62
+ ---
63
+
64
+ ## `map_has` <Badge type="info" text="v3.0.0" />
65
+
66
+ 检查 storage rs:maps.{map_name}.{key} 是否存在
67
+
68
+ ```redscript
69
+ fn map_has(map_name: string, key: string): int
70
+ ```
71
+
72
+ **参数**
73
+
74
+ | 参数 | 说明 |
75
+ |------|------|
76
+ | `map_name` | rs:maps 下的顶层 map 名称 |
77
+ | `key` | map compound 内的键名 |
78
+
79
+ **返回:** 键存在返回 1,否则返回 0
80
+
81
+ **示例**
82
+
83
+ ```redscript
84
+ if (map_has("Stats", "kills") == 1) { }
85
+ ```
86
+
87
+ ---
88
+
89
+ ## `map_delete` <Badge type="info" text="v3.0.0" />
90
+
91
+ 删除指定 map 中的一个键
92
+
93
+ ```redscript
94
+ fn map_delete(map_name: string, key: string)
95
+ ```
96
+
97
+ **参数**
98
+
99
+ | 参数 | 说明 |
100
+ |------|------|
101
+ | `map_name` | rs:maps 下的顶层 map 名称 |
102
+ | `key` | map compound 内的键名 |
103
+
104
+ **示例**
105
+
106
+ ```redscript
107
+ map_delete("Stats", "kills")
108
+ ```
109
+
110
+ ---
111
+
112
+ ## `map_clear` <Badge type="info" text="v3.0.0" />
113
+
114
+ 删除整个 storage rs:maps.{map_name} compound
115
+
116
+ ```redscript
117
+ fn map_clear(map_name: string)
118
+ ```
119
+
120
+ **参数**
121
+
122
+ | 参数 | 说明 |
123
+ |------|------|
124
+ | `map_name` | rs:maps 下的顶层 map 名称 |
125
+
126
+ **示例**
127
+
128
+ ```redscript
129
+ map_clear("Stats")
130
+ ```
131
+
132
+ ---