@jsprismarine/math 0.14.2 → 0.15.0-unstable-20261024032303
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 +87 -0
- package/dist/Vector2.cjs.cjs +21 -17
- package/dist/Vector2.d.ts +18 -11
- package/dist/Vector2.d.ts.map +1 -1
- package/dist/Vector2.es.js +21 -17
- package/dist/Vector3.cjs.cjs +90 -16
- package/dist/Vector3.d.ts +75 -11
- package/dist/Vector3.d.ts.map +1 -1
- package/dist/Vector3.es.js +90 -16
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,92 @@
|
|
|
1
1
|
# @jsprismarine/color-parser
|
|
2
2
|
|
|
3
|
+
## 0.15.0-unstable-20261024032303
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#2579](https://github.com/JSPrismarine/JSPrismarine/pull/2579) [`b6c3d73`](https://github.com/JSPrismarine/JSPrismarine/commit/b6c3d73168fa0397205e20fcbf3cc19c4d0bac36) Thanks [@filiphsps](https://github.com/filiphsps)! - Remove constructs that ahead-of-time compilation with scriptc cannot lower, keeping runtime behavior the same.
|
|
8
|
+
|
|
9
|
+
- `@jsprismarine/bedrock-data` exports `creativeitems` from a generated, explicitly typed module (`CreativeItemEntry[]`) instead of the raw JSON.
|
|
10
|
+
- `@jsprismarine/brigadier` keeps each argument builder in the module of the node it builds (the old paths re-export), declares `literal` and `argument` as functions, and its exception types call message factories positionally.
|
|
11
|
+
- `@jsprismarine/errors` declares its `Error` base without a type parameter.
|
|
12
|
+
- `@jsprismarine/math` exposes `Vector2.ZERO` and `Vector3.ZERO` as shared immutable instances, and `Vector3` subclasses keep their class through `withX` and friends by overriding `create`.
|
|
13
|
+
- `@jsprismarine/minecraft` exports `blockSchemas` from a generated, typed module (`BlockSchemaCatalogue`).
|
|
14
|
+
- `@jsprismarine/prismarine` replaces the `evt`-based event bus with its own `EventEmitter` (same `on`, `once`, `removeListener`, `removeAllListeners`, `emit` and `post`), carries inventory transaction data as a discriminated union (`kind`), exposes `allBlocks()`, `allItems()` and `allEntities()` registries, and drops the `heap`, `evt`, `fast-jwt` and `confbox` dependencies.
|
|
15
|
+
- `@jsprismarine/raknet` declares `sendPacket` without a type parameter.
|
|
16
|
+
|
|
17
|
+
- [#2579](https://github.com/JSPrismarine/JSPrismarine/pull/2579) [`95c1def`](https://github.com/JSPrismarine/JSPrismarine/commit/95c1defed96f389f944c2b61a70d4fe356d271c7) Thanks [@filiphsps](https://github.com/filiphsps)! - Drop dependencies and constructs that block ahead-of-time compilation with scriptc.
|
|
18
|
+
|
|
19
|
+
- `@jsprismarine/logger` no longer wraps winston. The `Logger` API is unchanged; transports now implement the package's own `LogTransport` interface, and a `FileTransport` replaces winston's file transport.
|
|
20
|
+
- `@jsprismarine/color-parser` declares its ANSI sequences directly instead of reading them out of chalk-cjs. The emitted escapes are identical; the chalk-specific exports are gone.
|
|
21
|
+
- `@jsprismarine/prismarine` decodes login JWTs with plain base64url instead of fast-jwt, parses config files with json5 and js-yaml instead of confbox, and drops the debug-only `Symbol.toStringTag` accessors on `Entity`, `Block` and `BlockState`.
|
|
22
|
+
- `@jsprismarine/brigadier` merges the exception classes into one module to remove an import cycle; the old module paths re-export from it.
|
|
23
|
+
- `@jsprismarine/math` widens `Vector3.equals` to accept `Vector2` (returning `false`), matching the base signature.
|
|
24
|
+
- `@jsprismarine/server` reads env files with `process.loadEnvFile` instead of dotenv.
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- [#2577](https://github.com/JSPrismarine/JSPrismarine/pull/2577) [`6b60a88`](https://github.com/JSPrismarine/JSPrismarine/commit/6b60a88e40ad9751ea177f4273779869486de7e0) Thanks [@filiphsps](https://github.com/filiphsps)! - Move JSBinaryUtils into the monorepo as `@jsprismarine/binaryutils`.
|
|
29
|
+
|
|
30
|
+
It was developed in its own repository and consumed here as a pinned npm dependency, which meant a
|
|
31
|
+
change to the binary stream needed a release there before it could be used here. It now lives in
|
|
32
|
+
`packages/binaryutils` and every consumer resolves it through the workspace, so it builds, typechecks
|
|
33
|
+
and tests together with the packages that use it.
|
|
34
|
+
|
|
35
|
+
The published name changes: `@jsprismarine/jsbinaryutils` is deprecated on npm and its last release
|
|
36
|
+
re-exports this package, so existing installs keep working. The API is unchanged.
|
|
37
|
+
|
|
38
|
+
Two things came along with the jump from the pinned 5.5.3 to current: `write()` accepted a
|
|
39
|
+
`Uint8Array` in its signature but called `Buffer#copy` on it, so anything not already a `Buffer`
|
|
40
|
+
threw at runtime — it now uses `set`. And the single internal `buffer` field is split into a read and
|
|
41
|
+
a write buffer, so code reaching past the public API to assign `.buffer` no longer populates the read
|
|
42
|
+
side; use `setReadBuffer()`.
|
|
43
|
+
|
|
44
|
+
`@jsprismarine/protocol` also gained the dependency in its manifest — it imported the package while
|
|
45
|
+
relying on it being hoisted into the root `node_modules`.
|
|
46
|
+
|
|
47
|
+
- [#2577](https://github.com/JSPrismarine/JSPrismarine/pull/2577) [`fae2f4f`](https://github.com/JSPrismarine/JSPrismarine/commit/fae2f4f9952bd5ede5c0bdceaca9bffb11195029) Thanks [@filiphsps](https://github.com/filiphsps)! - Send positional packets only to the players near them, and stop sending several of them to the entire server.
|
|
48
|
+
|
|
49
|
+
Nothing filtered by distance. Two players ten thousand blocks apart still received each other's movement, each other's block updates and each other's sounds, and each other's arm swings. The code knew: `World.sendWorldEvent` and `World.sendActorEvent` both carried a `// TODO: Limit distance`, the second of them reading "as with every other broadcast here".
|
|
50
|
+
|
|
51
|
+
Several of those broadcasts were worse than world-wide. Block placement, the animate handler, the disconnect despawn loop, the pairwise spawn at join and `Player.sendSettings` all went through `SessionManager.getAllPlayers()`, so they reached every player on the server regardless of which world they were in. Latent while only one world is loaded, and a wall in front of any multi-world work.
|
|
52
|
+
|
|
53
|
+
Recipients are now chosen in one place. `World.getViewers(position, options)` answers "who should be told about this", and `World.broadcast` and `World.broadcastAround` are the two ways to reach them; `Server.broadcastPacket` stays as the genuinely global channel for the player list, the command tree and shutdown. Chat, the time of day and the command tree are unchanged.
|
|
54
|
+
|
|
55
|
+
The test is done in chunk space against the recipient's own negotiated view distance, not against a fixed radius and not against the set of chunks the server believes it has sent. That last option is nominally the most accurate and is the wrong trade: `loadedChunks` is only marked once a batch has finished compressing and is never marked if that compression fails, so building entity visibility on it makes a compression failure show up as permanently invisible mobs. Being slightly too generous costs a packet the client discards on its own; being too stingy costs an entity that is never drawn. The chunk test is circular rather than square because `needNewChunks` loads terrain on `dx² + dz² > viewDistance²` — what a client holds is a disc, so a square test would send updates for four corners it has no ground for. Both cost the same arithmetic.
|
|
56
|
+
|
|
57
|
+
Entity visibility follows vanilla in being per type rather than one radius for everything. `Entity.getTrackingRange` and `getTrackingInterval` default to 8 chunks and 3 ticks; players override to 32 chunks — past any view distance, so the viewer's own radius decides — and dropped items to 6 chunks and 20 ticks. Items are the reason this matters: they are the most numerous entity in any world and the least worth seeing at a distance, and one mob farm at the generic radius streams thousands of them to everybody nearby.
|
|
58
|
+
|
|
59
|
+
Each session now tracks which entities its client actually holds, reconciled when the player crosses a chunk boundary and every few ticks otherwise, with hysteresis between the radius at which an entity appears and the one at which it goes away — with a single radius a player standing on the boundary produces an `AddActor` and a `RemoveActor` for everything out there on alternating passes. Entities are recorded as tracked only after their spawn has reached the wire, so a failed spawn is retried rather than being remembered as delivered and never sent again. Movement is gated on that tracked set rather than on distance: a `MoveActorAbsolutePacket` for a runtime id a client was never given is discarded at the other end anyway, which makes tracking both the correct gate and a set lookup instead of arithmetic on the hottest path in the server.
|
|
60
|
+
|
|
61
|
+
`proximity-broadcast: false` turns the filtering off. It restores world-wide delivery, not the server-wide fan-out, which was a bug rather than a behaviour. `entity-tracking-hysteresis` and `entity-tracking-interval` tune the rest.
|
|
62
|
+
|
|
63
|
+
Three bugs came out of the audit that had nothing to do with distance:
|
|
64
|
+
|
|
65
|
+
`Player.sendSettings` sent one player's `UpdateAdventureSettingsPacket` to every other client. That packet has no target actor field at all — it describes the client receiving it — so a single spectator set `worldImmutable`, `noAttackingPlayers` and `noAttackingMobs` on everybody else on the server. `PlayerSession.sendSpawn` had the same defect the other way round, pushing the *viewer's* settings onto the player being spawned on every spawn. Adventure settings now go to their own client only; `UpdateAbilitiesPacket`, which does carry `targetActorUniqueId`, still reaches everyone who can see the player.
|
|
66
|
+
|
|
67
|
+
The chat listener was never unregistered. It was registered with `this.chatHandler.bind(this)` and removed by passing the naked method, which is a different function object, so every disconnected player stayed subscribed to chat for the life of the process.
|
|
68
|
+
|
|
69
|
+
`CoordinateUtils.fromBlockToChunk` was `v >> 4`, and `>>` converts through `ToInt32`, which truncates towards zero. Entity positions are floats, so anything standing between -1 and 0 was placed in chunk 0 rather than chunk -1.
|
|
70
|
+
|
|
71
|
+
Performance, alongside the reduction in recipients:
|
|
72
|
+
|
|
73
|
+
Broadcasts compress once. `Server.broadcastPacket` was a serial `await` in a loop that built a fresh `BatchPacket` per recipient, so one `UpdateBlockPacket` going to twenty players was twenty runs of zlib over identical bytes, each waiting on the one before it. `MinecraftSession.sendSharedBatch` frames bytes somebody else encoded, through the same ordering chain so it cannot overtake a chunk batch still compressing.
|
|
74
|
+
|
|
75
|
+
`needNewChunks` no longer runs every tick. It rebuilt a heap of a few hundred candidates twenty times a second per player, for a player who had not moved a block; it now runs when the player changes chunk, which is the same signal that drives entity visibility.
|
|
76
|
+
|
|
77
|
+
A tick's movement is deduplicated per entity. `Entity.setX`, `setY` and `setZ` each announce a move of their own, so a single diagonal step queued three identical packets naming the same destination.
|
|
78
|
+
|
|
79
|
+
`SetTimePacket` goes out once a second instead of twenty times a second. The client runs its own day cycle in between, which is why the packet is in the default `log-excluded-packets` in the first place.
|
|
80
|
+
|
|
81
|
+
Dead code removed: `Player.chunkSendQueue`, a `Set<Chunk>` never read or written that shadowed the real queue on `PlayerSession` by name; `PlayerSession.sendChunk`, which had no callers and was superseded by `flushChunkBatch`; and `DataPacket.getAllowBatching`, which read a field nothing ever set. `PlayerSession.send` now returns its send instead of dropping the promise, so awaiting a broadcast means something and framing errors are no longer swallowed. `PlayerSession.broadcastMove` is renamed `sendMove`, since it sends to one session and the fan-out of that name lives on `World`. `SessionManager.getAllPlayers` now filters on `isOnline()` as `World.getPlayers` already did, so a connection still in the login handshake is no longer among the recipients of every broadcast.
|
|
82
|
+
|
|
83
|
+
`Vector3` gains `distanceTo` and `distanceSquaredTo`. There were five hand-rolled copies of that arithmetic across the server using three different metrics.
|
|
84
|
+
|
|
85
|
+
- [#2579](https://github.com/JSPrismarine/JSPrismarine/pull/2579) [`ff8648e`](https://github.com/JSPrismarine/JSPrismarine/commit/ff8648e6f92e87f702a1fefc09d306db3307da8a) Thanks [@filiphsps](https://github.com/filiphsps)! - Build declaration files with TypeScript 7 through `tsc-ts`. JSON data exports are now typed structurally (`string`, `number`) instead of as literal values.
|
|
86
|
+
- Updated dependencies [[`6b60a88`](https://github.com/JSPrismarine/JSPrismarine/commit/6b60a88e40ad9751ea177f4273779869486de7e0), [`b6c3d73`](https://github.com/JSPrismarine/JSPrismarine/commit/b6c3d73168fa0397205e20fcbf3cc19c4d0bac36), [`95c1def`](https://github.com/JSPrismarine/JSPrismarine/commit/95c1defed96f389f944c2b61a70d4fe356d271c7), [`ff8648e`](https://github.com/JSPrismarine/JSPrismarine/commit/ff8648e6f92e87f702a1fefc09d306db3307da8a)]:
|
|
87
|
+
- @jsprismarine/binaryutils@0.15.0-unstable-20261024032303
|
|
88
|
+
- @jsprismarine/color-parser@0.15.0-unstable-20261024032303
|
|
89
|
+
|
|
3
90
|
## 0.14.2
|
|
4
91
|
|
|
5
92
|
### Patch Changes
|
package/dist/Vector2.cjs.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
3
|
+
// src/Vector2.ts
|
|
4
4
|
/**
|
|
5
5
|
* 2D Vector.
|
|
6
6
|
*/
|
|
@@ -10,9 +10,7 @@ var Vector2 = class Vector2 {
|
|
|
10
10
|
/**
|
|
11
11
|
* Returns a Vector2 with 0 on all axis.
|
|
12
12
|
*/
|
|
13
|
-
static
|
|
14
|
-
return new Vector2(0, 0);
|
|
15
|
-
}
|
|
13
|
+
static ZERO = new Vector2(0, 0);
|
|
16
14
|
/**
|
|
17
15
|
* Create a new `Vector2` instance.
|
|
18
16
|
* @param {number} x - The X coordinate.
|
|
@@ -38,26 +36,28 @@ var Vector2 = class Vector2 {
|
|
|
38
36
|
return new Vector2(x, z);
|
|
39
37
|
}
|
|
40
38
|
/**
|
|
41
|
-
*
|
|
39
|
+
* Returns a copy with a different X coordinate.
|
|
42
40
|
* @param {number} x - The X coordinate.
|
|
41
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
43
42
|
* @example
|
|
44
43
|
* ```typescript
|
|
45
|
-
*
|
|
44
|
+
* const moved = vector.withX(10);
|
|
46
45
|
* ```
|
|
47
46
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
withX(x) {
|
|
48
|
+
return new Vector2(x, this.z);
|
|
50
49
|
}
|
|
51
50
|
/**
|
|
52
|
-
*
|
|
51
|
+
* Returns a copy with a different Z coordinate.
|
|
53
52
|
* @param {number} z - The Z coordinate.
|
|
53
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
54
54
|
* @example
|
|
55
55
|
* ```typescript
|
|
56
|
-
*
|
|
56
|
+
* const moved = vector.withZ(10);
|
|
57
57
|
* ```
|
|
58
58
|
*/
|
|
59
|
-
|
|
60
|
-
this.
|
|
59
|
+
withZ(z) {
|
|
60
|
+
return new Vector2(this.x, z);
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Get the x coordinate.
|
|
@@ -80,15 +80,19 @@ var Vector2 = class Vector2 {
|
|
|
80
80
|
return new Vector2(Math.trunc(this.x), Math.trunc(this.z));
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
* Compare an instance of `
|
|
84
|
-
*
|
|
83
|
+
* Compare an instance of `Vector2` with another.
|
|
84
|
+
*
|
|
85
|
+
* Compares coordinates and nothing else. The previous implementation compared
|
|
86
|
+
* `JSON.stringify` of both sides, which dragged in whatever fields a subclass had
|
|
87
|
+
* added - and for a subclass holding a reference back into the object graph, such as
|
|
88
|
+
* a position carrying its world, serialising it threw on the circular structure.
|
|
89
|
+
* @param {Vector2} vector - The `Vector2` to compare to.
|
|
85
90
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
86
91
|
*/
|
|
87
92
|
equals(vector) {
|
|
88
|
-
return
|
|
93
|
+
return this.x === vector.x && this.z === vector.z;
|
|
89
94
|
}
|
|
90
95
|
};
|
|
91
|
-
//#endregion
|
|
92
96
|
exports.Vector2 = Vector2;
|
|
93
97
|
|
|
94
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMi5janMuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9WZWN0b3IyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogMkQgVmVjdG9yLlxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yMiB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIFZlY3RvcjIgd2l0aCAwIG9uIGFsbCBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWkVSTzogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGBWZWN0b3IyYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IyKDEwLCAyMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgeDogbnVtYmVyID0gMCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHo6IG51bWJlciA9IDBcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB4OiDCp2Ike3RoaXMueC50b0ZpeGVkKDIpfcKnciwgejogwqdiJHt0aGlzLnoudG9GaXhlZCgyKX3Cp3JgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMiBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCB3aXRoIHggYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHggYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yMn0gQSBuZXcgVmVjdG9yMiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoeyB4LCB6IH06IHsgeDogbnVtYmVyOyB6OiBudW1iZXIgfSk6IFZlY3RvcjIge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoeCwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgd2l0aCBhIGRpZmZlcmVudCBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IyfSBBIG5ldyB2ZWN0b3I7IHRoaXMgb25lIGlzIGxlZnQgYWxvbmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbW92ZWQgPSB2ZWN0b3Iud2l0aFgoMTApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoWCh4OiBudW1iZXIpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgsIHRoaXMueik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgd2l0aCBhIGRpZmZlcmVudCBaIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IyfSBBIG5ldyB2ZWN0b3I7IHRoaXMgb25lIGlzIGxlZnQgYWxvbmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbW92ZWQgPSB2ZWN0b3Iud2l0aFooMTApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoWih6OiBudW1iZXIpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHRoaXMueCwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB4IGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHggY29vcmRpbmF0ZSdzIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRYKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLng7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSB6IGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHogY29vcmRpbmF0ZSdzIHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRaKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLno7XG4gICAgfVxuXG4gICAgcHVibGljIGZsb29yKCk6IFZlY3RvcjIge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjIoTWF0aC5mbG9vcih0aGlzLngpLCBNYXRoLmZsb29yKHRoaXMueikpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cnVuYygpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKE1hdGgudHJ1bmModGhpcy54KSwgTWF0aC50cnVuYyh0aGlzLnopKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIGFuIGluc3RhbmNlIG9mIGBWZWN0b3IyYCB3aXRoIGFub3RoZXIuXG4gICAgICpcbiAgICAgKiBDb21wYXJlcyBjb29yZGluYXRlcyBhbmQgbm90aGluZyBlbHNlLiBUaGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gY29tcGFyZWRcbiAgICAgKiBgSlNPTi5zdHJpbmdpZnlgIG9mIGJvdGggc2lkZXMsIHdoaWNoIGRyYWdnZWQgaW4gd2hhdGV2ZXIgZmllbGRzIGEgc3ViY2xhc3MgaGFkXG4gICAgICogYWRkZWQgLSBhbmQgZm9yIGEgc3ViY2xhc3MgaG9sZGluZyBhIHJlZmVyZW5jZSBiYWNrIGludG8gdGhlIG9iamVjdCBncmFwaCwgc3VjaCBhc1xuICAgICAqIGEgcG9zaXRpb24gY2FycnlpbmcgaXRzIHdvcmxkLCBzZXJpYWxpc2luZyBpdCB0aHJldyBvbiB0aGUgY2lyY3VsYXIgc3RydWN0dXJlLlxuICAgICAqIEBwYXJhbSB7VmVjdG9yMn0gdmVjdG9yIC0gVGhlIGBWZWN0b3IyYCB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhleSdyZSBlcXVhbCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZXF1YWxzKHZlY3RvcjogVmVjdG9yMik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy54ID09PSB2ZWN0b3IueCAmJiB0aGlzLnogPT09IHZlY3Rvci56O1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBR0EsSUFBYSxVQUFiLE1BQWEsUUFBUTtDQWdCTTtDQUNBOzs7O0NBYnZCLE9BQXVCLE9BQWdCLElBQUksUUFBUSxHQUFHLENBQUM7Ozs7Ozs7Ozs7Q0FXdkQsWUFDSSxJQUErQixHQUMvQixJQUErQixHQUNqQztFQUZxQixLQUFBLElBQUE7RUFDQSxLQUFBLElBQUE7Q0FDcEI7Q0FFSCxXQUEwQjtFQUN0QixPQUFPLFFBQVEsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFdBQVcsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO0NBQ2xFOzs7Ozs7Q0FPQSxPQUFjLFdBQVcsRUFBRSxHQUFHLEtBQXdDO0VBQ2xFLE9BQU8sSUFBSSxRQUFRLEdBQUcsQ0FBQztDQUMzQjs7Ozs7Ozs7OztDQVdBLE1BQWEsR0FBb0I7RUFDN0IsT0FBTyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDaEM7Ozs7Ozs7Ozs7Q0FXQSxNQUFhLEdBQW9CO0VBQzdCLE9BQU8sSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO0NBQ2hDOzs7OztDQU1BLE9BQXNCO0VBQ2xCLE9BQU8sS0FBSztDQUNoQjs7Ozs7Q0FNQSxPQUFzQjtFQUNsQixPQUFPLEtBQUs7Q0FDaEI7Q0FFQSxRQUF3QjtFQUNwQixPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQzdEO0NBRUEsUUFBd0I7RUFDcEIsT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxLQUFLLENBQUMsQ0FBQztDQUM3RDs7Ozs7Ozs7Ozs7Q0FZQSxPQUFjLFFBQTBCO0VBQ3BDLE9BQU8sS0FBSyxNQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTztDQUNwRDtBQUNKIn0=
|
package/dist/Vector2.d.ts
CHANGED
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* 2D Vector.
|
|
3
3
|
*/
|
|
4
4
|
export declare class Vector2 {
|
|
5
|
-
protected x: number;
|
|
6
|
-
protected z: number;
|
|
5
|
+
protected readonly x: number;
|
|
6
|
+
protected readonly z: number;
|
|
7
7
|
/**
|
|
8
8
|
* Returns a Vector2 with 0 on all axis.
|
|
9
9
|
*/
|
|
10
|
-
static
|
|
10
|
+
static readonly ZERO: Vector2;
|
|
11
11
|
/**
|
|
12
12
|
* Create a new `Vector2` instance.
|
|
13
13
|
* @param {number} x - The X coordinate.
|
|
@@ -29,23 +29,25 @@ export declare class Vector2 {
|
|
|
29
29
|
z: number;
|
|
30
30
|
}): Vector2;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Returns a copy with a different X coordinate.
|
|
33
33
|
* @param {number} x - The X coordinate.
|
|
34
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
34
35
|
* @example
|
|
35
36
|
* ```typescript
|
|
36
|
-
*
|
|
37
|
+
* const moved = vector.withX(10);
|
|
37
38
|
* ```
|
|
38
39
|
*/
|
|
39
|
-
|
|
40
|
+
withX(x: number): Vector2;
|
|
40
41
|
/**
|
|
41
|
-
*
|
|
42
|
+
* Returns a copy with a different Z coordinate.
|
|
42
43
|
* @param {number} z - The Z coordinate.
|
|
44
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
43
45
|
* @example
|
|
44
46
|
* ```typescript
|
|
45
|
-
*
|
|
47
|
+
* const moved = vector.withZ(10);
|
|
46
48
|
* ```
|
|
47
49
|
*/
|
|
48
|
-
|
|
50
|
+
withZ(z: number): Vector2;
|
|
49
51
|
/**
|
|
50
52
|
* Get the x coordinate.
|
|
51
53
|
* @returns {number} The x coordinate's value.
|
|
@@ -59,8 +61,13 @@ export declare class Vector2 {
|
|
|
59
61
|
floor(): Vector2;
|
|
60
62
|
trunc(): Vector2;
|
|
61
63
|
/**
|
|
62
|
-
* Compare an instance of `
|
|
63
|
-
*
|
|
64
|
+
* Compare an instance of `Vector2` with another.
|
|
65
|
+
*
|
|
66
|
+
* Compares coordinates and nothing else. The previous implementation compared
|
|
67
|
+
* `JSON.stringify` of both sides, which dragged in whatever fields a subclass had
|
|
68
|
+
* added - and for a subclass holding a reference back into the object graph, such as
|
|
69
|
+
* a position carrying its world, serialising it threw on the circular structure.
|
|
70
|
+
* @param {Vector2} vector - The `Vector2` to compare to.
|
|
64
71
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
65
72
|
*/
|
|
66
73
|
equals(vector: Vector2): boolean;
|
package/dist/Vector2.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector2.d.ts","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,OAAO;
|
|
1
|
+
{"version":3,"file":"Vector2.d.ts","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,OAAO;IAgBZ,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM;IAC5B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM;IAhBhC;;OAEG;IACH,gBAAuB,IAAI,EAAE,OAAO,CAAqB;IAEzD;;;;;;;;OAQG;IACH,YACuB,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EAChC;IAEG,QAAQ,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,OAAc,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAEpE;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/B;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/B;IAED;;;OAGG;IACI,IAAI,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACI,IAAI,IAAI,MAAM,CAEpB;IAEM,KAAK,IAAI,OAAO,CAEtB;IAEM,KAAK,IAAI,OAAO,CAEtB;IAED;;;;;;;;;OASG;IACI,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAEtC;CACJ"}
|
package/dist/Vector2.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// src/Vector2.ts
|
|
2
2
|
/**
|
|
3
3
|
* 2D Vector.
|
|
4
4
|
*/
|
|
@@ -8,9 +8,7 @@ var Vector2 = class Vector2 {
|
|
|
8
8
|
/**
|
|
9
9
|
* Returns a Vector2 with 0 on all axis.
|
|
10
10
|
*/
|
|
11
|
-
static
|
|
12
|
-
return new Vector2(0, 0);
|
|
13
|
-
}
|
|
11
|
+
static ZERO = new Vector2(0, 0);
|
|
14
12
|
/**
|
|
15
13
|
* Create a new `Vector2` instance.
|
|
16
14
|
* @param {number} x - The X coordinate.
|
|
@@ -36,26 +34,28 @@ var Vector2 = class Vector2 {
|
|
|
36
34
|
return new Vector2(x, z);
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
|
-
*
|
|
37
|
+
* Returns a copy with a different X coordinate.
|
|
40
38
|
* @param {number} x - The X coordinate.
|
|
39
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
41
40
|
* @example
|
|
42
41
|
* ```typescript
|
|
43
|
-
*
|
|
42
|
+
* const moved = vector.withX(10);
|
|
44
43
|
* ```
|
|
45
44
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
withX(x) {
|
|
46
|
+
return new Vector2(x, this.z);
|
|
48
47
|
}
|
|
49
48
|
/**
|
|
50
|
-
*
|
|
49
|
+
* Returns a copy with a different Z coordinate.
|
|
51
50
|
* @param {number} z - The Z coordinate.
|
|
51
|
+
* @returns {Vector2} A new vector; this one is left alone.
|
|
52
52
|
* @example
|
|
53
53
|
* ```typescript
|
|
54
|
-
*
|
|
54
|
+
* const moved = vector.withZ(10);
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
|
-
|
|
58
|
-
this.
|
|
57
|
+
withZ(z) {
|
|
58
|
+
return new Vector2(this.x, z);
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Get the x coordinate.
|
|
@@ -78,15 +78,19 @@ var Vector2 = class Vector2 {
|
|
|
78
78
|
return new Vector2(Math.trunc(this.x), Math.trunc(this.z));
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Compare an instance of `
|
|
82
|
-
*
|
|
81
|
+
* Compare an instance of `Vector2` with another.
|
|
82
|
+
*
|
|
83
|
+
* Compares coordinates and nothing else. The previous implementation compared
|
|
84
|
+
* `JSON.stringify` of both sides, which dragged in whatever fields a subclass had
|
|
85
|
+
* added - and for a subclass holding a reference back into the object graph, such as
|
|
86
|
+
* a position carrying its world, serialising it threw on the circular structure.
|
|
87
|
+
* @param {Vector2} vector - The `Vector2` to compare to.
|
|
83
88
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
84
89
|
*/
|
|
85
90
|
equals(vector) {
|
|
86
|
-
return
|
|
91
|
+
return this.x === vector.x && this.z === vector.z;
|
|
87
92
|
}
|
|
88
93
|
};
|
|
89
|
-
//#endregion
|
|
90
94
|
export { Vector2 };
|
|
91
95
|
|
|
92
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMi5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvVmVjdG9yMi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIDJEIFZlY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcjIge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBWZWN0b3IyIHdpdGggMCBvbiBhbGwgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFpFUk86IFZlY3RvcjIgPSBuZXcgVmVjdG9yMigwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBgVmVjdG9yMmAgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMigxMCwgMjApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHg6IG51bWJlciA9IDAsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSB6OiBudW1iZXIgPSAwXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgeDogwqdiJHt0aGlzLngudG9GaXhlZCgyKX3Cp3IsIHo6IMKnYiR7dGhpcy56LnRvRml4ZWQoMil9wqdyYDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjIgaW5zdGFuY2UgZnJvbSBhbiBvYmplY3Qgd2l0aCB4IGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgY29udGFpbmluZyB4IGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge1ZlY3RvcjJ9IEEgbmV3IFZlY3RvcjIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KHsgeCwgeiB9OiB7IHg6IG51bWJlcjsgejogbnVtYmVyIH0pOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKHgsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IHdpdGggYSBkaWZmZXJlbnQgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yMn0gQSBuZXcgdmVjdG9yOyB0aGlzIG9uZSBpcyBsZWZ0IGFsb25lLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG1vdmVkID0gdmVjdG9yLndpdGhYKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFgoeDogbnVtYmVyKTogVmVjdG9yMiB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih4LCB0aGlzLnopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IHdpdGggYSBkaWZmZXJlbnQgWiBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7VmVjdG9yMn0gQSBuZXcgdmVjdG9yOyB0aGlzIG9uZSBpcyBsZWZ0IGFsb25lLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG1vdmVkID0gdmVjdG9yLndpdGhaKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFooejogbnVtYmVyKTogVmVjdG9yMiB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMih0aGlzLngsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgeCBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB4IGNvb3JkaW5hdGUncyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0WCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy54O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgeiBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB6IGNvb3JkaW5hdGUncyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0WigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy56O1xuICAgIH1cblxuICAgIHB1YmxpYyBmbG9vcigpOiBWZWN0b3IyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IyKE1hdGguZmxvb3IodGhpcy54KSwgTWF0aC5mbG9vcih0aGlzLnopKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJ1bmMoKTogVmVjdG9yMiB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yMihNYXRoLnRydW5jKHRoaXMueCksIE1hdGgudHJ1bmModGhpcy56KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhbiBpbnN0YW5jZSBvZiBgVmVjdG9yMmAgd2l0aCBhbm90aGVyLlxuICAgICAqXG4gICAgICogQ29tcGFyZXMgY29vcmRpbmF0ZXMgYW5kIG5vdGhpbmcgZWxzZS4gVGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIGNvbXBhcmVkXG4gICAgICogYEpTT04uc3RyaW5naWZ5YCBvZiBib3RoIHNpZGVzLCB3aGljaCBkcmFnZ2VkIGluIHdoYXRldmVyIGZpZWxkcyBhIHN1YmNsYXNzIGhhZFxuICAgICAqIGFkZGVkIC0gYW5kIGZvciBhIHN1YmNsYXNzIGhvbGRpbmcgYSByZWZlcmVuY2UgYmFjayBpbnRvIHRoZSBvYmplY3QgZ3JhcGgsIHN1Y2ggYXNcbiAgICAgKiBhIHBvc2l0aW9uIGNhcnJ5aW5nIGl0cyB3b3JsZCwgc2VyaWFsaXNpbmcgaXQgdGhyZXcgb24gdGhlIGNpcmN1bGFyIHN0cnVjdHVyZS5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjJ9IHZlY3RvciAtIFRoZSBgVmVjdG9yMmAgdG8gY29tcGFyZSB0by5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXkncmUgZXF1YWwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgcHVibGljIGVxdWFscyh2ZWN0b3I6IFZlY3RvcjIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueCA9PT0gdmVjdG9yLnggJiYgdGhpcy56ID09PSB2ZWN0b3IuejtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxJQUFhLFVBQWIsTUFBYSxRQUFRO0NBZ0JNO0NBQ0E7Ozs7Q0FidkIsT0FBdUIsT0FBZ0IsSUFBSSxRQUFRLEdBQUcsQ0FBQzs7Ozs7Ozs7OztDQVd2RCxZQUNJLElBQStCLEdBQy9CLElBQStCLEdBQ2pDO0VBRnFCLEtBQUEsSUFBQTtFQUNBLEtBQUEsSUFBQTtDQUNwQjtDQUVILFdBQTBCO0VBQ3RCLE9BQU8sUUFBUSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7Q0FDbEU7Ozs7OztDQU9BLE9BQWMsV0FBVyxFQUFFLEdBQUcsS0FBd0M7RUFDbEUsT0FBTyxJQUFJLFFBQVEsR0FBRyxDQUFDO0NBQzNCOzs7Ozs7Ozs7O0NBV0EsTUFBYSxHQUFvQjtFQUM3QixPQUFPLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztDQUNoQzs7Ozs7Ozs7OztDQVdBLE1BQWEsR0FBb0I7RUFDN0IsT0FBTyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7Q0FDaEM7Ozs7O0NBTUEsT0FBc0I7RUFDbEIsT0FBTyxLQUFLO0NBQ2hCOzs7OztDQU1BLE9BQXNCO0VBQ2xCLE9BQU8sS0FBSztDQUNoQjtDQUVBLFFBQXdCO0VBQ3BCLE9BQU8sSUFBSSxRQUFRLEtBQUssTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDLENBQUM7Q0FDN0Q7Q0FFQSxRQUF3QjtFQUNwQixPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQzdEOzs7Ozs7Ozs7OztDQVlBLE9BQWMsUUFBMEI7RUFDcEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPO0NBQ3BEO0FBQ0oifQ==
|
package/dist/Vector3.cjs.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require_Vector2 = require("./Vector2.cjs.cjs");
|
|
4
|
-
|
|
4
|
+
// src/Vector3.ts
|
|
5
5
|
/**
|
|
6
6
|
* 3D Vector.
|
|
7
7
|
*/
|
|
@@ -10,9 +10,7 @@ var Vector3 = class Vector3 extends require_Vector2.Vector2 {
|
|
|
10
10
|
/**
|
|
11
11
|
* Returns a Vector3 with 0 on all axis.
|
|
12
12
|
*/
|
|
13
|
-
static
|
|
14
|
-
return new Vector3(0, 0, 0);
|
|
15
|
-
}
|
|
13
|
+
static ZERO = new Vector3(0, 0, 0);
|
|
16
14
|
/**
|
|
17
15
|
* Create a new `Vector3` instance.
|
|
18
16
|
* @param {number} x - The X coordinate.
|
|
@@ -39,15 +37,54 @@ var Vector3 = class Vector3 extends require_Vector2.Vector2 {
|
|
|
39
37
|
return new Vector3(x, y, z);
|
|
40
38
|
}
|
|
41
39
|
/**
|
|
42
|
-
*
|
|
40
|
+
* Builds another instance of whatever class this actually is, from raw coordinates.
|
|
41
|
+
*
|
|
42
|
+
* Every method that derives a new vector goes through here, so a subclass keeps its own
|
|
43
|
+
* type instead of decaying to a plain `Vector3` - and a subclass carrying extra state,
|
|
44
|
+
* such as a position carrying its world, gets one place to reattach it.
|
|
45
|
+
* @param {number} x - The X coordinate.
|
|
43
46
|
* @param {number} y - The Y coordinate.
|
|
47
|
+
* @param {number} z - The Z coordinate.
|
|
48
|
+
* @returns {this} A new instance of the concrete class.
|
|
49
|
+
*/
|
|
50
|
+
create(x, y, z) {
|
|
51
|
+
return new this.constructor(x, y, z);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Returns a copy with a different X coordinate.
|
|
55
|
+
* @param {number} x - The X coordinate.
|
|
56
|
+
* @returns {this} A new vector; this one is left alone.
|
|
44
57
|
* @example
|
|
45
58
|
* ```typescript
|
|
46
|
-
*
|
|
59
|
+
* const moved = vector.withX(10);
|
|
47
60
|
* ```
|
|
48
61
|
*/
|
|
49
|
-
|
|
50
|
-
this.y
|
|
62
|
+
withX(x) {
|
|
63
|
+
return this.create(x, this.y, this.z);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns a copy with a different Y coordinate.
|
|
67
|
+
* @param {number} y - The Y coordinate.
|
|
68
|
+
* @returns {this} A new vector; this one is left alone.
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const moved = vector.withY(10);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
withY(y) {
|
|
75
|
+
return this.create(this.x, y, this.z);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns a copy with a different Z coordinate.
|
|
79
|
+
* @param {number} z - The Z coordinate.
|
|
80
|
+
* @returns {this} A new vector; this one is left alone.
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const moved = vector.withZ(10);
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
withZ(z) {
|
|
87
|
+
return this.create(this.x, this.y, z);
|
|
51
88
|
}
|
|
52
89
|
/**
|
|
53
90
|
* Get the y coordinate.
|
|
@@ -58,28 +95,65 @@ var Vector3 = class Vector3 extends require_Vector2.Vector2 {
|
|
|
58
95
|
}
|
|
59
96
|
/**
|
|
60
97
|
* Returns a new Vector3 with each component rounded down to the nearest integer.
|
|
61
|
-
* @returns {
|
|
98
|
+
* @returns {this} A new vector with rounded down components.
|
|
62
99
|
*/
|
|
63
100
|
floor() {
|
|
64
|
-
return
|
|
101
|
+
return this.create(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z));
|
|
65
102
|
}
|
|
66
103
|
/**
|
|
67
104
|
* Returns a new Vector3 with each component truncated to the nearest integer.
|
|
68
|
-
* @returns {
|
|
105
|
+
* @returns {this} A new vector with truncated axis.
|
|
69
106
|
*/
|
|
70
107
|
trunc() {
|
|
71
|
-
return
|
|
108
|
+
return this.create(Math.trunc(this.x), Math.trunc(this.y), Math.trunc(this.z));
|
|
72
109
|
}
|
|
73
110
|
/**
|
|
74
111
|
* Compare an instance of `Vector3` with another.
|
|
75
|
-
*
|
|
112
|
+
*
|
|
113
|
+
* The parameter type matches the base declaration because ahead-of-time
|
|
114
|
+
* compilation only lowers overrides with identical signatures; a plain
|
|
115
|
+
* `Vector2` is never equal to a `Vector3`.
|
|
116
|
+
* @param {Vector2} vector - The vector to compare to.
|
|
76
117
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
77
118
|
*/
|
|
78
119
|
equals(vector) {
|
|
79
|
-
return
|
|
120
|
+
return vector instanceof Vector3 && this.x === vector.x && this.y === vector.y && this.z === vector.z;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The squared distance to another vector.
|
|
124
|
+
*
|
|
125
|
+
* Squared, and offered first, because almost every caller compares a distance against
|
|
126
|
+
* another distance - and a comparison of squares gives the same answer without the square
|
|
127
|
+
* root. Prefer this to {@link Vector3.distanceTo} wherever the number itself is not shown
|
|
128
|
+
* to anyone.
|
|
129
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
130
|
+
* @returns {number} The squared distance.
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* if (a.distanceSquaredTo(b) <= range * range) {
|
|
134
|
+
* // within range, with no square root taken
|
|
135
|
+
* }
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
distanceSquaredTo(vector) {
|
|
139
|
+
const dx = this.x - vector.x;
|
|
140
|
+
const dy = this.y - vector.y;
|
|
141
|
+
const dz = this.z - vector.z;
|
|
142
|
+
return dx * dx + dy * dy + dz * dz;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The distance to another vector.
|
|
146
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
147
|
+
* @returns {number} The distance.
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const metres = player.getPosition().distanceTo(target.getPosition());
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
distanceTo(vector) {
|
|
154
|
+
return Math.sqrt(this.distanceSquaredTo(vector));
|
|
80
155
|
}
|
|
81
156
|
};
|
|
82
|
-
//#endregion
|
|
83
157
|
exports.Vector3 = Vector3;
|
|
84
158
|
|
|
85
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
159
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMy5janMuY2pzIiwibmFtZXMiOlsiVmVjdG9yMiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9WZWN0b3IzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlY3RvcjIgfSBmcm9tICcuL1ZlY3RvcjInO1xuXG4vKipcbiAqIDNEIFZlY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcjMgZXh0ZW5kcyBWZWN0b3IyIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgVmVjdG9yMyB3aXRoIDAgb24gYWxsIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBaRVJPOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYFZlY3RvcjNgIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHZlY3RvciA9IG5ldyBWZWN0b3IzKDEwLCAyMCwgMzApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgeTogbnVtYmVyLFxuICAgICAgICB6OiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoeCwgeik7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgeDogwqdiJHt0aGlzLngudG9GaXhlZCgyKX3Cp3IsIHk6IMKnYiR7dGhpcy55LnRvRml4ZWQoMil9wqdyLCB6OiDCp2Ike3RoaXMuei50b0ZpeGVkKDIpfcKncmA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBWZWN0b3IzIGluc3RhbmNlIGZyb20gYW4gb2JqZWN0IHdpdGggeCwgeSwgYW5kIHogcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHgsIHksIGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge1ZlY3RvcjN9IEEgbmV3IFZlY3RvcjMgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KHsgeCwgeSwgeiB9OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfSk6IFZlY3RvcjMge1xuICAgICAgICByZXR1cm4gbmV3IFZlY3RvcjMoeCwgeSwgeik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIGFub3RoZXIgaW5zdGFuY2Ugb2Ygd2hhdGV2ZXIgY2xhc3MgdGhpcyBhY3R1YWxseSBpcywgZnJvbSByYXcgY29vcmRpbmF0ZXMuXG4gICAgICpcbiAgICAgKiBFdmVyeSBtZXRob2QgdGhhdCBkZXJpdmVzIGEgbmV3IHZlY3RvciBnb2VzIHRocm91Z2ggaGVyZSwgc28gYSBzdWJjbGFzcyBrZWVwcyBpdHMgb3duXG4gICAgICogdHlwZSBpbnN0ZWFkIG9mIGRlY2F5aW5nIHRvIGEgcGxhaW4gYFZlY3RvcjNgIC0gYW5kIGEgc3ViY2xhc3MgY2FycnlpbmcgZXh0cmEgc3RhdGUsXG4gICAgICogc3VjaCBhcyBhIHBvc2l0aW9uIGNhcnJ5aW5nIGl0cyB3b3JsZCwgZ2V0cyBvbmUgcGxhY2UgdG8gcmVhdHRhY2ggaXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHggLSBUaGUgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSBaIGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge3RoaXN9IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBjb25jcmV0ZSBjbGFzcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY3JlYXRlKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIG5ldyAodGhpcy5jb25zdHJ1Y3RvciBhcyBuZXcgKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHRoaXMpKHgsIHksIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IHdpdGggYSBkaWZmZXJlbnQgWCBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gQSBuZXcgdmVjdG9yOyB0aGlzIG9uZSBpcyBsZWZ0IGFsb25lLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG1vdmVkID0gdmVjdG9yLndpdGhYKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFgoeDogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh4LCB0aGlzLnksIHRoaXMueik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgd2l0aCBhIGRpZmZlcmVudCBZIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSBBIG5ldyB2ZWN0b3I7IHRoaXMgb25lIGlzIGxlZnQgYWxvbmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbW92ZWQgPSB2ZWN0b3Iud2l0aFkoMTApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoWSh5OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMueCwgeSwgdGhpcy56KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSB3aXRoIGEgZGlmZmVyZW50IFogY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geiAtIFRoZSBaIGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge3RoaXN9IEEgbmV3IHZlY3RvcjsgdGhpcyBvbmUgaXMgbGVmdCBhbG9uZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBtb3ZlZCA9IHZlY3Rvci53aXRoWigxMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhaKHo6IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUodGhpcy54LCB0aGlzLnksIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgeSBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB5IGNvb3JkaW5hdGUncyB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0WSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy55O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIGVhY2ggY29tcG9uZW50IHJvdW5kZWQgZG93biB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSBBIG5ldyB2ZWN0b3Igd2l0aCByb3VuZGVkIGRvd24gY29tcG9uZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZmxvb3IoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShNYXRoLmZsb29yKHRoaXMueCksIE1hdGguZmxvb3IodGhpcy55KSwgTWF0aC5mbG9vcih0aGlzLnopKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCBlYWNoIGNvbXBvbmVudCB0cnVuY2F0ZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gQSBuZXcgdmVjdG9yIHdpdGggdHJ1bmNhdGVkIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHRydW5jKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoTWF0aC50cnVuYyh0aGlzLngpLCBNYXRoLnRydW5jKHRoaXMueSksIE1hdGgudHJ1bmModGhpcy56KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSBhbiBpbnN0YW5jZSBvZiBgVmVjdG9yM2Agd2l0aCBhbm90aGVyLlxuICAgICAqXG4gICAgICogVGhlIHBhcmFtZXRlciB0eXBlIG1hdGNoZXMgdGhlIGJhc2UgZGVjbGFyYXRpb24gYmVjYXVzZSBhaGVhZC1vZi10aW1lXG4gICAgICogY29tcGlsYXRpb24gb25seSBsb3dlcnMgb3ZlcnJpZGVzIHdpdGggaWRlbnRpY2FsIHNpZ25hdHVyZXM7IGEgcGxhaW5cbiAgICAgKiBgVmVjdG9yMmAgaXMgbmV2ZXIgZXF1YWwgdG8gYSBgVmVjdG9yM2AuXG4gICAgICogQHBhcmFtIHtWZWN0b3IyfSB2ZWN0b3IgLSBUaGUgdmVjdG9yIHRvIGNvbXBhcmUgdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGV5J3JlIGVxdWFsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBlcXVhbHModmVjdG9yOiBWZWN0b3IyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IgaW5zdGFuY2VvZiBWZWN0b3IzICYmIHRoaXMueCA9PT0gdmVjdG9yLnggJiYgdGhpcy55ID09PSB2ZWN0b3IueSAmJiB0aGlzLnogPT09IHZlY3Rvci56O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBzcXVhcmVkIGRpc3RhbmNlIHRvIGFub3RoZXIgdmVjdG9yLlxuICAgICAqXG4gICAgICogU3F1YXJlZCwgYW5kIG9mZmVyZWQgZmlyc3QsIGJlY2F1c2UgYWxtb3N0IGV2ZXJ5IGNhbGxlciBjb21wYXJlcyBhIGRpc3RhbmNlIGFnYWluc3RcbiAgICAgKiBhbm90aGVyIGRpc3RhbmNlIC0gYW5kIGEgY29tcGFyaXNvbiBvZiBzcXVhcmVzIGdpdmVzIHRoZSBzYW1lIGFuc3dlciB3aXRob3V0IHRoZSBzcXVhcmVcbiAgICAgKiByb290LiBQcmVmZXIgdGhpcyB0byB7QGxpbmsgVmVjdG9yMy5kaXN0YW5jZVRvfSB3aGVyZXZlciB0aGUgbnVtYmVyIGl0c2VsZiBpcyBub3Qgc2hvd25cbiAgICAgKiB0byBhbnlvbmUuXG4gICAgICogQHBhcmFtIHtWZWN0b3IzfSB2ZWN0b3IgLSBUaGUgdmVjdG9yIHRvIG1lYXN1cmUgdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNxdWFyZWQgZGlzdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogaWYgKGEuZGlzdGFuY2VTcXVhcmVkVG8oYikgPD0gcmFuZ2UgKiByYW5nZSkge1xuICAgICAqICAgICAvLyB3aXRoaW4gcmFuZ2UsIHdpdGggbm8gc3F1YXJlIHJvb3QgdGFrZW5cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRpc3RhbmNlU3F1YXJlZFRvKHZlY3RvcjogVmVjdG9yMyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGR4ID0gdGhpcy54IC0gdmVjdG9yLng7XG4gICAgICAgIGNvbnN0IGR5ID0gdGhpcy55IC0gdmVjdG9yLnk7XG4gICAgICAgIGNvbnN0IGR6ID0gdGhpcy56IC0gdmVjdG9yLno7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeSArIGR6ICogZHo7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGRpc3RhbmNlIHRvIGFub3RoZXIgdmVjdG9yLlxuICAgICAqIEBwYXJhbSB7VmVjdG9yM30gdmVjdG9yIC0gVGhlIHZlY3RvciB0byBtZWFzdXJlIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkaXN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBtZXRyZXMgPSBwbGF5ZXIuZ2V0UG9zaXRpb24oKS5kaXN0YW5jZVRvKHRhcmdldC5nZXRQb3NpdGlvbigpKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGFuY2VUbyh2ZWN0b3I6IFZlY3RvcjMpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcXVhcmVkVG8odmVjdG9yKSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0EsSUFBYSxVQUFiLE1BQWEsZ0JBQWdCQSxnQkFBQUEsUUFBUTtDQWtCVjs7OztDQWR2QixPQUF1QixPQUFnQixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUM7Ozs7Ozs7Ozs7O0NBWTFELFlBQ0ksR0FDQSxHQUNBLEdBQ0Y7RUFDRSxNQUFNLEdBQUcsQ0FBQztFQUhTLEtBQUEsSUFBQTtDQUl2QjtDQUVBLFdBQTBCO0VBQ3RCLE9BQU8sUUFBUSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7Q0FDL0Y7Ozs7OztDQU9BLE9BQWMsV0FBVyxFQUFFLEdBQUcsR0FBRyxLQUFtRDtFQUNoRixPQUFPLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztDQUM5Qjs7Ozs7Ozs7Ozs7O0NBYUEsT0FBaUIsR0FBVyxHQUFXLEdBQWlCO0VBQ3BELE9BQU8sSUFBSyxLQUFLLFlBQThELEdBQUcsR0FBRyxDQUFDO0NBQzFGOzs7Ozs7Ozs7O0NBV0EsTUFBc0IsR0FBaUI7RUFDbkMsT0FBTyxLQUFLLE9BQU8sR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ3hDOzs7Ozs7Ozs7O0NBV0EsTUFBYSxHQUFpQjtFQUMxQixPQUFPLEtBQUssT0FBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUM7Q0FDeEM7Ozs7Ozs7Ozs7Q0FXQSxNQUFzQixHQUFpQjtFQUNuQyxPQUFPLEtBQUssT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUM7Q0FDeEM7Ozs7O0NBTUEsT0FBc0I7RUFDbEIsT0FBTyxLQUFLO0NBQ2hCOzs7OztDQU1BLFFBQThCO0VBQzFCLE9BQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQ2pGOzs7OztDQU1BLFFBQThCO0VBQzFCLE9BQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQ2pGOzs7Ozs7Ozs7O0NBV0EsT0FBdUIsUUFBMEI7RUFDN0MsT0FBTyxrQkFBa0IsV0FBVyxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU87Q0FDeEc7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JBLGtCQUF5QixRQUF5QjtFQUM5QyxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU87RUFDM0IsTUFBTSxLQUFLLEtBQUssSUFBSSxPQUFPO0VBQzNCLE1BQU0sS0FBSyxLQUFLLElBQUksT0FBTztFQUMzQixPQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSztDQUNwQzs7Ozs7Ozs7OztDQVdBLFdBQWtCLFFBQXlCO0VBQ3ZDLE9BQU8sS0FBSyxLQUFLLEtBQUssa0JBQWtCLE1BQU0sQ0FBQztDQUNuRDtBQUNKIn0=
|
package/dist/Vector3.d.ts
CHANGED
|
@@ -3,11 +3,11 @@ import { Vector2 } from './Vector2';
|
|
|
3
3
|
* 3D Vector.
|
|
4
4
|
*/
|
|
5
5
|
export declare class Vector3 extends Vector2 {
|
|
6
|
-
protected y: number;
|
|
6
|
+
protected readonly y: number;
|
|
7
7
|
/**
|
|
8
8
|
* Returns a Vector3 with 0 on all axis.
|
|
9
9
|
*/
|
|
10
|
-
static
|
|
10
|
+
static readonly ZERO: Vector3;
|
|
11
11
|
/**
|
|
12
12
|
* Create a new `Vector3` instance.
|
|
13
13
|
* @param {number} x - The X coordinate.
|
|
@@ -31,14 +31,47 @@ export declare class Vector3 extends Vector2 {
|
|
|
31
31
|
z: number;
|
|
32
32
|
}): Vector3;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Builds another instance of whatever class this actually is, from raw coordinates.
|
|
35
|
+
*
|
|
36
|
+
* Every method that derives a new vector goes through here, so a subclass keeps its own
|
|
37
|
+
* type instead of decaying to a plain `Vector3` - and a subclass carrying extra state,
|
|
38
|
+
* such as a position carrying its world, gets one place to reattach it.
|
|
39
|
+
* @param {number} x - The X coordinate.
|
|
40
|
+
* @param {number} y - The Y coordinate.
|
|
41
|
+
* @param {number} z - The Z coordinate.
|
|
42
|
+
* @returns {this} A new instance of the concrete class.
|
|
43
|
+
*/
|
|
44
|
+
protected create(x: number, y: number, z: number): this;
|
|
45
|
+
/**
|
|
46
|
+
* Returns a copy with a different X coordinate.
|
|
47
|
+
* @param {number} x - The X coordinate.
|
|
48
|
+
* @returns {this} A new vector; this one is left alone.
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const moved = vector.withX(10);
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
withX(x: number): this;
|
|
55
|
+
/**
|
|
56
|
+
* Returns a copy with a different Y coordinate.
|
|
35
57
|
* @param {number} y - The Y coordinate.
|
|
58
|
+
* @returns {this} A new vector; this one is left alone.
|
|
36
59
|
* @example
|
|
37
60
|
* ```typescript
|
|
38
|
-
*
|
|
61
|
+
* const moved = vector.withY(10);
|
|
39
62
|
* ```
|
|
40
63
|
*/
|
|
41
|
-
|
|
64
|
+
withY(y: number): this;
|
|
65
|
+
/**
|
|
66
|
+
* Returns a copy with a different Z coordinate.
|
|
67
|
+
* @param {number} z - The Z coordinate.
|
|
68
|
+
* @returns {this} A new vector; this one is left alone.
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const moved = vector.withZ(10);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
withZ(z: number): this;
|
|
42
75
|
/**
|
|
43
76
|
* Get the y coordinate.
|
|
44
77
|
* @returns {number} The y coordinate's value.
|
|
@@ -46,19 +79,50 @@ export declare class Vector3 extends Vector2 {
|
|
|
46
79
|
getY(): number;
|
|
47
80
|
/**
|
|
48
81
|
* Returns a new Vector3 with each component rounded down to the nearest integer.
|
|
49
|
-
* @returns {
|
|
82
|
+
* @returns {this} A new vector with rounded down components.
|
|
50
83
|
*/
|
|
51
|
-
floor():
|
|
84
|
+
floor(): this;
|
|
52
85
|
/**
|
|
53
86
|
* Returns a new Vector3 with each component truncated to the nearest integer.
|
|
54
|
-
* @returns {
|
|
87
|
+
* @returns {this} A new vector with truncated axis.
|
|
55
88
|
*/
|
|
56
|
-
trunc():
|
|
89
|
+
trunc(): this;
|
|
57
90
|
/**
|
|
58
91
|
* Compare an instance of `Vector3` with another.
|
|
59
|
-
*
|
|
92
|
+
*
|
|
93
|
+
* The parameter type matches the base declaration because ahead-of-time
|
|
94
|
+
* compilation only lowers overrides with identical signatures; a plain
|
|
95
|
+
* `Vector2` is never equal to a `Vector3`.
|
|
96
|
+
* @param {Vector2} vector - The vector to compare to.
|
|
60
97
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
61
98
|
*/
|
|
62
|
-
equals(vector:
|
|
99
|
+
equals(vector: Vector2): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* The squared distance to another vector.
|
|
102
|
+
*
|
|
103
|
+
* Squared, and offered first, because almost every caller compares a distance against
|
|
104
|
+
* another distance - and a comparison of squares gives the same answer without the square
|
|
105
|
+
* root. Prefer this to {@link Vector3.distanceTo} wherever the number itself is not shown
|
|
106
|
+
* to anyone.
|
|
107
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
108
|
+
* @returns {number} The squared distance.
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* if (a.distanceSquaredTo(b) <= range * range) {
|
|
112
|
+
* // within range, with no square root taken
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
distanceSquaredTo(vector: Vector3): number;
|
|
117
|
+
/**
|
|
118
|
+
* The distance to another vector.
|
|
119
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
120
|
+
* @returns {number} The distance.
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const metres = player.getPosition().distanceTo(target.getPosition());
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
distanceTo(vector: Vector3): number;
|
|
63
127
|
}
|
|
64
128
|
//# sourceMappingURL=Vector3.d.ts.map
|
package/dist/Vector3.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../src/Vector3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,qBAAa,OAAQ,SAAQ,OAAO;
|
|
1
|
+
{"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../src/Vector3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,qBAAa,OAAQ,SAAQ,OAAO;IAkB5B,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM;IAjBhC;;OAEG;IACH,gBAAuB,IAAI,EAAE,OAAO,CAAwB;IAE5D;;;;;;;;;OASG;IACH,YACI,CAAC,EAAE,MAAM,EACU,CAAC,EAAE,MAAM,EAC5B,CAAC,EAAE,MAAM,EAGZ;IAEM,QAAQ,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACH,OAAc,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAElF;IAED;;;;;;;;;;OAUG;IACH,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEtD;IAED;;;;;;;;OAQG;IACa,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAErC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED;;;;;;;;OAQG;IACa,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAErC;IAED;;;OAGG;IACI,IAAI,IAAI,MAAM,CAEpB;IAED;;;OAGG;IACa,KAAK,IAAI,IAAI,CAE5B;IAED;;;OAGG;IACa,KAAK,IAAI,IAAI,CAE5B;IAED;;;;;;;;OAQG;IACa,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAE/C;IAED;;;;;;;;;;;;;;;OAeG;IACI,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAKhD;IAED;;;;;;;;OAQG;IACI,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEzC;CACJ"}
|
package/dist/Vector3.es.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Vector2 } from "./Vector2.es.js";
|
|
2
|
-
|
|
2
|
+
// src/Vector3.ts
|
|
3
3
|
/**
|
|
4
4
|
* 3D Vector.
|
|
5
5
|
*/
|
|
@@ -8,9 +8,7 @@ var Vector3 = class Vector3 extends Vector2 {
|
|
|
8
8
|
/**
|
|
9
9
|
* Returns a Vector3 with 0 on all axis.
|
|
10
10
|
*/
|
|
11
|
-
static
|
|
12
|
-
return new Vector3(0, 0, 0);
|
|
13
|
-
}
|
|
11
|
+
static ZERO = new Vector3(0, 0, 0);
|
|
14
12
|
/**
|
|
15
13
|
* Create a new `Vector3` instance.
|
|
16
14
|
* @param {number} x - The X coordinate.
|
|
@@ -37,15 +35,54 @@ var Vector3 = class Vector3 extends Vector2 {
|
|
|
37
35
|
return new Vector3(x, y, z);
|
|
38
36
|
}
|
|
39
37
|
/**
|
|
40
|
-
*
|
|
38
|
+
* Builds another instance of whatever class this actually is, from raw coordinates.
|
|
39
|
+
*
|
|
40
|
+
* Every method that derives a new vector goes through here, so a subclass keeps its own
|
|
41
|
+
* type instead of decaying to a plain `Vector3` - and a subclass carrying extra state,
|
|
42
|
+
* such as a position carrying its world, gets one place to reattach it.
|
|
43
|
+
* @param {number} x - The X coordinate.
|
|
41
44
|
* @param {number} y - The Y coordinate.
|
|
45
|
+
* @param {number} z - The Z coordinate.
|
|
46
|
+
* @returns {this} A new instance of the concrete class.
|
|
47
|
+
*/
|
|
48
|
+
create(x, y, z) {
|
|
49
|
+
return new this.constructor(x, y, z);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns a copy with a different X coordinate.
|
|
53
|
+
* @param {number} x - The X coordinate.
|
|
54
|
+
* @returns {this} A new vector; this one is left alone.
|
|
42
55
|
* @example
|
|
43
56
|
* ```typescript
|
|
44
|
-
*
|
|
57
|
+
* const moved = vector.withX(10);
|
|
45
58
|
* ```
|
|
46
59
|
*/
|
|
47
|
-
|
|
48
|
-
this.y
|
|
60
|
+
withX(x) {
|
|
61
|
+
return this.create(x, this.y, this.z);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns a copy with a different Y coordinate.
|
|
65
|
+
* @param {number} y - The Y coordinate.
|
|
66
|
+
* @returns {this} A new vector; this one is left alone.
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const moved = vector.withY(10);
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
withY(y) {
|
|
73
|
+
return this.create(this.x, y, this.z);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns a copy with a different Z coordinate.
|
|
77
|
+
* @param {number} z - The Z coordinate.
|
|
78
|
+
* @returns {this} A new vector; this one is left alone.
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* const moved = vector.withZ(10);
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
withZ(z) {
|
|
85
|
+
return this.create(this.x, this.y, z);
|
|
49
86
|
}
|
|
50
87
|
/**
|
|
51
88
|
* Get the y coordinate.
|
|
@@ -56,28 +93,65 @@ var Vector3 = class Vector3 extends Vector2 {
|
|
|
56
93
|
}
|
|
57
94
|
/**
|
|
58
95
|
* Returns a new Vector3 with each component rounded down to the nearest integer.
|
|
59
|
-
* @returns {
|
|
96
|
+
* @returns {this} A new vector with rounded down components.
|
|
60
97
|
*/
|
|
61
98
|
floor() {
|
|
62
|
-
return
|
|
99
|
+
return this.create(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z));
|
|
63
100
|
}
|
|
64
101
|
/**
|
|
65
102
|
* Returns a new Vector3 with each component truncated to the nearest integer.
|
|
66
|
-
* @returns {
|
|
103
|
+
* @returns {this} A new vector with truncated axis.
|
|
67
104
|
*/
|
|
68
105
|
trunc() {
|
|
69
|
-
return
|
|
106
|
+
return this.create(Math.trunc(this.x), Math.trunc(this.y), Math.trunc(this.z));
|
|
70
107
|
}
|
|
71
108
|
/**
|
|
72
109
|
* Compare an instance of `Vector3` with another.
|
|
73
|
-
*
|
|
110
|
+
*
|
|
111
|
+
* The parameter type matches the base declaration because ahead-of-time
|
|
112
|
+
* compilation only lowers overrides with identical signatures; a plain
|
|
113
|
+
* `Vector2` is never equal to a `Vector3`.
|
|
114
|
+
* @param {Vector2} vector - The vector to compare to.
|
|
74
115
|
* @returns {boolean} `true` if they're equal otherwise `false`.
|
|
75
116
|
*/
|
|
76
117
|
equals(vector) {
|
|
77
|
-
return
|
|
118
|
+
return vector instanceof Vector3 && this.x === vector.x && this.y === vector.y && this.z === vector.z;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The squared distance to another vector.
|
|
122
|
+
*
|
|
123
|
+
* Squared, and offered first, because almost every caller compares a distance against
|
|
124
|
+
* another distance - and a comparison of squares gives the same answer without the square
|
|
125
|
+
* root. Prefer this to {@link Vector3.distanceTo} wherever the number itself is not shown
|
|
126
|
+
* to anyone.
|
|
127
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
128
|
+
* @returns {number} The squared distance.
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* if (a.distanceSquaredTo(b) <= range * range) {
|
|
132
|
+
* // within range, with no square root taken
|
|
133
|
+
* }
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
distanceSquaredTo(vector) {
|
|
137
|
+
const dx = this.x - vector.x;
|
|
138
|
+
const dy = this.y - vector.y;
|
|
139
|
+
const dz = this.z - vector.z;
|
|
140
|
+
return dx * dx + dy * dy + dz * dz;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The distance to another vector.
|
|
144
|
+
* @param {Vector3} vector - The vector to measure to.
|
|
145
|
+
* @returns {number} The distance.
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const metres = player.getPosition().distanceTo(target.getPosition());
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
distanceTo(vector) {
|
|
152
|
+
return Math.sqrt(this.distanceSquaredTo(vector));
|
|
78
153
|
}
|
|
79
154
|
};
|
|
80
|
-
//#endregion
|
|
81
155
|
export { Vector3 };
|
|
82
156
|
|
|
83
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yMy5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvVmVjdG9yMy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IyIH0gZnJvbSAnLi9WZWN0b3IyJztcblxuLyoqXG4gKiAzRCBWZWN0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IzIGV4dGVuZHMgVmVjdG9yMiB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIFZlY3RvcjMgd2l0aCAwIG9uIGFsbCBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgWkVSTzogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGBWZWN0b3IzYCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHkgLSBUaGUgWSBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB6IC0gVGhlIFogY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCB2ZWN0b3IgPSBuZXcgVmVjdG9yMygxMCwgMjAsIDMwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHk6IG51bWJlcixcbiAgICAgICAgejogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHgsIHopO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHg6IMKnYiR7dGhpcy54LnRvRml4ZWQoMil9wqdyLCB5OiDCp2Ike3RoaXMueS50b0ZpeGVkKDIpfcKnciwgejogwqdiJHt0aGlzLnoudG9GaXhlZCgyKX3Cp3JgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgVmVjdG9yMyBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCB3aXRoIHgsIHksIGFuZCB6IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgY29udGFpbmluZyB4LCB5LCBhbmQgeiBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtWZWN0b3IzfSBBIG5ldyBWZWN0b3IzIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdCh7IHgsIHksIHogfTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH0pOiBWZWN0b3IzIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhbm90aGVyIGluc3RhbmNlIG9mIHdoYXRldmVyIGNsYXNzIHRoaXMgYWN0dWFsbHkgaXMsIGZyb20gcmF3IGNvb3JkaW5hdGVzLlxuICAgICAqXG4gICAgICogRXZlcnkgbWV0aG9kIHRoYXQgZGVyaXZlcyBhIG5ldyB2ZWN0b3IgZ29lcyB0aHJvdWdoIGhlcmUsIHNvIGEgc3ViY2xhc3Mga2VlcHMgaXRzIG93blxuICAgICAqIHR5cGUgaW5zdGVhZCBvZiBkZWNheWluZyB0byBhIHBsYWluIGBWZWN0b3IzYCAtIGFuZCBhIHN1YmNsYXNzIGNhcnJ5aW5nIGV4dHJhIHN0YXRlLFxuICAgICAqIHN1Y2ggYXMgYSBwb3NpdGlvbiBjYXJyeWluZyBpdHMgd29ybGQsIGdldHMgb25lIHBsYWNlIHRvIHJlYXR0YWNoIGl0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IC0gVGhlIFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSAtIFRoZSBZIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29uY3JldGUgY2xhc3MuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZSh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiBuZXcgKHRoaXMuY29uc3RydWN0b3IgYXMgbmV3ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB0aGlzKSh4LCB5LCB6KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSB3aXRoIGEgZGlmZmVyZW50IFggY29vcmRpbmF0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCAtIFRoZSBYIGNvb3JkaW5hdGUuXG4gICAgICogQHJldHVybnMge3RoaXN9IEEgbmV3IHZlY3RvcjsgdGhpcyBvbmUgaXMgbGVmdCBhbG9uZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBtb3ZlZCA9IHZlY3Rvci53aXRoWCgxMCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhYKHg6IG51bWJlcik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoeCwgdGhpcy55LCB0aGlzLnopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IHdpdGggYSBkaWZmZXJlbnQgWSBjb29yZGluYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IC0gVGhlIFkgY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gQSBuZXcgdmVjdG9yOyB0aGlzIG9uZSBpcyBsZWZ0IGFsb25lLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG1vdmVkID0gdmVjdG9yLndpdGhZKDEwKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFkoeTogbnVtYmVyKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh0aGlzLngsIHksIHRoaXMueik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgd2l0aCBhIGRpZmZlcmVudCBaIGNvb3JkaW5hdGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHogLSBUaGUgWiBjb29yZGluYXRlLlxuICAgICAqIEByZXR1cm5zIHt0aGlzfSBBIG5ldyB2ZWN0b3I7IHRoaXMgb25lIGlzIGxlZnQgYWxvbmUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbW92ZWQgPSB2ZWN0b3Iud2l0aFooMTApO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoWih6OiBudW1iZXIpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHRoaXMueCwgdGhpcy55LCB6KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHkgY29vcmRpbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgeSBjb29yZGluYXRlJ3MgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIGdldFkoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgd2l0aCBlYWNoIGNvbXBvbmVudCByb3VuZGVkIGRvd24gdG8gdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICAgKiBAcmV0dXJucyB7dGhpc30gQSBuZXcgdmVjdG9yIHdpdGggcm91bmRlZCBkb3duIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGZsb29yKCk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoTWF0aC5mbG9vcih0aGlzLngpLCBNYXRoLmZsb29yKHRoaXMueSksIE1hdGguZmxvb3IodGhpcy56KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggZWFjaCBjb21wb25lbnQgdHJ1bmNhdGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gICAgICogQHJldHVybnMge3RoaXN9IEEgbmV3IHZlY3RvciB3aXRoIHRydW5jYXRlZCBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB0cnVuYygpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKE1hdGgudHJ1bmModGhpcy54KSwgTWF0aC50cnVuYyh0aGlzLnkpLCBNYXRoLnRydW5jKHRoaXMueikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmUgYW4gaW5zdGFuY2Ugb2YgYFZlY3RvcjNgIHdpdGggYW5vdGhlci5cbiAgICAgKlxuICAgICAqIFRoZSBwYXJhbWV0ZXIgdHlwZSBtYXRjaGVzIHRoZSBiYXNlIGRlY2xhcmF0aW9uIGJlY2F1c2UgYWhlYWQtb2YtdGltZVxuICAgICAqIGNvbXBpbGF0aW9uIG9ubHkgbG93ZXJzIG92ZXJyaWRlcyB3aXRoIGlkZW50aWNhbCBzaWduYXR1cmVzOyBhIHBsYWluXG4gICAgICogYFZlY3RvcjJgIGlzIG5ldmVyIGVxdWFsIHRvIGEgYFZlY3RvcjNgLlxuICAgICAqIEBwYXJhbSB7VmVjdG9yMn0gdmVjdG9yIC0gVGhlIHZlY3RvciB0byBjb21wYXJlIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhleSdyZSBlcXVhbCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZXF1YWxzKHZlY3RvcjogVmVjdG9yMik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmVjdG9yIGluc3RhbmNlb2YgVmVjdG9yMyAmJiB0aGlzLnggPT09IHZlY3Rvci54ICYmIHRoaXMueSA9PT0gdmVjdG9yLnkgJiYgdGhpcy56ID09PSB2ZWN0b3IuejtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3F1YXJlZCBkaXN0YW5jZSB0byBhbm90aGVyIHZlY3Rvci5cbiAgICAgKlxuICAgICAqIFNxdWFyZWQsIGFuZCBvZmZlcmVkIGZpcnN0LCBiZWNhdXNlIGFsbW9zdCBldmVyeSBjYWxsZXIgY29tcGFyZXMgYSBkaXN0YW5jZSBhZ2FpbnN0XG4gICAgICogYW5vdGhlciBkaXN0YW5jZSAtIGFuZCBhIGNvbXBhcmlzb24gb2Ygc3F1YXJlcyBnaXZlcyB0aGUgc2FtZSBhbnN3ZXIgd2l0aG91dCB0aGUgc3F1YXJlXG4gICAgICogcm9vdC4gUHJlZmVyIHRoaXMgdG8ge0BsaW5rIFZlY3RvcjMuZGlzdGFuY2VUb30gd2hlcmV2ZXIgdGhlIG51bWJlciBpdHNlbGYgaXMgbm90IHNob3duXG4gICAgICogdG8gYW55b25lLlxuICAgICAqIEBwYXJhbSB7VmVjdG9yM30gdmVjdG9yIC0gVGhlIHZlY3RvciB0byBtZWFzdXJlIHRvLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzcXVhcmVkIGRpc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGlmIChhLmRpc3RhbmNlU3F1YXJlZFRvKGIpIDw9IHJhbmdlICogcmFuZ2UpIHtcbiAgICAgKiAgICAgLy8gd2l0aGluIHJhbmdlLCB3aXRoIG5vIHNxdWFyZSByb290IHRha2VuXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkaXN0YW5jZVNxdWFyZWRUbyh2ZWN0b3I6IFZlY3RvcjMpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkeCA9IHRoaXMueCAtIHZlY3Rvci54O1xuICAgICAgICBjb25zdCBkeSA9IHRoaXMueSAtIHZlY3Rvci55O1xuICAgICAgICBjb25zdCBkeiA9IHRoaXMueiAtIHZlY3Rvci56O1xuICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHkgKyBkeiAqIGR6O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBkaXN0YW5jZSB0byBhbm90aGVyIHZlY3Rvci5cbiAgICAgKiBAcGFyYW0ge1ZlY3RvcjN9IHZlY3RvciAtIFRoZSB2ZWN0b3IgdG8gbWVhc3VyZSB0by5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZGlzdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbWV0cmVzID0gcGxheWVyLmdldFBvc2l0aW9uKCkuZGlzdGFuY2VUbyh0YXJnZXQuZ2V0UG9zaXRpb24oKSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGRpc3RhbmNlVG8odmVjdG9yOiBWZWN0b3IzKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3F1YXJlZFRvKHZlY3RvcikpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxJQUFhLFVBQWIsTUFBYSxnQkFBZ0IsUUFBUTtDQWtCVjs7OztDQWR2QixPQUF1QixPQUFnQixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUM7Ozs7Ozs7Ozs7O0NBWTFELFlBQ0ksR0FDQSxHQUNBLEdBQ0Y7RUFDRSxNQUFNLEdBQUcsQ0FBQztFQUhTLEtBQUEsSUFBQTtDQUl2QjtDQUVBLFdBQTBCO0VBQ3RCLE9BQU8sUUFBUSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUU7Q0FDL0Y7Ozs7OztDQU9BLE9BQWMsV0FBVyxFQUFFLEdBQUcsR0FBRyxLQUFtRDtFQUNoRixPQUFPLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQztDQUM5Qjs7Ozs7Ozs7Ozs7O0NBYUEsT0FBaUIsR0FBVyxHQUFXLEdBQWlCO0VBQ3BELE9BQU8sSUFBSyxLQUFLLFlBQThELEdBQUcsR0FBRyxDQUFDO0NBQzFGOzs7Ozs7Ozs7O0NBV0EsTUFBc0IsR0FBaUI7RUFDbkMsT0FBTyxLQUFLLE9BQU8sR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0NBQ3hDOzs7Ozs7Ozs7O0NBV0EsTUFBYSxHQUFpQjtFQUMxQixPQUFPLEtBQUssT0FBTyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUM7Q0FDeEM7Ozs7Ozs7Ozs7Q0FXQSxNQUFzQixHQUFpQjtFQUNuQyxPQUFPLEtBQUssT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUM7Q0FDeEM7Ozs7O0NBTUEsT0FBc0I7RUFDbEIsT0FBTyxLQUFLO0NBQ2hCOzs7OztDQU1BLFFBQThCO0VBQzFCLE9BQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQ2pGOzs7OztDQU1BLFFBQThCO0VBQzFCLE9BQU8sS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLLENBQUMsR0FBRyxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEtBQUssQ0FBQyxDQUFDO0NBQ2pGOzs7Ozs7Ozs7O0NBV0EsT0FBdUIsUUFBMEI7RUFDN0MsT0FBTyxrQkFBa0IsV0FBVyxLQUFLLE1BQU0sT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU87Q0FDeEc7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JBLGtCQUF5QixRQUF5QjtFQUM5QyxNQUFNLEtBQUssS0FBSyxJQUFJLE9BQU87RUFDM0IsTUFBTSxLQUFLLEtBQUssSUFBSSxPQUFPO0VBQzNCLE1BQU0sS0FBSyxLQUFLLElBQUksT0FBTztFQUMzQixPQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSztDQUNwQzs7Ozs7Ozs7OztDQVdBLFdBQWtCLFFBQXlCO0VBQ3ZDLE9BQU8sS0FBSyxLQUFLLEtBQUssa0JBQWtCLE1BQU0sQ0FBQztDQUNuRDtBQUNKIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsprismarine/math",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-unstable-20261024032303",
|
|
4
4
|
"description": "JSPrismarine math utilities",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"publishConfig": {
|
|
@@ -45,18 +45,18 @@
|
|
|
45
45
|
"@types/node": "24.13.6",
|
|
46
46
|
"glob": "13.0.6",
|
|
47
47
|
"rimraf": "6.1.3",
|
|
48
|
-
"typescript": "
|
|
48
|
+
"typescript": "7.0.2",
|
|
49
49
|
"vite": "8.3.0",
|
|
50
50
|
"vitest": "5.0.1"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@jsprismarine/
|
|
54
|
-
"@jsprismarine/
|
|
53
|
+
"@jsprismarine/binaryutils": "0.15.0-unstable-20261024032303",
|
|
54
|
+
"@jsprismarine/color-parser": "0.15.0-unstable-20261024032303"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"clean": "rimraf dist jsp *.tsbuildinfo vite.config.ts.timestamp-* .tsup .turbo",
|
|
58
|
-
"build": "vite build",
|
|
58
|
+
"build": "vite build && node ../../scripts/emit-dts.mts",
|
|
59
59
|
"build:watch": "vite build --watch",
|
|
60
|
-
"typecheck": "tsc
|
|
60
|
+
"typecheck": "tsc-ts --noEmit"
|
|
61
61
|
}
|
|
62
62
|
}
|