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