@crowdedkingdoms/crowdyjs 8.4.1 → 8.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/stores/chunks.d.ts +13 -1
- package/dist/stores/chunks.d.ts.map +1 -1
- package/dist/stores/chunks.js +5 -4
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
* or internal tooling, never an untrusted browser.
|
|
46
46
|
*/
|
|
47
47
|
/** The published package version. Mirrors `package.json`. */
|
|
48
|
-
export declare const VERSION = "8.4.
|
|
48
|
+
export declare const VERSION = "8.4.2";
|
|
49
49
|
export { LbCookieStore } from './lb-cookie-store.js';
|
|
50
50
|
export { CrowdyClient, createCrowdyClient, type CrowdyClientConfig, } from './crowdy-client.js';
|
|
51
51
|
export { BrowserLocalStorageTokenStore, SessionStore, type SessionListener, type TokenStore, } from './session.js';
|
package/dist/index.js
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
* or internal tooling, never an untrusted browser.
|
|
46
46
|
*/
|
|
47
47
|
/** The published package version. Mirrors `package.json`. */
|
|
48
|
-
export const VERSION = '8.4.
|
|
48
|
+
export const VERSION = '8.4.2';
|
|
49
49
|
export { LbCookieStore } from './lb-cookie-store.js';
|
|
50
50
|
export { CrowdyClient, createCrowdyClient, } from './crowdy-client.js';
|
|
51
51
|
export { BrowserLocalStorageTokenStore, SessionStore, } from './session.js';
|
package/dist/stores/chunks.d.ts
CHANGED
|
@@ -17,7 +17,10 @@ export type ChunkLoadState = 'loading' | 'loaded' | 'missing' | 'seeded' | 'fail
|
|
|
17
17
|
export interface CachedChunk<TVoxelState = string, TChunkState = string> {
|
|
18
18
|
readonly key: string;
|
|
19
19
|
readonly coord: ChunkCoord;
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Dense voxel-type grid (4096 bytes), null when unknown. Indexed
|
|
22
|
+
* `x + y*16 + z*256` by default; see {@link ChunkStoreConfig.voxelIndex}.
|
|
23
|
+
*/
|
|
21
24
|
voxels: Uint8Array | null;
|
|
22
25
|
/** Sparse typed per-voxel state by voxel index. */
|
|
23
26
|
voxelStates: Map<number, TVoxelState>;
|
|
@@ -68,6 +71,14 @@ export interface ChunkStoreConfig<TVoxelState = string, TChunkState = string> {
|
|
|
68
71
|
* session's local actor automatically; a random uuid otherwise.
|
|
69
72
|
*/
|
|
70
73
|
actorUuid?: string | (() => string | null);
|
|
74
|
+
/**
|
|
75
|
+
* Within-chunk (x,y,z in 0-15) → dense-grid byte offset. Defaults to the
|
|
76
|
+
* platform-documented layout `x + y*16 + z*256`. Override for worlds whose
|
|
77
|
+
* existing dense blobs were written with a different convention (e.g.
|
|
78
|
+
* Blocks with Friends uses `y*256 + z*16 + x`) — the layout is opaque to
|
|
79
|
+
* the platform, so all clients of a world just have to agree.
|
|
80
|
+
*/
|
|
81
|
+
voxelIndex?: (x: number, y: number, z: number) => number;
|
|
71
82
|
/** Clock override for tests. Defaults to `Date.now`. */
|
|
72
83
|
now?: () => number;
|
|
73
84
|
}
|
|
@@ -113,6 +124,7 @@ export declare class ChunkStore<TVoxelState = string, TChunkState = string> {
|
|
|
113
124
|
private readonly hydrateStates;
|
|
114
125
|
private readonly now;
|
|
115
126
|
private readonly fallbackUuid;
|
|
127
|
+
private readonly voxelIndex;
|
|
116
128
|
private revisionValue;
|
|
117
129
|
private sequence;
|
|
118
130
|
constructor(ctx: WorldSessionContext, config?: ChunkStoreConfig<TVoxelState, TChunkState>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/stores/chunks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,wCAAwC;AACxC,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,CAAC;AAEb;;;GAGG;AACH,MAAM,WAAW,WAAW,CAAC,WAAW,GAAG,MAAM,EAAE,WAAW,GAAG,MAAM;IACrE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B
|
|
1
|
+
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../src/stores/chunks.ts"],"names":[],"mappings":"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"}
|
package/dist/stores/chunks.js
CHANGED
|
@@ -42,6 +42,7 @@ export class ChunkStore {
|
|
|
42
42
|
config.chunkStateCodec ?? rawCodec;
|
|
43
43
|
this.hydrateStates = config.hydrateVoxelStates ?? config.voxelStateCodec !== undefined;
|
|
44
44
|
this.now = config.now ?? Date.now;
|
|
45
|
+
this.voxelIndex = config.voxelIndex ?? voxelIndex;
|
|
45
46
|
// Realtime merge: live edits land in the cache as they replicate.
|
|
46
47
|
ctx.onDispose(ctx.on('voxelUpdate', (notification) => {
|
|
47
48
|
const coord = {
|
|
@@ -76,11 +77,11 @@ export class ChunkStore {
|
|
|
76
77
|
/** The dense voxel type at a within-chunk coordinate (0 when unknown). */
|
|
77
78
|
voxelTypeAt(coord, x, y, z) {
|
|
78
79
|
const chunk = this.chunks.get(chunkKey(coord));
|
|
79
|
-
return chunk?.voxels?.[voxelIndex(x, y, z)] ?? 0;
|
|
80
|
+
return chunk?.voxels?.[this.voxelIndex(x, y, z)] ?? 0;
|
|
80
81
|
}
|
|
81
82
|
/** The typed per-voxel state at a within-chunk coordinate, if any. */
|
|
82
83
|
voxelStateAt(coord, x, y, z) {
|
|
83
|
-
return this.chunks.get(chunkKey(coord))?.voxelStates.get(voxelIndex(x, y, z));
|
|
84
|
+
return this.chunks.get(chunkKey(coord))?.voxelStates.get(this.voxelIndex(x, y, z));
|
|
84
85
|
}
|
|
85
86
|
/** Subscribe to per-chunk changes (loads, merges, edits). @returns off. */
|
|
86
87
|
onChunkChanged(listener) {
|
|
@@ -162,7 +163,7 @@ export class ChunkStore {
|
|
|
162
163
|
chunk.voxels = decodeBase64(full.voxels);
|
|
163
164
|
chunk.chunkState = this.decodeChunkState(full.chunkState ?? null);
|
|
164
165
|
for (const entry of full.voxelStates ?? []) {
|
|
165
|
-
const index = voxelIndex(entry.voxelCoord.x, entry.voxelCoord.y, entry.voxelCoord.z);
|
|
166
|
+
const index = this.voxelIndex(entry.voxelCoord.x, entry.voxelCoord.y, entry.voxelCoord.z);
|
|
166
167
|
if (chunk.voxels)
|
|
167
168
|
chunk.voxels[index] = entry.voxelType;
|
|
168
169
|
if (entry.state) {
|
|
@@ -302,7 +303,7 @@ export class ChunkStore {
|
|
|
302
303
|
applyVoxel(chunk, x, y, z, voxelType, encodedState, decodedState) {
|
|
303
304
|
if (!chunk.voxels)
|
|
304
305
|
chunk.voxels = new Uint8Array(CHUNK_VOLUME);
|
|
305
|
-
const index = voxelIndex(x, y, z);
|
|
306
|
+
const index = this.voxelIndex(x, y, z);
|
|
306
307
|
chunk.voxels[index] = voxelType;
|
|
307
308
|
let state = decodedState;
|
|
308
309
|
if (state === undefined && encodedState) {
|