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.
- package/.github/workflows/ci.yml +1 -0
- package/README.md +119 -313
- package/README.zh.md +118 -314
- package/ROADMAP.md +5 -5
- package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
- package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
- package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
- package/dist/data/impl_test/function/load.mcfunction +1 -0
- package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
- package/dist/data/minecraft/tags/function/load.json +5 -0
- package/dist/data/playground/function/load.mcfunction +1 -0
- package/dist/data/playground/function/start.mcfunction +4 -0
- package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
- package/dist/data/playground/function/stop.mcfunction +5 -0
- package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
- package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
- package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
- package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
- package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
- package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
- package/dist/data/test/function/load.mcfunction +1 -0
- package/dist/data/test/function/say_at.mcfunction +6 -0
- package/dist/data/test/function/test.mcfunction +4 -0
- package/dist/pack.mcmeta +6 -0
- package/dist/package.json +1 -1
- package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
- package/dist/src/__tests__/formatter-extra.test.js +123 -0
- package/dist/src/__tests__/global-vars.test.d.ts +13 -0
- package/dist/src/__tests__/global-vars.test.js +156 -0
- package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
- package/dist/src/__tests__/lint/new-rules.test.js +402 -0
- package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
- package/dist/src/__tests__/lsp-rename.test.js +157 -0
- package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
- package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
- package/dist/src/__tests__/mc-syntax.test.js +4 -1
- package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
- package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
- package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
- package/dist/src/__tests__/optimizer-cse.test.js +226 -0
- package/dist/src/__tests__/parser.test.js +4 -13
- package/dist/src/__tests__/repl-server-extra.test.js +6 -7
- package/dist/src/__tests__/repl-server.test.js +5 -7
- package/dist/src/__tests__/stdlib/queue.test.js +6 -6
- package/dist/src/cli.js +0 -0
- package/dist/src/lexer/index.js +2 -1
- package/dist/src/lint/index.d.ts +12 -5
- package/dist/src/lint/index.js +730 -5
- package/dist/src/lsp/main.js +0 -0
- package/dist/src/mc-test/client.d.ts +21 -0
- package/dist/src/mc-test/client.js +34 -0
- package/dist/src/mir/lower.js +108 -6
- package/dist/src/optimizer/interprocedural.js +37 -2
- package/dist/src/parser/decl-parser.d.ts +19 -0
- package/dist/src/parser/decl-parser.js +323 -0
- package/dist/src/parser/expr-parser.d.ts +46 -0
- package/dist/src/parser/expr-parser.js +759 -0
- package/dist/src/parser/index.d.ts +8 -129
- package/dist/src/parser/index.js +13 -2262
- package/dist/src/parser/stmt-parser.d.ts +28 -0
- package/dist/src/parser/stmt-parser.js +577 -0
- package/dist/src/parser/type-parser.d.ts +20 -0
- package/dist/src/parser/type-parser.js +257 -0
- package/dist/src/parser/utils.d.ts +34 -0
- package/dist/src/parser/utils.js +141 -0
- package/docs/dev/README-mc-integration-tests.md +141 -0
- package/docs/lint-rules.md +162 -0
- package/docs/stdlib/bigint.md +2 -0
- package/editors/vscode/README.md +63 -41
- package/editors/vscode/out/extension.js +1881 -1776
- package/editors/vscode/out/lsp-server.js +4257 -3651
- package/editors/vscode/package-lock.json +3 -3
- package/editors/vscode/package.json +1 -1
- package/examples/loops-demo.mcrs +87 -0
- package/package.json +1 -1
- package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
- package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
- package/redscript-docs/docs/en/stdlib/bits.md +292 -0
- package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
- package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
- package/redscript-docs/docs/en/stdlib/color.md +353 -0
- package/redscript-docs/docs/en/stdlib/combat.md +88 -0
- package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
- package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
- package/redscript-docs/docs/en/stdlib/easing.md +558 -0
- package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
- package/redscript-docs/docs/en/stdlib/effects.md +324 -0
- package/redscript-docs/docs/en/stdlib/events.md +3 -0
- package/redscript-docs/docs/en/stdlib/expr.md +45 -0
- package/redscript-docs/docs/en/stdlib/fft.md +141 -0
- package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
- package/redscript-docs/docs/en/stdlib/graph.md +259 -0
- package/redscript-docs/docs/en/stdlib/heap.md +185 -0
- package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
- package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
- package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
- package/redscript-docs/docs/en/stdlib/list.md +559 -0
- package/redscript-docs/docs/en/stdlib/map.md +140 -0
- package/redscript-docs/docs/en/stdlib/math.md +193 -0
- package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
- package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
- package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
- package/redscript-docs/docs/en/stdlib/noise.md +244 -0
- package/redscript-docs/docs/en/stdlib/ode.md +253 -0
- package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
- package/redscript-docs/docs/en/stdlib/particles.md +311 -0
- package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
- package/redscript-docs/docs/en/stdlib/physics.md +493 -0
- package/redscript-docs/docs/en/stdlib/player.md +78 -0
- package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
- package/redscript-docs/docs/en/stdlib/queue.md +134 -0
- package/redscript-docs/docs/en/stdlib/random.md +223 -0
- package/redscript-docs/docs/en/stdlib/result.md +143 -0
- package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
- package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
- package/redscript-docs/docs/en/stdlib/sets.md +101 -0
- package/redscript-docs/docs/en/stdlib/signal.md +400 -0
- package/redscript-docs/docs/en/stdlib/sort.md +104 -0
- package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
- package/redscript-docs/docs/en/stdlib/state.md +142 -0
- package/redscript-docs/docs/en/stdlib/strings.md +154 -0
- package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
- package/redscript-docs/docs/en/stdlib/teams.md +153 -0
- package/redscript-docs/docs/en/stdlib/timer.md +246 -0
- package/redscript-docs/docs/en/stdlib/vec.md +158 -0
- package/redscript-docs/docs/en/stdlib/world.md +298 -0
- package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
- package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
- package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
- package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
- package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
- package/redscript-docs/docs/zh/stdlib/color.md +353 -0
- package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
- package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
- package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
- package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
- package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
- package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
- package/redscript-docs/docs/zh/stdlib/events.md +3 -0
- package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
- package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
- package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
- package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
- package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
- package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
- package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
- package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
- package/redscript-docs/docs/zh/stdlib/list.md +561 -0
- package/redscript-docs/docs/zh/stdlib/map.md +132 -0
- package/redscript-docs/docs/zh/stdlib/math.md +193 -0
- package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
- package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
- package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
- package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
- package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
- package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
- package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
- package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
- package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
- package/redscript-docs/docs/zh/stdlib/player.md +78 -0
- package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
- package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
- package/redscript-docs/docs/zh/stdlib/random.md +222 -0
- package/redscript-docs/docs/zh/stdlib/result.md +147 -0
- package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
- package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
- package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
- package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
- package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
- package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
- package/redscript-docs/docs/zh/stdlib/state.md +134 -0
- package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
- package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
- package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
- package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
- package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
- package/redscript-docs/docs/zh/stdlib/world.md +289 -0
- package/src/__tests__/formatter-extra.test.ts +139 -0
- package/src/__tests__/global-vars.test.ts +171 -0
- package/src/__tests__/lint/new-rules.test.ts +437 -0
- package/src/__tests__/lsp-rename.test.ts +171 -0
- package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
- package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
- package/src/__tests__/mc-syntax.test.ts +3 -0
- package/src/__tests__/monomorphize-coverage.test.ts +220 -0
- package/src/__tests__/optimizer-cse.test.ts +250 -0
- package/src/__tests__/parser.test.ts +4 -13
- package/src/__tests__/repl-server-extra.test.ts +6 -6
- package/src/__tests__/repl-server.test.ts +5 -6
- package/src/__tests__/stdlib/queue.test.ts +6 -6
- package/src/lexer/index.ts +2 -1
- package/src/lint/index.ts +713 -5
- package/src/mc-test/client.ts +40 -0
- package/src/mir/lower.ts +111 -2
- package/src/optimizer/interprocedural.ts +40 -2
- package/src/parser/decl-parser.ts +349 -0
- package/src/parser/expr-parser.ts +838 -0
- package/src/parser/index.ts +17 -2558
- package/src/parser/stmt-parser.ts +585 -0
- package/src/parser/type-parser.ts +276 -0
- package/src/parser/utils.ts +173 -0
- package/src/stdlib/queue.mcrs +19 -6
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Bossbar
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `src/stdlib/bossbar.mcrs` — do not edit manually.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
- [create_timer_bar](#create-timer-bar)
|
|
8
|
+
- [create_health_bar](#create-health-bar)
|
|
9
|
+
- [create_progress_bar](#create-progress-bar)
|
|
10
|
+
- [update_bar](#update-bar)
|
|
11
|
+
- [hide_bar](#hide-bar)
|
|
12
|
+
- [show_bar](#show-bar)
|
|
13
|
+
- [remove_bar](#remove-bar)
|
|
14
|
+
- [update_bar_color](#update-bar-color)
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## `create_timer_bar`
|
|
19
|
+
|
|
20
|
+
Creates a visible timer bossbar for all players.
|
|
21
|
+
The bossbar max and current value are initialized to `max_seconds * 20`
|
|
22
|
+
so callers can update it directly in game ticks.
|
|
23
|
+
|
|
24
|
+
```redscript
|
|
25
|
+
fn create_timer_bar(id: string, name: string, max_seconds: int)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Parameters**
|
|
29
|
+
|
|
30
|
+
| Parameter | Description |
|
|
31
|
+
|-----------|-------------|
|
|
32
|
+
| `id` | Bossbar identifier, usually `<namespace>:<name>` |
|
|
33
|
+
| `name` | Display name shown on the bossbar |
|
|
34
|
+
| `max_seconds` | Duration in seconds; converted to ticks internally |
|
|
35
|
+
|
|
36
|
+
**Example**
|
|
37
|
+
|
|
38
|
+
```redscript
|
|
39
|
+
create_timer_bar("game:round", "Round Timer", 90)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## `create_health_bar`
|
|
45
|
+
|
|
46
|
+
Creates a visible red bossbar initialized at full value.
|
|
47
|
+
Useful for boss HP or shared health objectives.
|
|
48
|
+
|
|
49
|
+
```redscript
|
|
50
|
+
fn create_health_bar(id: string, name: string, max_val: int)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Parameters**
|
|
54
|
+
|
|
55
|
+
| Parameter | Description |
|
|
56
|
+
|-----------|-------------|
|
|
57
|
+
| `id` | Bossbar identifier, usually `<namespace>:<name>` |
|
|
58
|
+
| `name` | Display name shown on the bossbar |
|
|
59
|
+
| `max_val` | Maximum value and initial value of the bar |
|
|
60
|
+
|
|
61
|
+
**Example**
|
|
62
|
+
|
|
63
|
+
```redscript
|
|
64
|
+
create_health_bar("raid:boss_hp", "Warden", 500)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## `create_progress_bar`
|
|
70
|
+
|
|
71
|
+
Creates a visible blue progress bossbar starting at zero.
|
|
72
|
+
Useful for charge bars, capture progress, or phase tracking.
|
|
73
|
+
|
|
74
|
+
```redscript
|
|
75
|
+
fn create_progress_bar(id: string, name: string, max_val: int)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Parameters**
|
|
79
|
+
|
|
80
|
+
| Parameter | Description |
|
|
81
|
+
|-----------|-------------|
|
|
82
|
+
| `id` | Bossbar identifier, usually `<namespace>:<name>` |
|
|
83
|
+
| `name` | Display name shown on the bossbar |
|
|
84
|
+
| `max_val` | Maximum progress value |
|
|
85
|
+
|
|
86
|
+
**Example**
|
|
87
|
+
|
|
88
|
+
```redscript
|
|
89
|
+
create_progress_bar("game:capture", "Capture", 100)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## `update_bar`
|
|
95
|
+
|
|
96
|
+
Sets the current value of an existing bossbar.
|
|
97
|
+
RedScript does not clamp the value; Minecraft handles display behavior.
|
|
98
|
+
|
|
99
|
+
```redscript
|
|
100
|
+
fn update_bar(id: string, value: int)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Parameters**
|
|
104
|
+
|
|
105
|
+
| Parameter | Description |
|
|
106
|
+
|-----------|-------------|
|
|
107
|
+
| `id` | Bossbar identifier |
|
|
108
|
+
| `value` | New current value |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## `hide_bar`
|
|
113
|
+
|
|
114
|
+
Hides an existing bossbar from all assigned players.
|
|
115
|
+
|
|
116
|
+
```redscript
|
|
117
|
+
fn hide_bar(id: string)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Parameters**
|
|
121
|
+
|
|
122
|
+
| Parameter | Description |
|
|
123
|
+
|-----------|-------------|
|
|
124
|
+
| `id` | Bossbar identifier |
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## `show_bar`
|
|
129
|
+
|
|
130
|
+
Shows an existing bossbar to all assigned players.
|
|
131
|
+
|
|
132
|
+
```redscript
|
|
133
|
+
fn show_bar(id: string)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Parameters**
|
|
137
|
+
|
|
138
|
+
| Parameter | Description |
|
|
139
|
+
|-----------|-------------|
|
|
140
|
+
| `id` | Bossbar identifier |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## `remove_bar`
|
|
145
|
+
|
|
146
|
+
Removes an existing bossbar entirely.
|
|
147
|
+
After removal, the same `id` must be recreated before reuse.
|
|
148
|
+
|
|
149
|
+
```redscript
|
|
150
|
+
fn remove_bar(id: string)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Parameters**
|
|
154
|
+
|
|
155
|
+
| Parameter | Description |
|
|
156
|
+
|-----------|-------------|
|
|
157
|
+
| `id` | Bossbar identifier |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## `update_bar_color`
|
|
162
|
+
|
|
163
|
+
Updates the bossbar color from a percentage threshold.
|
|
164
|
+
Values above 66 use green, above 33 use yellow, otherwise red.
|
|
165
|
+
|
|
166
|
+
```redscript
|
|
167
|
+
fn update_bar_color(id: string, percent: int)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Parameters**
|
|
171
|
+
|
|
172
|
+
| Parameter | Description |
|
|
173
|
+
|-----------|-------------|
|
|
174
|
+
| `id` | Bossbar identifier |
|
|
175
|
+
| `percent` | Percentage in the expected 0-100 range |
|
|
176
|
+
|
|
177
|
+
---
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# Calculus
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `src/stdlib/calculus.mcrs` — do not edit manually.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
- [deriv_forward](#deriv-forward)
|
|
8
|
+
- [deriv_central](#deriv-central)
|
|
9
|
+
- [second_deriv](#second-deriv)
|
|
10
|
+
- [integrate_trapezoid](#integrate-trapezoid)
|
|
11
|
+
- [integrate_simpson](#integrate-simpson)
|
|
12
|
+
- [riemann_left](#riemann-left)
|
|
13
|
+
- [riemann_right](#riemann-right)
|
|
14
|
+
- [riemann_mid](#riemann-mid)
|
|
15
|
+
- [curve_length_2d](#curve-length-2d)
|
|
16
|
+
- [running_mean](#running-mean)
|
|
17
|
+
- [running_m2](#running-m2)
|
|
18
|
+
- [variance_from_m2](#variance-from-m2)
|
|
19
|
+
- [std_dev_approx](#std-dev-approx)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## `deriv_forward` <Badge type="info" text="v1.3.0" />
|
|
24
|
+
|
|
25
|
+
Forward-difference derivative: (f(x+h) − f(x)) / h.
|
|
26
|
+
|
|
27
|
+
```redscript
|
|
28
|
+
fn deriv_forward(f1: int, f0: int, h_fx: int): int
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Parameters**
|
|
32
|
+
|
|
33
|
+
| Parameter | Description |
|
|
34
|
+
|-----------|-------------|
|
|
35
|
+
| `f1` | f(x + h) × 10000 |
|
|
36
|
+
| `f0` | f(x) × 10000 |
|
|
37
|
+
| `h_fx` | Step size × 10000 (must not be zero) |
|
|
38
|
+
|
|
39
|
+
**Returns:** df/dx × 10000; returns 0 if h_fx == 0
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## `deriv_central` <Badge type="info" text="v1.3.0" />
|
|
44
|
+
|
|
45
|
+
Central-difference derivative: (f(x+h) − f(x−h)) / (2h). More accurate than forward difference.
|
|
46
|
+
|
|
47
|
+
```redscript
|
|
48
|
+
fn deriv_central(f_plus: int, f_minus: int, h_fx: int): int
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Parameters**
|
|
52
|
+
|
|
53
|
+
| Parameter | Description |
|
|
54
|
+
|-----------|-------------|
|
|
55
|
+
| `f_plus` | f(x + h) × 10000 |
|
|
56
|
+
| `f_minus` | f(x − h) × 10000 |
|
|
57
|
+
| `h_fx` | Step size × 10000 (must not be zero) |
|
|
58
|
+
|
|
59
|
+
**Returns:** df/dx × 10000; returns 0 if h_fx == 0
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## `second_deriv` <Badge type="info" text="v1.3.0" />
|
|
64
|
+
|
|
65
|
+
Second derivative via the central finite-difference formula: (f(x+h) − 2f(x) + f(x−h)) / h².
|
|
66
|
+
|
|
67
|
+
```redscript
|
|
68
|
+
fn second_deriv(f_plus: int, f0: int, f_minus: int, h_fx: int): int
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Parameters**
|
|
72
|
+
|
|
73
|
+
| Parameter | Description |
|
|
74
|
+
|-----------|-------------|
|
|
75
|
+
| `f_plus` | f(x + h) × 10000 |
|
|
76
|
+
| `f0` | f(x) × 10000 |
|
|
77
|
+
| `f_minus` | f(x − h) × 10000 |
|
|
78
|
+
| `h_fx` | Step size × 10000 (must not be zero) |
|
|
79
|
+
|
|
80
|
+
**Returns:** d²f/dx² × 10000; returns 0 if h_fx == 0
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## `integrate_trapezoid` <Badge type="info" text="v1.3.0" />
|
|
85
|
+
|
|
86
|
+
Numerical integration using the trapezoidal rule.
|
|
87
|
+
|
|
88
|
+
```redscript
|
|
89
|
+
fn integrate_trapezoid(vals: int[], n: int, h_fx: int): int
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Parameters**
|
|
93
|
+
|
|
94
|
+
| Parameter | Description |
|
|
95
|
+
|-----------|-------------|
|
|
96
|
+
| `vals` | Array of n function values × 10000 at equally spaced points |
|
|
97
|
+
| `n` | Number of sample points (must be ≥ 2) |
|
|
98
|
+
| `h_fx` | Step width between samples × 10000 |
|
|
99
|
+
|
|
100
|
+
**Returns:** Approximate integral × 10000 (area under the curve)
|
|
101
|
+
|
|
102
|
+
**Example**
|
|
103
|
+
|
|
104
|
+
```redscript
|
|
105
|
+
let ys: int[] = [0, 5000, 10000]; // f(0)=0, f(0.5)=0.5, f(1)=1 (linear)
|
|
106
|
+
let area: int = integrate_trapezoid(ys, 3, 5000); // ≈ 5000 (∫₀¹ x dx = 0.5)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## `integrate_simpson` <Badge type="info" text="v1.3.0" />
|
|
112
|
+
|
|
113
|
+
Numerical integration using Simpson's 1/3 rule (more accurate than trapezoid for smooth functions).
|
|
114
|
+
Uses n−1 intervals if n is even. Requires n ≥ 3.
|
|
115
|
+
|
|
116
|
+
```redscript
|
|
117
|
+
fn integrate_simpson(vals: int[], n: int, h_fx: int): int
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Parameters**
|
|
121
|
+
|
|
122
|
+
| Parameter | Description |
|
|
123
|
+
|-----------|-------------|
|
|
124
|
+
| `vals` | Array of n function values × 10000 at equally spaced points |
|
|
125
|
+
| `n` | Number of sample points (should be odd and ≥ 3) |
|
|
126
|
+
| `h_fx` | Step width × 10000 |
|
|
127
|
+
|
|
128
|
+
**Returns:** Approximate integral × 10000
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## `riemann_left` <Badge type="info" text="v1.3.0" />
|
|
133
|
+
|
|
134
|
+
Left Riemann sum: sum of f(x_i) × h for i = 0 … n−2.
|
|
135
|
+
|
|
136
|
+
```redscript
|
|
137
|
+
fn riemann_left(vals: int[], n: int, h_fx: int): int
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Parameters**
|
|
141
|
+
|
|
142
|
+
| Parameter | Description |
|
|
143
|
+
|-----------|-------------|
|
|
144
|
+
| `vals` | Array of n function values × 10000 |
|
|
145
|
+
| `n` | Number of sample points |
|
|
146
|
+
| `h_fx` | Step width × 10000 |
|
|
147
|
+
|
|
148
|
+
**Returns:** Approximate integral × 10000
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## `riemann_right` <Badge type="info" text="v1.3.0" />
|
|
153
|
+
|
|
154
|
+
Right Riemann sum: sum of f(x_i) × h for i = 1 … n−1.
|
|
155
|
+
|
|
156
|
+
```redscript
|
|
157
|
+
fn riemann_right(vals: int[], n: int, h_fx: int): int
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Parameters**
|
|
161
|
+
|
|
162
|
+
| Parameter | Description |
|
|
163
|
+
|-----------|-------------|
|
|
164
|
+
| `vals` | Array of n function values × 10000 |
|
|
165
|
+
| `n` | Number of sample points |
|
|
166
|
+
| `h_fx` | Step width × 10000 |
|
|
167
|
+
|
|
168
|
+
**Returns:** Approximate integral × 10000
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## `riemann_mid` <Badge type="info" text="v1.3.0" />
|
|
173
|
+
|
|
174
|
+
Midpoint Riemann sum using precomputed midpoint values.
|
|
175
|
+
|
|
176
|
+
```redscript
|
|
177
|
+
fn riemann_mid(vals: int[], n: int, h_fx: int): int
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Parameters**
|
|
181
|
+
|
|
182
|
+
| Parameter | Description |
|
|
183
|
+
|-----------|-------------|
|
|
184
|
+
| `vals` | Array of n midpoint values × 10000 (one per interval) |
|
|
185
|
+
| `n` | Number of intervals (i.e. length of vals) |
|
|
186
|
+
| `h_fx` | Step width × 10000 |
|
|
187
|
+
|
|
188
|
+
**Returns:** Approximate integral × 10000
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## `curve_length_2d` <Badge type="info" text="v1.3.0" />
|
|
193
|
+
|
|
194
|
+
Approximate arc length of a 2-D polyline through n points using the Euclidean distance between consecutive points.
|
|
195
|
+
|
|
196
|
+
```redscript
|
|
197
|
+
fn curve_length_2d(xs: int[], ys: int[], n: int): int
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Parameters**
|
|
201
|
+
|
|
202
|
+
| Parameter | Description |
|
|
203
|
+
|-----------|-------------|
|
|
204
|
+
| `xs` | X coordinates × 10000 of the n points |
|
|
205
|
+
| `ys` | Y coordinates × 10000 of the n points |
|
|
206
|
+
| `n` | Number of points (must be ≥ 2) |
|
|
207
|
+
|
|
208
|
+
**Returns:** Approximate arc length × 10000
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## `running_mean` <Badge type="info" text="v1.3.0" />
|
|
213
|
+
|
|
214
|
+
Welford's online algorithm: update a running mean with a new sample.
|
|
215
|
+
|
|
216
|
+
```redscript
|
|
217
|
+
fn running_mean(prev_mean: int, new_val: int, n: int): int
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Parameters**
|
|
221
|
+
|
|
222
|
+
| Parameter | Description |
|
|
223
|
+
|-----------|-------------|
|
|
224
|
+
| `prev_mean` | Previous mean × 10000 |
|
|
225
|
+
| `new_val` | New sample value × 10000 |
|
|
226
|
+
| `n` | Total count after adding the new sample (n ≥ 1) |
|
|
227
|
+
|
|
228
|
+
**Returns:** Updated mean × 10000
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## `running_m2` <Badge type="info" text="v1.3.0" />
|
|
233
|
+
|
|
234
|
+
Welford's online algorithm: update the M2 accumulator used to compute variance.
|
|
235
|
+
Variance = running_m2 / (n − 1) after n samples.
|
|
236
|
+
|
|
237
|
+
```redscript
|
|
238
|
+
fn running_m2(prev_m2: int, prev_mean: int, new_mean: int, new_val: int): int
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Parameters**
|
|
242
|
+
|
|
243
|
+
| Parameter | Description |
|
|
244
|
+
|-----------|-------------|
|
|
245
|
+
| `prev_m2` | Previous M2 accumulator × 10000 |
|
|
246
|
+
| `prev_mean` | Mean before adding the new sample × 10000 |
|
|
247
|
+
| `new_mean` | Mean after adding the new sample × 10000 |
|
|
248
|
+
| `new_val` | New sample value × 10000 |
|
|
249
|
+
|
|
250
|
+
**Returns:** Updated M2 accumulator × 10000
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## `variance_from_m2` <Badge type="info" text="v1.3.0" />
|
|
255
|
+
|
|
256
|
+
Compute sample variance from a Welford M2 accumulator and sample count.
|
|
257
|
+
|
|
258
|
+
```redscript
|
|
259
|
+
fn variance_from_m2(m2: int, n: int): int
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Parameters**
|
|
263
|
+
|
|
264
|
+
| Parameter | Description |
|
|
265
|
+
|-----------|-------------|
|
|
266
|
+
| `m2` | M2 accumulator from `running_m2` × 10000 |
|
|
267
|
+
| `n` | Number of samples collected |
|
|
268
|
+
|
|
269
|
+
**Returns:** Sample variance × 10000; returns 0 for n ≤ 1
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## `std_dev_approx` <Badge type="info" text="v1.3.0" />
|
|
274
|
+
|
|
275
|
+
Approximate standard deviation as the integer square root of the variance.
|
|
276
|
+
|
|
277
|
+
```redscript
|
|
278
|
+
fn std_dev_approx(variance_fx: int): int
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**Parameters**
|
|
282
|
+
|
|
283
|
+
| Parameter | Description |
|
|
284
|
+
|-----------|-------------|
|
|
285
|
+
| `variance_fx` | Variance × 10000 (e.g. from `variance_from_m2`) |
|
|
286
|
+
|
|
287
|
+
**Returns:** √variance × 10000; returns 0 for non-positive input
|
|
288
|
+
|
|
289
|
+
---
|