@typeonce/ritmo-math 0.8.0 → 0.10.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/CHANGELOG.md +183 -0
- package/README.md +14 -4
- package/dist/Collide2.d.ts +2 -1
- package/dist/Collide2.d.ts.map +1 -1
- package/dist/Collide2.js +10 -6
- package/dist/Collide2.js.map +1 -1
- package/dist/FlowField.d.ts.map +1 -1
- package/dist/FlowField.js +2 -1
- package/dist/FlowField.js.map +1 -1
- package/dist/InputAxis.js +1 -1
- package/dist/Ops.d.ts +209 -0
- package/dist/Ops.d.ts.map +1 -0
- package/dist/Ops.js +210 -0
- package/dist/Ops.js.map +1 -0
- package/dist/Random.d.ts +63 -10
- package/dist/Random.d.ts.map +1 -1
- package/dist/Random.js +57 -32
- package/dist/Random.js.map +1 -1
- package/dist/Scalar.d.ts +7 -2
- package/dist/Scalar.d.ts.map +1 -1
- package/dist/Scalar.js +2 -1
- package/dist/Scalar.js.map +1 -1
- package/dist/SpatialGrid.d.ts +7 -2
- package/dist/SpatialGrid.d.ts.map +1 -1
- package/dist/SpatialGrid.js +35 -4
- package/dist/SpatialGrid.js.map +1 -1
- package/dist/Vec2.d.ts.map +1 -1
- package/dist/Vec2.js +8 -7
- package/dist/Vec2.js.map +1 -1
- package/dist/Vector2.d.ts +12 -0
- package/dist/Vector2.d.ts.map +1 -1
- package/dist/Vector2.js +12 -0
- package/dist/Vector2.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/fdlibm.d.ts +43 -0
- package/dist/internal/fdlibm.d.ts.map +1 -0
- package/dist/internal/fdlibm.js +1291 -0
- package/dist/internal/fdlibm.js.map +1 -0
- package/dist/internal/vector2.d.ts.map +1 -1
- package/dist/internal/vector2.js +2 -1
- package/dist/internal/vector2.js.map +1 -1
- package/package.json +3 -2
- package/src/Collide2.ts +10 -6
- package/src/FlowField.ts +2 -1
- package/src/InputAxis.ts +1 -1
- package/src/Ops.ts +232 -0
- package/src/Random.ts +104 -16
- package/src/Scalar.ts +7 -2
- package/src/SpatialGrid.ts +40 -6
- package/src/Vec2.ts +9 -7
- package/src/Vector2.ts +12 -0
- package/src/index.ts +5 -0
- package/src/internal/fdlibm.ts +1256 -0
- package/src/internal/vector2.ts +2 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# @typeonce/ritmo-math
|
|
2
|
+
|
|
3
|
+
## 0.10.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7002f4d: **Everything a game's agent needs now ships with the packages, and `ritmo-devtools lint` reports simulation modules the lint rules miss.**
|
|
8
|
+
|
|
9
|
+
- **Breaking: `ritmo-devtools lint` fails on an uncovered simulation module.** Every module the entry loads that the `ritmo/keep-simulation-headless` override in `.oxlintrc.json` does not cover is reported as `uncovered-simulation-module`, and the command exits 1. Add the module (or its folder) to the simulation override's `"files"`, or stop importing values from it. Modules loaded only inside `lintTarget` are not checked. Requires Node 22.15 or newer (`engines.node` is now `>=22.15`).
|
|
10
|
+
- **An agent skill ships with `@typeonce/ritmo`** in `skills/ritmo/SKILL.md`, for every change: where the docs are, and principles for where a game's code and state belong. Link it into the folder the game's agent reads skills from, for example `ln -s ../../node_modules/@typeonce/ritmo/skills/ritmo .agents/skills/ritmo`. `SETUP.md` in `@typeonce/ritmo` is the one-time setup: the base packages and checks every game uses, the add-ons, and linking the skill.
|
|
11
|
+
- **Every package ships its `CHANGELOG.md`.** The upgrade notes for 0.8.0 and 0.9.0 are in the `@typeonce/ritmo` changelog.
|
|
12
|
+
- **JSDoc corrections.** Examples no longer provide randomness or time as services (use the `Random` resource and `Clock`), the `Command` module example declares its commands, inspector docs state that `added`/`changed` reads report records since the inspector's previous evaluation, and every example uses prefixed names (`"Game/Position"`). Guidance that lived only in the repository's guides (spawn order, `ReadonlyValue` helpers, re-entering a state, `thisTick` and plugin systems, service effects and rollback) is now in the JSDoc.
|
|
13
|
+
- Package READMEs link other packages' READMEs by GitHub URL, so the links work on npm.
|
|
14
|
+
|
|
15
|
+
- 388a696: **The Ritmo skill routes each change to a playbook, and simulation code names no renderer type.**
|
|
16
|
+
|
|
17
|
+
- **Breaking: `ritmo/keep-simulation-headless` reports type-only renderer imports** (`import type { Container } from "pixi.js"`, `export type ... from "three"`) and subpath imports of `@typeonce/ritmo-render` and `@typeonce/ritmo-pixi`. A schema that names a renderer type ties the simulation to that renderer. Move the renderer service (a `Descriptor.Service<NodeRegistry.NodeRegistry<Sprite>>()(...)`) and the systems that use it into render code; services are not registered in the schema, so nothing else changes:
|
|
18
|
+
|
|
19
|
+
```diff
|
|
20
|
+
-// src/game/schema.ts
|
|
21
|
+
-import type { Sprite } from "pixi.js"
|
|
22
|
+
-export const Sprites = Descriptor.Service<NodeRegistry.NodeRegistry<Sprite>>()("Game/Sprites")
|
|
23
|
+
+// src/render/sprites.ts
|
|
24
|
+
+import type { Sprite } from "pixi.js"
|
|
25
|
+
+export const Sprites = Descriptor.Service<NodeRegistry.NodeRegistry<Sprite>>()("Game/Sprites")
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- **The skill in `skills/ritmo` now has playbooks**: one per kind of change (a mechanic, content, UI and rendering, a bug fix, a refactor, state and upgrades), each a short list of steps that ends with the check that proves it. `SKILL.md` routes to them and keeps the principles. A game that already links the skill folder gets them on upgrade.
|
|
29
|
+
|
|
30
|
+
- Updated dependencies [7002f4d]
|
|
31
|
+
- Updated dependencies [388a696]
|
|
32
|
+
- @typeonce/ritmo@0.10.0
|
|
33
|
+
|
|
34
|
+
## 0.9.0
|
|
35
|
+
|
|
36
|
+
### Minor Changes
|
|
37
|
+
|
|
38
|
+
- 003b902: **`Ops` covers every `Math` function engines approximate.** New: `Ops.expm1`, `log`, `log2`, `log10`, `log1p`, `cbrt`, `sinh`, `cosh`, `asinh`, `acosh`, and `atanh`, each a pure-JavaScript fdlibm port that returns the same bits on every engine and CPU (checked on V8 for macOS arm64, Linux x64, and Linux arm64, and on JavaScriptCore), within 1 ulp of the exact value. Simulation code no longer needs any `Math` function except the exact ones (`sqrt`, `abs`, `min`, `max`, `floor`, `ceil`, `round`, `trunc`, `sign`).
|
|
39
|
+
- 6cd9771: **`Ops`: math that returns the same bits on every engine.**
|
|
40
|
+
|
|
41
|
+
JavaScript engines may approximate `Math.sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `atan2`, `exp`, `tanh`, `pow`, `hypot`, and `a ** b`, and they do: V8 on macOS arm64 and on Linux x64, and JavaScriptCore (Safari, every iOS browser), return different last bits, and a simulation grows that bit into a different run. `Ops` from `@typeonce/ritmo-math` has the same functions as pure-JavaScript ports of fdlibm (musl libm), built only from operations every engine rounds exactly, so a run replays bit for bit on any device. Each is within 1 ulp of the exact value (`tanh` within 2, like the native one); `Ops.hypot` takes exactly two numbers and never overflows.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import { Ops } from "@typeonce/ritmo-math";
|
|
45
|
+
|
|
46
|
+
const heading = Ops.atan2(dy, dx);
|
|
47
|
+
const step = { x: Ops.cos(heading) * speed, y: Ops.sin(heading) * speed };
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Use `Ops` in simulation code instead of those `Math` functions; `Math.abs`, `min`, `max`, `floor`, `ceil`, `round`, `trunc`, `sign`, `sqrt`, `+ - * /`, and `x ** 2` are already exact everywhere.
|
|
51
|
+
|
|
52
|
+
`Vec2.rotate`, `length`, `distance`, `normalizeOr`, `moveToward`, `clampLength`, `Collide2` corner normals, and `FlowField.way` now use `Ops`. Their results can differ from the previous version in the last bit, so a replay recorded on an earlier version may diverge. `Touch` (browser) measures stick and aim offsets with `Math.sqrt(x * x + y * y)` instead of `Math.hypot`, for the same reason.
|
|
53
|
+
|
|
54
|
+
- 886ba39: **Support package fixes from a second review.**
|
|
55
|
+
|
|
56
|
+
- **Random state in a resource.** `Random` is now a validator for its own state (`Descriptor.ConstructedResource(Random)("Game/Rng")`, saved and checked like any constructed resource), `Random.seed(n)` is its starting value, and `Random.draw(resources.rng)` gives a generator over the system's write cell that writes every draw back, so a system no longer stores the state by hand and a failed run rolls its draws back. `Random.make(state)` stays for state kept outside the world.
|
|
57
|
+
- **Preconditions are checked.** `Random.integer` throws unless both bounds are whole with `min < maxExclusive` (it drew outside both bounds), and `Random.range` throws when `min > max` or a bound is not finite (equal bounds still return `min`). `SpatialGrid.insert` / `forEachIn` throw on non-finite numbers (an infinite box never returned), and a box covering more cells than are occupied scans the occupied cells. `Random.weighted` calls `weight` once per item.
|
|
58
|
+
- **Input edges.** `Touch`: a `pointerdown` for a pointer id still held (its up was lost) cancels what that id held first, instead of leaving a button held until blur. `Keyboard.scripted`: pressing an action that is already held is not a new press, as with a live keyboard.
|
|
59
|
+
|
|
60
|
+
### Patch Changes
|
|
61
|
+
|
|
62
|
+
- 9cca78b: **One shape for `Runtime.make`, and runtime guards from a review of 0.8.0.** See Upgrading under 0.9.0 in the `@typeonce/ritmo` CHANGELOG.md.
|
|
63
|
+
|
|
64
|
+
- **Breaking: `Runtime.make` always returns a `Result`.** It returned the bare runtime or a `Result` depending on the resource values present at runtime, while its type decided from the keys of the provided type, so resources typed `{ Score?: ... }` produced a bare runtime the type called a `Result`. The type is now `Success<Runtime>` when nothing provided can fail (read `.value`), and a `Result` to check when a constructed resource may be provided.
|
|
65
|
+
- **`thisTick` checks a writer that shares its reader's display name.** Systems may share a display name; the static check skipped any writer named like the reader. It now tells the reader apart by its system type.
|
|
66
|
+
- **New lint `next-state-replaced`** (warning, debug runtimes): a next state one system queued and another replaced with a different value before the same `applyStateTransitions(...)`, naming both. Observed lints (this one and `requirement-violated`) no longer need `nameSchedules` to appear. `Debug.NextStateReplacement` describes an entry.
|
|
67
|
+
- **A query match used after its run throws a named error.** Reading through a match kept past its run (in `local`) returned the internal absent marker once the entity was despawned, and writing put a removed component back without the insert path.
|
|
68
|
+
- **A query descriptor that behaves unlike the registered one throws**: a look-alike (same kind and name) that adds or drops entity-state transitions, a constructor, immutability, or transience. Look-alikes that behave the same keep working.
|
|
69
|
+
- `Scalar.Finite` and the `Vector2` / `Scalar` arithmetic helpers document that results keep the brand without re-validating, finite while they stay within `±Number.MAX_VALUE`.
|
|
70
|
+
|
|
71
|
+
- d47a4f9: **Runtime fixes from a review of 0.8.0.** No API changes; each fix restores what the docs already promised.
|
|
72
|
+
|
|
73
|
+
- **Sub-states enter with their parent.** A sub-state now gets its entry value at the parent's commit, before any `onEnter` schedule runs. A failing `onEnter` of the parent no longer leaves it without a value (`inState` false and `set` failing with `SubStateInactive` until the parent came back), and its `despawnOnEnter` scopes no longer despawn what the parent's `onEnter` just spawned. The `onEnter` schedules still run parents first.
|
|
74
|
+
- **A queued transition survives a transition schedule setting the same machine.** A value queued before `applyStateTransitions(...)` is committed there even when an `onEnter` / `onExit` of an earlier machine also calls `set` on it; that newer value waits for the next marker.
|
|
75
|
+
- **`snapshot` and `restore` throw while a schedule is running**, like `send`. A restore from a system let its queued spawns overwrite restored entities, and a snapshot captured writes a failing system then rolled back. `tryTick` now sets the same guard, so `send` inside `tryTick` throws too.
|
|
76
|
+
- **`restore` rejects an unknown scope name** with the new `UnknownScope` error, instead of putting entities in a scope nothing can name.
|
|
77
|
+
- **`describe()` counts reads inside `Query.anyOf`**, so `component-never-read` no longer fires for a component read only through `anyOf`, and `read-before-write` sees it. A system placed directly and under `Schedule.when` / `pauseWhen` is one entry with both placements and the conditions of each.
|
|
78
|
+
- **`Collide2` stops a circle that starts exactly touching a wall** and moves into it, instead of moving it through the wall: `sweepCircleBox` / `sweepCircleBoxes` now report a hit at time 0, and `moveCircle` blocks. This happens whenever a game places a body exactly at a wall without a skin (a snapped spawn point, or a projectile set to a sweep's contact point). Moving away from the wall or sliding along it is unchanged. A game that fingerprints its simulation will see fights that touched a wall this way play differently: re-record the fingerprints with the upgrade.
|
|
79
|
+
- **Replays carry input into their window.** A replay saved after unchanged input (holding a direction longer than `keep`) had no input on its first ticks and handed systems `undefined` when played.
|
|
80
|
+
- **`Session.run` stops with `invariant-threw`** when an invariant throws, naming the invariant and the error, instead of throwing out of `run` and losing the run's text.
|
|
81
|
+
- The `Snapshot` docs now say that unread `runtime.send` events survive a restore, as they always did.
|
|
82
|
+
|
|
83
|
+
- Updated dependencies [c2c32e0]
|
|
84
|
+
- Updated dependencies [9cca78b]
|
|
85
|
+
- Updated dependencies [6c09482]
|
|
86
|
+
- Updated dependencies [ecfd0f1]
|
|
87
|
+
- Updated dependencies [d47a4f9]
|
|
88
|
+
- Updated dependencies [330246e]
|
|
89
|
+
- Updated dependencies [7f2b2dd]
|
|
90
|
+
- @typeonce/ritmo@0.9.0
|
|
91
|
+
|
|
92
|
+
## 0.8.0
|
|
93
|
+
|
|
94
|
+
### Patch Changes
|
|
95
|
+
|
|
96
|
+
- Updated dependencies [0b22113]
|
|
97
|
+
- Updated dependencies [a0fac0a]
|
|
98
|
+
- Updated dependencies [0b22113]
|
|
99
|
+
- Updated dependencies [a0fac0a]
|
|
100
|
+
- Updated dependencies [a580c9c]
|
|
101
|
+
- Updated dependencies [a580c9c]
|
|
102
|
+
- @typeonce/ritmo@0.8.0
|
|
103
|
+
|
|
104
|
+
## 0.7.0
|
|
105
|
+
|
|
106
|
+
### Patch Changes
|
|
107
|
+
|
|
108
|
+
- 358401a: Link the bevy-ts migration guide from each published package README.
|
|
109
|
+
- Updated dependencies [84eac37]
|
|
110
|
+
- Updated dependencies [7ebd9af]
|
|
111
|
+
- Updated dependencies [358401a]
|
|
112
|
+
- @typeonce/ritmo@0.7.0
|
|
113
|
+
|
|
114
|
+
## 0.6.0
|
|
115
|
+
|
|
116
|
+
### Minor Changes
|
|
117
|
+
|
|
118
|
+
- 130cb6e: Rename the package family from `@typeonce/bevy-ts*` to `@typeonce/ritmo*`.
|
|
119
|
+
Update imports, workspace dependencies, type identity markers, examples, and
|
|
120
|
+
documentation together. There are no compatibility aliases; use the matching
|
|
121
|
+
Ritmo package for each previous Bevy TS package. The separate release preparation
|
|
122
|
+
change coordinates the repository rename and retirement of the generated
|
|
123
|
+
documentation site.
|
|
124
|
+
Use "The agent-first type safe ECS runtime" in package metadata,
|
|
125
|
+
documentation, and brand assets.
|
|
126
|
+
|
|
127
|
+
### Patch Changes
|
|
128
|
+
|
|
129
|
+
- c20bbc0: Document line of sight with `Collide2.sweepCircleBoxes` and a radius of 0.
|
|
130
|
+
- a8e0473: Retire the generated documentation site and point package homepages, source links,
|
|
131
|
+
and issue links to the Ritmo repository in the Typeonce GitHub organization.
|
|
132
|
+
Keep source JSDoc and repository guides, including the Pixi walkthrough in its
|
|
133
|
+
example README.
|
|
134
|
+
- Updated dependencies [a8e0473]
|
|
135
|
+
- Updated dependencies [130cb6e]
|
|
136
|
+
- Updated dependencies [a1f18a8]
|
|
137
|
+
- @typeonce/ritmo@0.6.0
|
|
138
|
+
|
|
139
|
+
## 0.5.0
|
|
140
|
+
|
|
141
|
+
### Minor Changes
|
|
142
|
+
|
|
143
|
+
- c5bd6d3: Add hot-path game helpers, lifted from a shipped top-down game: `Vec2` plain vector arithmetic (accepts validated `Vector2` values), `Box2` edge boxes, `Collide2` swept circle collision with sliding (no tunneling through thin walls, rounded corners), a `SpatialGrid` broad phase that allocates nothing per step, a `FlowField` that leads bodies around walls with clearance, and a deterministic `Random` whose whole state is one integer.
|
|
144
|
+
|
|
145
|
+
### Patch Changes
|
|
146
|
+
|
|
147
|
+
- @typeonce/bevy-ts@0.5.0
|
|
148
|
+
|
|
149
|
+
## 0.4.0
|
|
150
|
+
|
|
151
|
+
### Patch Changes
|
|
152
|
+
|
|
153
|
+
- Updated dependencies [e2b2275]
|
|
154
|
+
- @typeonce/bevy-ts@0.4.0
|
|
155
|
+
|
|
156
|
+
## 0.3.0
|
|
157
|
+
|
|
158
|
+
### Patch Changes
|
|
159
|
+
|
|
160
|
+
- Updated dependencies [2b0fb7e]
|
|
161
|
+
- Updated dependencies [c4d1add]
|
|
162
|
+
- Updated dependencies [bd9bdd5]
|
|
163
|
+
- Updated dependencies [bd9bdd5]
|
|
164
|
+
- Updated dependencies [94bdc32]
|
|
165
|
+
- Updated dependencies [bd9bdd5]
|
|
166
|
+
- @typeonce/bevy-ts@0.3.0
|
|
167
|
+
|
|
168
|
+
## 0.2.0
|
|
169
|
+
|
|
170
|
+
### Patch Changes
|
|
171
|
+
|
|
172
|
+
- Updated dependencies [4b3a312]
|
|
173
|
+
- Updated dependencies [4b3a312]
|
|
174
|
+
- Updated dependencies [4b3a312]
|
|
175
|
+
- @typeonce/bevy-ts@0.2.0
|
|
176
|
+
|
|
177
|
+
## 0.1.1
|
|
178
|
+
|
|
179
|
+
### Patch Changes
|
|
180
|
+
|
|
181
|
+
- c95a102: First release published from CI through npm trusted publishing, with provenance attestations. Declarations are now verified against consumers on both TypeScript 7 and TypeScript 6. No API or output changes.
|
|
182
|
+
- Updated dependencies [c95a102]
|
|
183
|
+
- @typeonce/bevy-ts@0.1.1
|
package/README.md
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# `@typeonce/ritmo-math`
|
|
2
2
|
|
|
3
|
-
Migrating from bevy-ts? See the [package migration guide](https://github.com/typeonce-dev/ritmo/blob/main/MIGRATION.md).
|
|
4
|
-
|
|
5
3
|
Math for ritmo games, in two kinds:
|
|
6
4
|
|
|
7
5
|
- **Validated values**: `Scalar`, `Vector2`, `Size2`, `Aabb`, and `InputAxis`. Every one exports constructors that validate untrusted input, so they work as `Descriptor.ConstructedComponent(...)` constructors and survive snapshot restore.
|
|
8
|
-
- **Hot-path helpers** on plain numbers, for code that runs every step: `Vec2` vector arithmetic (validated `Vector2` values pass straight in), `Box2` edge boxes, `Collide2` swept circle collision that slides along walls and never tunnels through them, a `SpatialGrid` broad phase that allocates nothing per step, a `FlowField` that leads bodies around walls,
|
|
6
|
+
- **Hot-path helpers** on plain numbers, for code that runs every step: `Vec2` vector arithmetic (validated `Vector2` values pass straight in), `Box2` edge boxes, `Collide2` swept circle collision that slides along walls and never tunnels through them, a `SpatialGrid` broad phase that allocates nothing per step, a `FlowField` that leads bodies around walls, a deterministic `Random` whose whole state is one integer (keep it in a resource, so runs replay), and `Ops`, math functions that return the same bits on every engine.
|
|
9
7
|
|
|
10
8
|
```ts
|
|
11
9
|
import { Collide2, FlowField, Random, SpatialGrid, Vec2 } from "@typeonce/ritmo-math"
|
|
@@ -21,6 +19,18 @@ const moved = Collide2.moveCircle(enemy, Vec2.scale(way, speed * dt), radius, wa
|
|
|
21
19
|
pnpm add @typeonce/ritmo-math @typeonce/ritmo
|
|
22
20
|
```
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
## Determinism across devices
|
|
23
|
+
|
|
24
|
+
JavaScript engines may approximate `Math.sin`, `cos`, `tan`, `asin`, `acos`, `atan`, `atan2`, `exp`, `expm1`, `log`, `log2`, `log10`, `log1p`, `cbrt`, `pow`, `hypot`, `sinh`, `cosh`, `tanh`, `asinh`, `acosh`, `atanh`, and `a ** b`, and they do: Chrome, Safari, macOS, and Linux disagree in the last bit, and a simulation grows that bit into a different run, so a session recorded on a phone stops replaying on a server. `Ops` has the same functions as pure-JavaScript ports of fdlibm, built only from operations every engine rounds exactly, so they return the same bits everywhere (within an ulp of the exact value). Use them in simulation code; `Math.abs`, `min`, `max`, `floor`, `ceil`, `round`, `trunc`, `sign`, `sqrt`, `+ - * /`, and `x ** 2` are already exact. `Vec2`, `Collide2`, and `FlowField` use `Ops` themselves, and the `ritmo/use-ops-for-math` rule of [`@typeonce/oxlint-plugin-ritmo`](https://github.com/typeonce-dev/ritmo/blob/main/packages/oxlint-plugin/README.md) reports the `Math` calls left in simulation code.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { Ops } from "@typeonce/ritmo-math"
|
|
28
|
+
|
|
29
|
+
const heading = Ops.atan2(target.y - position.y, target.x - position.x)
|
|
30
|
+
const velocity = { x: Ops.cos(heading) * speed, y: Ops.sin(heading) * speed }
|
|
31
|
+
const damping = Ops.exp(-friction * dt)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Released together with [`@typeonce/ritmo`](https://github.com/typeonce-dev/ritmo/blob/main/packages/core/README.md), always with the same version.
|
|
25
35
|
|
|
26
36
|
Source: https://github.com/typeonce-dev/ritmo
|
package/dist/Collide2.d.ts
CHANGED
|
@@ -71,7 +71,8 @@ export declare const rayCircle: (ox: number, oy: number, dx: number, dy: number,
|
|
|
71
71
|
* First contact of a circle of `radius` at `origin` moving by `delta` with
|
|
72
72
|
* `box`, or `undefined`. Contact is computed against the box expanded by the
|
|
73
73
|
* radius with rounded corners (the exact Minkowski sum), so sliding around
|
|
74
|
-
* corners is smooth. A circle that starts
|
|
74
|
+
* corners is smooth. A circle that starts exactly touching a face and moves
|
|
75
|
+
* into it hits at time 0. A circle that starts overlapping the box is not
|
|
75
76
|
* reported; resolve it with `pushOut` first.
|
|
76
77
|
*
|
|
77
78
|
* @category Queries
|
package/dist/Collide2.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collide2.d.ts","sourceRoot":"","sources":["../src/Collide2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"Collide2.d.ts","sourceRoot":"","sources":["../src/Collide2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,GAAG;IAClB,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;IACvB,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,OAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,KAAG,MAAM,GAAG,SAWtH,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,WAAY,IAAI,SAAS,IAAI,UAAU,MAAM,OAAO,IAAI,KAAG,GAAG,GAAG,SAyE3F,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,WAAY,IAAI,SAAS,IAAI,UAAU,MAAM,SAAS,aAAa,CAAC,IAAI,CAAC,KAAG,GAAG,GAAG,SAO9G,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,WACpB,IAAI,SACL,IAAI,UACH,MAAM,UACN,IAAI,gBACE,MAAM,KACnB,MAAM,GAAG,SAMX,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,WAAY,IAAI,UAAU,MAAM,SAAS,aAAa,CAAC,IAAI,CAAC,SAAQ,MAAM,KAAiB,IA4B9G,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,UAAW,IAAI,SAAS,IAAI,UAAU,MAAM,SAAS,aAAa,CAAC,IAAI,CAAC,SAAQ,MAAM,KAAiB,UAoC7H,CAAA"}
|
package/dist/Collide2.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Ops from "./Ops.js";
|
|
1
2
|
/**
|
|
2
3
|
* The distance `pushOut` and `moveCircle` keep from walls after a contact
|
|
3
4
|
* (in world units), so the next sweep starts outside the wall.
|
|
@@ -30,7 +31,8 @@ export const rayCircle = (ox, oy, dx, dy, cx, cy, r) => {
|
|
|
30
31
|
* First contact of a circle of `radius` at `origin` moving by `delta` with
|
|
31
32
|
* `box`, or `undefined`. Contact is computed against the box expanded by the
|
|
32
33
|
* radius with rounded corners (the exact Minkowski sum), so sliding around
|
|
33
|
-
* corners is smooth. A circle that starts
|
|
34
|
+
* corners is smooth. A circle that starts exactly touching a face and moves
|
|
35
|
+
* into it hits at time 0. A circle that starts overlapping the box is not
|
|
34
36
|
* reported; resolve it with `pushOut` first.
|
|
35
37
|
*
|
|
36
38
|
* @category Queries
|
|
@@ -60,8 +62,10 @@ export const sweepCircleBox = (origin, delta, radius, box) => {
|
|
|
60
62
|
t2 = swap;
|
|
61
63
|
normal = 1;
|
|
62
64
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
// Entering at exactly 0 is a contact: a circle touching the face and
|
|
66
|
+
// moving into it (a negative entry time means it is moving away).
|
|
67
|
+
if (t1 > enter || (t1 === 0 && enter === 0)) {
|
|
68
|
+
enter = 0 + t1;
|
|
65
69
|
nx = normal;
|
|
66
70
|
ny = 0;
|
|
67
71
|
}
|
|
@@ -84,8 +88,8 @@ export const sweepCircleBox = (origin, delta, radius, box) => {
|
|
|
84
88
|
t2 = swap;
|
|
85
89
|
normal = 1;
|
|
86
90
|
}
|
|
87
|
-
if (t1 > enter) {
|
|
88
|
-
enter = t1;
|
|
91
|
+
if (t1 > enter || (t1 === 0 && enter === 0)) {
|
|
92
|
+
enter = 0 + t1;
|
|
89
93
|
nx = 0;
|
|
90
94
|
ny = normal;
|
|
91
95
|
}
|
|
@@ -108,7 +112,7 @@ export const sweepCircleBox = (origin, delta, radius, box) => {
|
|
|
108
112
|
return undefined;
|
|
109
113
|
const cx = origin.x + delta.x * t - cornerX;
|
|
110
114
|
const cy = origin.y + delta.y * t - cornerY;
|
|
111
|
-
const len =
|
|
115
|
+
const len = Ops.hypot(cx, cy) || 1;
|
|
112
116
|
return { time: t, nx: cx / len, ny: cy / len };
|
|
113
117
|
}
|
|
114
118
|
if (nx === 0 && ny === 0)
|
package/dist/Collide2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Collide2.js","sourceRoot":"","sources":["../src/Collide2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Collide2.js","sourceRoot":"","sources":["../src/Collide2.ts"],"names":[],"mappings":"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"}
|
package/dist/FlowField.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowField.d.ts","sourceRoot":"","sources":["../src/FlowField.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,KAAK,IAAI,EAAkB,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"FlowField.d.ts","sourceRoot":"","sources":["../src/FlowField.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,EAAE,KAAK,IAAI,EAAkB,MAAM,WAAW,CAAA;AAErD,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAA;IAClC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7D;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACzB;;;;OAIG;IACH,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,CAAA;IAC/B,oHAAoH;IACpH,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAAA;CACvC;AA8MD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,aAAc,MAAM,CAAC,QAAQ,KAAG,SAAgC,CAAA"}
|
package/dist/FlowField.js
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
* Making a flow field.
|
|
32
32
|
*/
|
|
33
33
|
import { overlapsCircle } from "./Box2.js";
|
|
34
|
+
import * as Ops from "./Ops.js";
|
|
34
35
|
// The eight steps to a neighbor (straight ones first) and their lengths, as
|
|
35
36
|
// parallel arrays: the search reads them for every cell it settles.
|
|
36
37
|
const stepX = Int8Array.of(1, -1, 0, 0, 1, 1, -1, -1);
|
|
@@ -188,7 +189,7 @@ class Field {
|
|
|
188
189
|
}
|
|
189
190
|
if (!found)
|
|
190
191
|
return undefined;
|
|
191
|
-
const length =
|
|
192
|
+
const length = Ops.hypot(targetX - at.x, targetY - at.y);
|
|
192
193
|
return length > 1e-6 ? { x: (targetX - at.x) / length, y: (targetY - at.y) / length } : undefined;
|
|
193
194
|
}
|
|
194
195
|
distance(at) {
|
package/dist/FlowField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowField.js","sourceRoot":"","sources":["../src/FlowField.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FlowField.js","sourceRoot":"","sources":["../src/FlowField.ts"],"names":[],"mappings":"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"}
|
package/dist/InputAxis.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This module is runtime-agnostic: it does not know about keyboard events,
|
|
6
6
|
* gamepads, or host APIs. It only translates already-sampled booleans into the
|
|
7
|
-
* compact movement values
|
|
7
|
+
* compact movement values that systems consume.
|
|
8
8
|
*
|
|
9
9
|
* Reach for it in the gap between host input sampling and ECS simulation:
|
|
10
10
|
* capture raw button state in the host, normalize it here, then write the
|
package/dist/Ops.d.ts
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Math functions that return the same bits on every JavaScript engine and
|
|
3
|
+
* CPU, so a simulation replays exactly on any device.
|
|
4
|
+
*
|
|
5
|
+
* The spec lets engines approximate `Math.sin`, `cos`, `tan`, `asin`, `acos`,
|
|
6
|
+
* `atan`, `atan2`, `exp`, `expm1`, `log`, `log2`, `log10`, `log1p`, `sinh`,
|
|
7
|
+
* `cosh`, `tanh`, `asinh`, `acosh`, `atanh`, `cbrt`, `pow`, `hypot`, and
|
|
8
|
+
* `a ** b`, and they do: Chrome, Safari, macOS, and Linux disagree in the
|
|
9
|
+
* last bit, and a simulation grows that bit into a different run. Use these
|
|
10
|
+
* in simulation code instead; each is a pure-JavaScript port of fdlibm (musl
|
|
11
|
+
* libm) built only from operations every engine rounds exactly.
|
|
12
|
+
*
|
|
13
|
+
* Keep using `Math.abs`, `sign`, `min`, `max`, `floor`, `ceil`, `round`,
|
|
14
|
+
* `trunc`, `sqrt`, `imul`, `fround`, `+ - * /`, and `x ** 2`: they are
|
|
15
|
+
* already exact everywhere. Use `Random` for randomness and `Clock` for time.
|
|
16
|
+
* Code that only draws (rendering, effects) can use `Math` freely. The
|
|
17
|
+
* `ritmo/use-ops-for-math` rule (`@typeonce/oxlint-plugin-ritmo`) points
|
|
18
|
+
* simulation code here.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* // Inside a system: aim, then move along the heading.
|
|
23
|
+
* const heading = Ops.atan2(target.y - position.y, target.x - position.x)
|
|
24
|
+
* const step = { x: Ops.cos(heading) * speed * dt, y: Ops.sin(heading) * speed * dt }
|
|
25
|
+
* const damping = Ops.exp(-friction * dt)
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @module Ops
|
|
29
|
+
* @docGroup helpers
|
|
30
|
+
*
|
|
31
|
+
* @categoryDescription Trigonometry
|
|
32
|
+
* Sine, cosine, tangent, and their inverses, in radians.
|
|
33
|
+
*
|
|
34
|
+
* @categoryDescription Exponentials
|
|
35
|
+
* Exponentials, logarithms, powers, and roots.
|
|
36
|
+
*
|
|
37
|
+
* @categoryDescription Hyperbolic
|
|
38
|
+
* Hyperbolic functions and their inverses.
|
|
39
|
+
*
|
|
40
|
+
* @categoryDescription Lengths
|
|
41
|
+
* Euclidean length without overflow.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Sine of `x` radians. Same bits on every engine (within 1 ulp of the exact
|
|
45
|
+
* value); use instead of `Math.sin` in simulation code.
|
|
46
|
+
*
|
|
47
|
+
* @category Trigonometry
|
|
48
|
+
*/
|
|
49
|
+
export declare const sin: (x: number) => number;
|
|
50
|
+
/**
|
|
51
|
+
* Cosine of `x` radians. Same bits on every engine (within 1 ulp of the
|
|
52
|
+
* exact value); use instead of `Math.cos` in simulation code.
|
|
53
|
+
*
|
|
54
|
+
* @category Trigonometry
|
|
55
|
+
*/
|
|
56
|
+
export declare const cos: (x: number) => number;
|
|
57
|
+
/**
|
|
58
|
+
* Tangent of `x` radians. Same bits on every engine (within 1 ulp of the
|
|
59
|
+
* exact value); use instead of `Math.tan` in simulation code.
|
|
60
|
+
*
|
|
61
|
+
* @category Trigonometry
|
|
62
|
+
*/
|
|
63
|
+
export declare const tan: (x: number) => number;
|
|
64
|
+
/**
|
|
65
|
+
* Arcsine of `x` in radians, in [-π/2, π/2]; NaN outside [-1, 1]. Same bits
|
|
66
|
+
* on every engine; use instead of `Math.asin` in simulation code.
|
|
67
|
+
*
|
|
68
|
+
* @category Trigonometry
|
|
69
|
+
*/
|
|
70
|
+
export declare const asin: (x: number) => number;
|
|
71
|
+
/**
|
|
72
|
+
* Arccosine of `x` in radians, in [0, π]; NaN outside [-1, 1]. Same bits on
|
|
73
|
+
* every engine; use instead of `Math.acos` in simulation code.
|
|
74
|
+
*
|
|
75
|
+
* @category Trigonometry
|
|
76
|
+
*/
|
|
77
|
+
export declare const acos: (x: number) => number;
|
|
78
|
+
/**
|
|
79
|
+
* Arctangent of `x` in radians, in (-π/2, π/2). Same bits on every engine;
|
|
80
|
+
* use instead of `Math.atan` in simulation code. For the angle of a vector,
|
|
81
|
+
* use `atan2`.
|
|
82
|
+
*
|
|
83
|
+
* @category Trigonometry
|
|
84
|
+
*/
|
|
85
|
+
export declare const atan: (x: number) => number;
|
|
86
|
+
/**
|
|
87
|
+
* The angle of the vector (x, y) in radians, in [-π, π] (note the argument
|
|
88
|
+
* order: `y` first, like `Math.atan2`). Same bits on every engine; use
|
|
89
|
+
* instead of `Math.atan2` in simulation code.
|
|
90
|
+
*
|
|
91
|
+
* @category Trigonometry
|
|
92
|
+
*/
|
|
93
|
+
export declare const atan2: (y: number, x: number) => number;
|
|
94
|
+
/**
|
|
95
|
+
* e raised to `x`. Same bits on every engine (within 1 ulp of the exact
|
|
96
|
+
* value); use instead of `Math.exp` in simulation code, for example for
|
|
97
|
+
* frame-rate independent damping `exp(-rate * dt)`.
|
|
98
|
+
*
|
|
99
|
+
* @category Exponentials
|
|
100
|
+
*/
|
|
101
|
+
export declare const exp: (x: number) => number;
|
|
102
|
+
/**
|
|
103
|
+
* Hyperbolic tangent of `x`, in [-1, 1]. Same bits on every engine (within 2
|
|
104
|
+
* ulp of the exact value, like the native one); use instead of `Math.tanh` in
|
|
105
|
+
* simulation code.
|
|
106
|
+
*
|
|
107
|
+
* @category Hyperbolic
|
|
108
|
+
*/
|
|
109
|
+
export declare const tanh: (x: number) => number;
|
|
110
|
+
/**
|
|
111
|
+
* e raised to `x`, minus 1, accurate for `x` near 0 (where `exp(x) - 1` loses
|
|
112
|
+
* digits). Same bits on every engine; use instead of `Math.expm1` in
|
|
113
|
+
* simulation code.
|
|
114
|
+
*
|
|
115
|
+
* @category Exponentials
|
|
116
|
+
*/
|
|
117
|
+
export declare const expm1: (x: number) => number;
|
|
118
|
+
/**
|
|
119
|
+
* Natural logarithm of `x`: -Infinity at 0, NaN below 0. Same bits on every
|
|
120
|
+
* engine (within 1 ulp of the exact value); use instead of `Math.log` in
|
|
121
|
+
* simulation code.
|
|
122
|
+
*
|
|
123
|
+
* @category Exponentials
|
|
124
|
+
*/
|
|
125
|
+
export declare const log: (x: number) => number;
|
|
126
|
+
/**
|
|
127
|
+
* Base-2 logarithm of `x`: -Infinity at 0, NaN below 0, exact for powers of
|
|
128
|
+
* two. Same bits on every engine; use instead of `Math.log2` in simulation
|
|
129
|
+
* code.
|
|
130
|
+
*
|
|
131
|
+
* @category Exponentials
|
|
132
|
+
*/
|
|
133
|
+
export declare const log2: (x: number) => number;
|
|
134
|
+
/**
|
|
135
|
+
* Base-10 logarithm of `x`: -Infinity at 0, NaN below 0. Same bits on every
|
|
136
|
+
* engine; use instead of `Math.log10` in simulation code.
|
|
137
|
+
*
|
|
138
|
+
* @category Exponentials
|
|
139
|
+
*/
|
|
140
|
+
export declare const log10: (x: number) => number;
|
|
141
|
+
/**
|
|
142
|
+
* Natural logarithm of `1 + x`, accurate for `x` near 0 (where `log(1 + x)`
|
|
143
|
+
* loses digits). Same bits on every engine; use instead of `Math.log1p` in
|
|
144
|
+
* simulation code.
|
|
145
|
+
*
|
|
146
|
+
* @category Exponentials
|
|
147
|
+
*/
|
|
148
|
+
export declare const log1p: (x: number) => number;
|
|
149
|
+
/**
|
|
150
|
+
* Cube root of `x`, negative for negative `x`. Same bits on every engine;
|
|
151
|
+
* use instead of `Math.cbrt` and `x ** (1 / 3)` in simulation code.
|
|
152
|
+
*
|
|
153
|
+
* @category Exponentials
|
|
154
|
+
*/
|
|
155
|
+
export declare const cbrt: (x: number) => number;
|
|
156
|
+
/**
|
|
157
|
+
* `base` raised to `exponent`, with the results of `base ** exponent` for
|
|
158
|
+
* every special case (NaN, zeros, infinities, negative bases). Same bits on
|
|
159
|
+
* every engine (within 1 ulp of the exact value); use instead of `Math.pow`
|
|
160
|
+
* and `**` in simulation code. `x * x` and `x ** 2` are already exact.
|
|
161
|
+
*
|
|
162
|
+
* @category Exponentials
|
|
163
|
+
*/
|
|
164
|
+
export declare const pow: (base: number, exponent: number) => number;
|
|
165
|
+
/**
|
|
166
|
+
* Hyperbolic sine of `x`. Same bits on every engine (within 1 ulp of the
|
|
167
|
+
* exact value); use instead of `Math.sinh` in simulation code.
|
|
168
|
+
*
|
|
169
|
+
* @category Hyperbolic
|
|
170
|
+
*/
|
|
171
|
+
export declare const sinh: (x: number) => number;
|
|
172
|
+
/**
|
|
173
|
+
* Hyperbolic cosine of `x`, at least 1. Same bits on every engine (within 1
|
|
174
|
+
* ulp of the exact value); use instead of `Math.cosh` in simulation code.
|
|
175
|
+
*
|
|
176
|
+
* @category Hyperbolic
|
|
177
|
+
*/
|
|
178
|
+
export declare const cosh: (x: number) => number;
|
|
179
|
+
/**
|
|
180
|
+
* Inverse hyperbolic sine of `x`. Same bits on every engine; use instead of
|
|
181
|
+
* `Math.asinh` in simulation code.
|
|
182
|
+
*
|
|
183
|
+
* @category Hyperbolic
|
|
184
|
+
*/
|
|
185
|
+
export declare const asinh: (x: number) => number;
|
|
186
|
+
/**
|
|
187
|
+
* Inverse hyperbolic cosine of `x`: NaN below 1. Same bits on every engine;
|
|
188
|
+
* use instead of `Math.acosh` in simulation code.
|
|
189
|
+
*
|
|
190
|
+
* @category Hyperbolic
|
|
191
|
+
*/
|
|
192
|
+
export declare const acosh: (x: number) => number;
|
|
193
|
+
/**
|
|
194
|
+
* Inverse hyperbolic tangent of `x`: ±Infinity at ±1, NaN beyond. Same bits
|
|
195
|
+
* on every engine; use instead of `Math.atanh` in simulation code.
|
|
196
|
+
*
|
|
197
|
+
* @category Hyperbolic
|
|
198
|
+
*/
|
|
199
|
+
export declare const atanh: (x: number) => number;
|
|
200
|
+
/**
|
|
201
|
+
* The length of the vector (x, y), `sqrt(x² + y²)` without overflow or
|
|
202
|
+
* underflow. Same bits on every engine (within 1 ulp of the exact value);
|
|
203
|
+
* use instead of `Math.hypot` in simulation code. Takes exactly two numbers;
|
|
204
|
+
* for vectors use `Vec2.length` and `Vec2.distance`.
|
|
205
|
+
*
|
|
206
|
+
* @category Lengths
|
|
207
|
+
*/
|
|
208
|
+
export declare const hypot: (x: number, y: number) => number;
|
|
209
|
+
//# sourceMappingURL=Ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ops.d.ts","sourceRoot":"","sources":["../src/Ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAmB,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAoB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAqB,CAAA"}
|