@crowdedkingdoms/crowdyjs 17.12.0-dev.1 → 17.14.0-dev.1
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/MIGRATION.md +127 -0
- package/README.md +99 -4
- package/dist/crowdy-dsh/bridge.d.ts.map +1 -1
- package/dist/crowdy-dsh/bridge.js +2 -0
- package/dist/crowdy-studio/controller.d.ts +64 -8
- package/dist/crowdy-studio/controller.d.ts.map +1 -1
- package/dist/crowdy-studio/controller.js +345 -46
- package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
- package/dist/crowdy-studio/dom-shell.js +16 -9
- package/dist/crowdy-studio/embed/hud-layer.d.ts +2 -1
- package/dist/crowdy-studio/embed/hud-layer.d.ts.map +1 -1
- package/dist/crowdy-studio/embed/panel.d.ts +9 -6
- package/dist/crowdy-studio/embed/panel.d.ts.map +1 -1
- package/dist/crowdy-studio/embed/panel.js +4 -2
- package/dist/crowdy-studio/index.d.ts +2 -2
- package/dist/crowdy-studio/index.d.ts.map +1 -1
- package/dist/crowdy-studio/models.d.ts +1 -1
- package/dist/crowdy-studio/starter-projects.d.ts +22 -0
- package/dist/crowdy-studio/starter-projects.d.ts.map +1 -1
- package/dist/crowdy-studio/starter-projects.js +129 -5
- package/dist/domains/exec.d.ts +222 -20
- package/dist/domains/exec.d.ts.map +1 -1
- package/dist/domains/exec.js +215 -21
- package/dist/domains/marketplace.d.ts +15 -3
- package/dist/domains/marketplace.d.ts.map +1 -1
- package/dist/domains/marketplace.js +17 -3
- package/dist/errors.d.ts +3 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/generated/graphql.d.ts +422 -0
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/generated/graphql.js +23 -11
- package/dist/grid-mods/exec-client-halves.d.ts +140 -0
- package/dist/grid-mods/exec-client-halves.d.ts.map +1 -0
- package/dist/grid-mods/exec-client-halves.js +341 -0
- package/dist/grid-mods/grid-host-calls.d.ts +3 -1
- package/dist/grid-mods/grid-host-calls.d.ts.map +1 -1
- package/dist/grid-mods/grid-host-calls.js +3 -1
- package/dist/grid-mods/index.d.ts +1 -0
- package/dist/grid-mods/index.d.ts.map +1 -1
- package/dist/grid-mods/index.js +1 -0
- package/dist/grid-mods/mod-runtime.d.ts +10 -2
- package/dist/grid-mods/mod-runtime.d.ts.map +1 -1
- package/dist/grid-mods/mod-runtime.js +2 -0
- package/dist/grid-scope.d.ts +1 -0
- package/dist/grid-scope.d.ts.map +1 -1
- package/dist/grid-scope.js +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/kit/npcs.d.ts.map +1 -1
- package/dist/kit/social.d.ts.map +1 -1
- package/dist/live-coding/rust-analysis.js +13 -1
- package/dist/player-runtime/glue-runtime.d.ts +19 -6
- package/dist/player-runtime/glue-runtime.d.ts.map +1 -1
- package/dist/player-runtime/glue-runtime.js +40 -16
- package/dist/player-runtime/player-code-broker.d.ts +29 -0
- package/dist/player-runtime/player-code-broker.d.ts.map +1 -1
- package/dist/player-runtime/player-code-broker.js +41 -8
- package/dist/player-runtime/player-glue-worker.d.ts +2 -1
- package/dist/player-runtime/player-glue-worker.d.ts.map +1 -1
- package/dist/player-runtime/player-glue-worker.js +3 -1
- package/dist/stores/actors.d.ts +12 -2
- package/dist/stores/actors.d.ts.map +1 -1
- package/dist/stores/actors.js +43 -18
- package/dist/stores/chunks.d.ts +12 -0
- package/dist/stores/chunks.d.ts.map +1 -1
- package/dist/stores/chunks.js +112 -39
- package/dist/stores/durable.d.ts.map +1 -1
- package/dist/stores/durable.js +2 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type MountCrowdyStudioDshOptions, type MountCrowdyStudioOptions } from '../mount.js';
|
|
2
2
|
import type { CrowdyStudioDshPane } from '../../crowdy-dsh/pane.js';
|
|
3
3
|
import type { CrowdyStudioDshHost } from '../../crowdy-dsh/bridge.js';
|
|
4
|
-
import type { CrowdyStudioController, CrowdyStudioMods, CrowdyStudioPlayerCompute, CrowdyStudioPlayerWallet } from '../controller.js';
|
|
4
|
+
import type { CrowdyStudioController, CrowdyStudioMods, CrowdyStudioPlayerCompute, CrowdyStudioPlayerWallet, CrowdyStudioServerEngine } from '../controller.js';
|
|
5
5
|
import type { CrowdyStudioProjectProvider } from '../models.js';
|
|
6
6
|
import type { CrowdyStudioGitHubTransport } from '../github/transport.js';
|
|
7
7
|
import type { PlayerHostAdapterV1 } from '../../player-host/index.js';
|
|
@@ -19,7 +19,7 @@ export interface CrowdyStudioEmbedServices {
|
|
|
19
19
|
playerWallet?: CrowdyStudioPlayerWallet;
|
|
20
20
|
/** GitHub repository loop; omission hides the card. `CrowdyClient` provides it. */
|
|
21
21
|
crowdyStudioGitHub?: CrowdyStudioGitHubTransport;
|
|
22
|
-
/** ck-exec, for
|
|
22
|
+
/** ck-exec, the default engine for both targets when present. `CrowdyClient` provides it. */
|
|
23
23
|
exec?: CrowdyStudioMods;
|
|
24
24
|
}
|
|
25
25
|
export interface CrowdyStudioEmbedTargetPermission {
|
|
@@ -70,11 +70,14 @@ export interface CrowdyStudioEmbedOptions {
|
|
|
70
70
|
*/
|
|
71
71
|
github?: CrowdyStudioGitHubTransport;
|
|
72
72
|
/**
|
|
73
|
-
* What runs the
|
|
74
|
-
*
|
|
75
|
-
*
|
|
73
|
+
* What runs the project: a ck-exec mod on the grid, built from the project's `ckx-sdk`
|
|
74
|
+
* crate, with the CLIENT target as its `crowdy-client-sdk` CLIENT half (`client.exec`), or
|
|
75
|
+
* legacy player compute for both targets, which the platform is switching off. Defaults to
|
|
76
|
+
* `'ck-exec'` when the client has `exec` (every `CrowdyClient` does), else
|
|
77
|
+
* `'player-compute'`. Pass `'player-compute'` to stay on the legacy engine until 18.0
|
|
78
|
+
* removes it.
|
|
76
79
|
*/
|
|
77
|
-
serverEngine?:
|
|
80
|
+
serverEngine?: CrowdyStudioServerEngine;
|
|
78
81
|
/**
|
|
79
82
|
* Suppress gameplay input and return a restoration callback. Used only by
|
|
80
83
|
* the narrow-screen modal; the desktop dock remains non-modal.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/crowdy-studio/embed/panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC9B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,WAAW,CAAC;AAEnB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAO1D,MAAM,MAAM,4BAA4B,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEnE;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,2BAA2B,CAAC;IAC1C,aAAa,EAAE,yBAAyB,CAAC;IACzC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACxC,mFAAmF;IACnF,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;IACjD,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../../src/crowdy-studio/embed/panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -359,13 +359,15 @@ export class CrowdyStudioEmbed {
|
|
|
359
359
|
});
|
|
360
360
|
}
|
|
361
361
|
: undefined);
|
|
362
|
-
|
|
362
|
+
const serverEngine = this.options.serverEngine ?? (client.exec ? 'ck-exec' : 'player-compute');
|
|
363
|
+
if (serverEngine === 'ck-exec' && !client.exec) {
|
|
363
364
|
throw new Error("serverEngine 'ck-exec' needs the client's exec domain");
|
|
364
365
|
}
|
|
365
366
|
const handle = await mountCrowdyStudio(element, {
|
|
366
367
|
projectProvider: client.crowdyStudio,
|
|
367
368
|
playerCompute: client.playerCompute,
|
|
368
|
-
|
|
369
|
+
serverEngine,
|
|
370
|
+
...(serverEngine === 'ck-exec' ? { mods: client.exec } : {}),
|
|
369
371
|
...((this.options.github ?? client.crowdyStudioGitHub)
|
|
370
372
|
? { github: this.options.github ?? client.crowdyStudioGitHub }
|
|
371
373
|
: {}),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { CrowdyStudioController, type CrowdyStudioControllerOptions, type CrowdyStudioBroker, type CrowdyStudioAgentWorkContext, type CrowdyStudioDeploymentPlan, type CrowdyStudioDeployResult, type CrowdyStudioInvokeResult, type CrowdyStudioPhase, type CrowdyStudioPolledSurface, type CrowdyStudioRun, type CrowdyStudioRuntimeStatus, type CrowdyStudioRuntimeSync, type CrowdyStudioRuntimeSyncState, type CrowdyStudioMods, type CrowdyStudioPlayerCompute, type CrowdyStudioPlayerWallet, type CrowdyStudioState, type CrowdyStudioStopResult, type CrowdyStudioUsageSnapshot, type CrowdyStudioWalletSnapshot, } from './controller.js';
|
|
1
|
+
export { CrowdyStudioController, type CrowdyStudioControllerOptions, type CrowdyStudioBroker, type CrowdyStudioAgentWorkContext, type CrowdyStudioDeploymentPlan, type CrowdyStudioDeployResult, type CrowdyStudioInvokeResult, type CrowdyStudioPhase, type CrowdyStudioPolledSurface, type CrowdyStudioRun, type CrowdyStudioRuntimeStatus, type CrowdyStudioRuntimeSync, type CrowdyStudioRuntimeSyncState, type CrowdyStudioLogLevel, type CrowdyStudioMods, type CrowdyStudioPlayerCompute, type CrowdyStudioPlayerWallet, type CrowdyStudioServerEngine, type CrowdyStudioState, type CrowdyStudioStopResult, type CrowdyStudioUsageSnapshot, type CrowdyStudioWalletSnapshot, } from './controller.js';
|
|
2
2
|
export { mountCrowdyStudio, type CrowdyStudioHandle, type MountCrowdyStudioDshOptions, type MountCrowdyStudioOptions, } from './mount.js';
|
|
3
3
|
export { CrowdyStudioOfflineError, CrowdyStudioRevisionConflictError, cloneCrowdyStudioProject, crowdyStudioFileKey, crowdyStudioFileUri, normalizeCrowdyStudioPath, projectTargets, type CreateCrowdyStudioProjectInput, type ImportCrowdyStudioReferenceFileInput, type CrowdyStudioAtomicFileChange, type CrowdyStudioAtomicPatchInput, type CrowdyStudioAtomicPatchResult, type CrowdyStudioCheckpointFile, type CrowdyStudioCheckpointMetadata, type CrowdyStudioCheckpointRestoreInput, type CrowdyStudioCheckpointRestoreResult, type CrowdyStudioFileRef, type CrowdyStudioPairingPreference, type CrowdyStudioProject, type CrowdyStudioProjectFile, type CrowdyStudioProjectKind, type CrowdyStudioProjectMetadata, type CrowdyStudioProjectProvider, type CrowdyStudioProjectRevision, type CrowdyStudioProjectScope, type CrowdyStudioProjectSummary, type CrowdyStudioReferenceFile, type CrowdyStudioSaveState, type CrowdyStudioSynchronizationProvider, type CrowdyStudioProjectSynchronization, type CrowdyStudioPatchOperation, type CrowdyStudioTarget, type SaveCrowdyStudioLibraryFileInput, type SaveCrowdyStudioProjectInput, } from './models.js';
|
|
4
|
-
export { createCrowdyStudioStarterProject, type CrowdyStudioNewProjectOptions, } from './starter-projects.js';
|
|
4
|
+
export { createCrowdyStudioStarterProject, type CrowdyStudioModStarter, type CrowdyStudioNewProjectOptions, } from './starter-projects.js';
|
|
5
5
|
export { DEFAULT_CLIENT_TICK_INTERVAL_MS, MAX_CLIENT_TICK_INTERVAL_MS, MIN_CLIENT_TICK_INTERVAL_MS, parseClientTickIntervalMs, } from './client-tick-interval.js';
|
|
6
6
|
export { parseRustcDiagnostics, type CrowdyStudioDiagnostic, type CrowdyStudioDiagnosticSeverity, type CrowdyStudioDiagnosticSource, } from './diagnostics.js';
|
|
7
7
|
export { MODEL_LINT_QUERY, modelLintDiagnostics, modelLintSubjectPath, type CrowdyModelLintFinding, type CrowdyModelLintResult, } from './model-lint.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export type CrowdyStudioProjectKind = 'SERVER' | 'CLIENT' | 'FULL_STACK';
|
|
|
6
6
|
* Whether a full-stack server should advertise its client companion.
|
|
7
7
|
* `OPTIONAL` records author intent without creating a runtime requirement;
|
|
8
8
|
* `REQUIRED` is applied with `playerCompute.setRequires` after both targets
|
|
9
|
-
* compile successfully.
|
|
9
|
+
* compile successfully. A ck-exec mod has no pairing: players call it by name.
|
|
10
10
|
*/
|
|
11
11
|
export type CrowdyStudioPairingPreference = 'NONE' | 'OPTIONAL' | 'REQUIRED';
|
|
12
12
|
/** A source file in one project target. Paths are relative to that target. */
|
|
@@ -1,10 +1,32 @@
|
|
|
1
|
+
import type { CrowdyStudioServerEngine } from './controller.js';
|
|
1
2
|
import { type CreateCrowdyStudioProjectInput, type CrowdyStudioProjectKind } from './models.js';
|
|
3
|
+
/** ck-exec's mod starter crate (`client.exec.modStarter(appId)`). */
|
|
4
|
+
export interface CrowdyStudioModStarter {
|
|
5
|
+
/** `Cargo.toml` and `src/**` of a `ckx-sdk` crate. */
|
|
6
|
+
files: readonly {
|
|
7
|
+
path: string;
|
|
8
|
+
content: string;
|
|
9
|
+
}[];
|
|
10
|
+
}
|
|
2
11
|
export interface CrowdyStudioNewProjectOptions {
|
|
3
12
|
appId: string;
|
|
4
13
|
gridId: string;
|
|
5
14
|
name: string;
|
|
6
15
|
kind: CrowdyStudioProjectKind;
|
|
7
16
|
description?: string;
|
|
17
|
+
/**
|
|
18
|
+
* The SERVER target starts from this crate, its package named for the project, instead of
|
|
19
|
+
* the legacy compute SDK crate, and the server module name fits a mod's. A mod has no
|
|
20
|
+
* client pairing, so a full-stack project records `NONE`.
|
|
21
|
+
*/
|
|
22
|
+
modStarter?: CrowdyStudioModStarter;
|
|
23
|
+
/**
|
|
24
|
+
* `'ck-exec'`: the project is a ck-exec mod. Its SERVER target starts from `modStarter`
|
|
25
|
+
* (required with one), its CLIENT target from a `crowdy-client-sdk` crate, the mod's CLIENT
|
|
26
|
+
* half, and both module names fit a mod's. Default `'player-compute'`, where the CLIENT target
|
|
27
|
+
* is a legacy compute SDK crate.
|
|
28
|
+
*/
|
|
29
|
+
engine?: CrowdyStudioServerEngine;
|
|
8
30
|
}
|
|
9
31
|
/** Create a compile-oriented starter without introducing a raw JSON source map. */
|
|
10
32
|
export declare function createCrowdyStudioStarterProject(options: CrowdyStudioNewProjectOptions): CreateCrowdyStudioProjectInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starter-projects.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/starter-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,uBAAuB,EAG7B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"starter-projects.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/starter-projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAEL,KAAK,8BAA8B,EAEnC,KAAK,uBAAuB,EAG7B,MAAM,aAAa,CAAC;AASrB,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,sDAAsD;IACtD,KAAK,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,wBAAwB,CAAC;CACnC;AAED,mFAAmF;AACnF,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,6BAA6B,GACrC,8BAA8B,CAqChC"}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { projectTargets, } from './models.js';
|
|
2
2
|
const SDK_VERSION = '0.1.8';
|
|
3
|
+
/** crowdy-client-sdk, what a ck-exec mod's CLIENT half builds on; the build points it at the platform's copy. */
|
|
4
|
+
const CLIENT_SDK_VERSION = '0.1.0';
|
|
5
|
+
/** A mod's name is at most 48 characters, and the SERVER module name is `<base>-server`. */
|
|
6
|
+
const MOD_BASE_MAX = 48 - '-server'.length;
|
|
3
7
|
/** Create a compile-oriented starter without introducing a raw JSON source map. */
|
|
4
8
|
export function createCrowdyStudioStarterProject(options) {
|
|
5
|
-
const
|
|
9
|
+
const mod = options.modStarter;
|
|
10
|
+
const exec = options.engine === 'ck-exec';
|
|
6
11
|
const targets = projectTargets(options.kind);
|
|
12
|
+
if (exec && targets.includes('SERVER') && !mod) {
|
|
13
|
+
throw new Error('A ck-exec SERVER target starts from the mod starter (client.exec.modStarter)');
|
|
14
|
+
}
|
|
15
|
+
const base = mod || exec ? modModuleBase(options.name) : moduleName(options.name);
|
|
7
16
|
const metadata = {
|
|
8
17
|
name: options.name.trim() || 'Untitled mod',
|
|
9
18
|
...(options.description?.trim()
|
|
@@ -15,18 +24,133 @@ export function createCrowdyStudioStarterProject(options) {
|
|
|
15
24
|
...(targets.includes('CLIENT')
|
|
16
25
|
? { clientModuleName: `${base}-client` }
|
|
17
26
|
: {}),
|
|
18
|
-
pairingPreference: options.kind === 'FULL_STACK' ? 'REQUIRED' : 'NONE',
|
|
27
|
+
pairingPreference: options.kind === 'FULL_STACK' && !mod && !exec ? 'REQUIRED' : 'NONE',
|
|
19
28
|
};
|
|
20
29
|
return {
|
|
21
30
|
appId: options.appId,
|
|
22
31
|
gridId: options.gridId,
|
|
23
32
|
kind: options.kind,
|
|
24
33
|
metadata,
|
|
25
|
-
files: targets.flatMap((target) =>
|
|
26
|
-
?
|
|
27
|
-
|
|
34
|
+
files: targets.flatMap((target) => target === 'SERVER'
|
|
35
|
+
? mod
|
|
36
|
+
? modStarterFiles(mod, metadata.serverModuleName)
|
|
37
|
+
: starterFiles(target, metadata.serverModuleName)
|
|
38
|
+
: exec
|
|
39
|
+
? clientHalfStarterFiles(metadata.clientModuleName)
|
|
40
|
+
: starterFiles(target, metadata.clientModuleName)),
|
|
28
41
|
};
|
|
29
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* A ck-exec mod's CLIENT half: one `crowdy-client-sdk` crate within the build's rules (only
|
|
45
|
+
* `[package]`, `[lib]` as a cdylib, the SDK and serde dependencies, and
|
|
46
|
+
* `[package.metadata.crowdy] tick_interval_ms`).
|
|
47
|
+
*/
|
|
48
|
+
function clientHalfStarterFiles(name) {
|
|
49
|
+
return [
|
|
50
|
+
{
|
|
51
|
+
target: 'CLIENT',
|
|
52
|
+
path: 'Cargo.toml',
|
|
53
|
+
content: `[package]
|
|
54
|
+
name = "${name}"
|
|
55
|
+
version = "0.1.0"
|
|
56
|
+
edition = "2021"
|
|
57
|
+
|
|
58
|
+
[lib]
|
|
59
|
+
crate-type = ["cdylib"]
|
|
60
|
+
|
|
61
|
+
# How often visitors' browsers call tick (clamped 16–1000 ms).
|
|
62
|
+
# 1000 = HUD/text. 50 = physics minigames (pool). 16 = shooters, if a tick stays cheap.
|
|
63
|
+
[package.metadata.crowdy]
|
|
64
|
+
tick_interval_ms = 1000
|
|
65
|
+
|
|
66
|
+
[dependencies]
|
|
67
|
+
crowdy-client-sdk = "${CLIENT_SDK_VERSION}"
|
|
68
|
+
serde_json = "1"
|
|
69
|
+
`,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
target: 'CLIENT',
|
|
73
|
+
path: 'src/lib.rs',
|
|
74
|
+
content: `use crowdy_client_sdk as crowdy;
|
|
75
|
+
|
|
76
|
+
fn init() {
|
|
77
|
+
// Runs once in each visitor's browser, after they consent to this CLIENT half
|
|
78
|
+
// (or trust you) and while they stand in this grid.
|
|
79
|
+
crowdy::log(1, "ready");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
fn tick(_dt_ms: u32) {
|
|
83
|
+
// Every tick_interval_ms (Cargo.toml). The state blob lasts as long as the page's worker.
|
|
84
|
+
let ticks = u32::from_le_bytes(crowdy::state_get().try_into().unwrap_or([0; 4])).wrapping_add(1);
|
|
85
|
+
crowdy::state_set(&ticks.to_le_bytes());
|
|
86
|
+
// Host calls cross the page's broker as the visiting player, inside this grid: the HUD and
|
|
87
|
+
// overlay, chunk and actor reads, voxel writes, spatial and channel sends, grid events.
|
|
88
|
+
// Type "crowdy::api::" for the rest. The page's DOM and tokens are never reachable.
|
|
89
|
+
let _ = crowdy::api::hud_set(serde_json::json!({ "text": format!("Ticks here: {ticks}") }));
|
|
90
|
+
//
|
|
91
|
+
// Mouse (holodeck canvas only; Studio chrome is omitted). Drain every tick:
|
|
92
|
+
// let data = crowdy::api::pointer_clicks().unwrap_or(serde_json::json!({}));
|
|
93
|
+
// data["clicks"] = [{ "t": "down"|"up", "button": 0, "atMs", "heldMs", "nx", "ny" }]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
fn invoke(payload: &[u8]) -> Vec<u8> {
|
|
97
|
+
payload.to_vec()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
fn event(_payload: &[u8]) {
|
|
101
|
+
// Grid events from the other CLIENT halves on this page (crowdy::api::emit_event).
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
crowdy::register_module!(init: init, tick: tick, invoke: invoke, event: event);
|
|
105
|
+
`,
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
function modStarterFiles(starter, name) {
|
|
110
|
+
const paths = new Set(starter.files.map((file) => file.path));
|
|
111
|
+
if (!paths.has('Cargo.toml') || !paths.has('src/lib.rs')) {
|
|
112
|
+
throw new Error('The mod starter has no Cargo.toml or src/lib.rs');
|
|
113
|
+
}
|
|
114
|
+
return starter.files.map((file) => ({
|
|
115
|
+
target: 'SERVER',
|
|
116
|
+
path: file.path,
|
|
117
|
+
content: file.path === 'Cargo.toml'
|
|
118
|
+
? renamePackage(file.content, name)
|
|
119
|
+
: file.content,
|
|
120
|
+
}));
|
|
121
|
+
}
|
|
122
|
+
/** The first `name` in `[package]`, set to `name`; every other line as it was. */
|
|
123
|
+
function renamePackage(manifest, name) {
|
|
124
|
+
let section = '';
|
|
125
|
+
let renamed = false;
|
|
126
|
+
return manifest
|
|
127
|
+
.split('\n')
|
|
128
|
+
.map((line) => {
|
|
129
|
+
const header = /^\s*\[([^\]]+)\]\s*$/.exec(line);
|
|
130
|
+
if (header) {
|
|
131
|
+
section = header[1].trim();
|
|
132
|
+
return line;
|
|
133
|
+
}
|
|
134
|
+
if (section !== 'package' || renamed || !/^\s*name\s*=/.test(line)) {
|
|
135
|
+
return line;
|
|
136
|
+
}
|
|
137
|
+
renamed = true;
|
|
138
|
+
return `name = "${name}"`;
|
|
139
|
+
})
|
|
140
|
+
.join('\n');
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* A mod module base: short enough for `<base>-server` and `<base>-client` to be mod names, and
|
|
144
|
+
* starting with a letter, as a build's crate names must.
|
|
145
|
+
*/
|
|
146
|
+
function modModuleBase(value) {
|
|
147
|
+
const slug = slugModuleName(value);
|
|
148
|
+
if (!slug)
|
|
149
|
+
return 'player-mod';
|
|
150
|
+
const cut = (/^[a-z]/u.test(slug) ? slug : `mod-${slug}`).slice(0, MOD_BASE_MAX);
|
|
151
|
+
// The slug has no runs of dashes, so the cut leaves at most one at the end.
|
|
152
|
+
return cut.endsWith('-') ? cut.slice(0, -1) : cut;
|
|
153
|
+
}
|
|
30
154
|
function starterFiles(target, name) {
|
|
31
155
|
return [
|
|
32
156
|
{
|