@multiplekex/shallot 0.1.0 → 0.1.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/package.json +8 -23
- package/src/standard/compute/index.ts +36 -0
- package/src/standard/render/camera.ts +1 -1
- package/dist/core/builder.d.ts +0 -25
- package/dist/core/builder.d.ts.map +0 -1
- package/dist/core/builder.js +0 -88
- package/dist/core/builder.js.map +0 -1
- package/dist/core/component.d.ts +0 -29
- package/dist/core/component.d.ts.map +0 -1
- package/dist/core/component.js +0 -36
- package/dist/core/component.js.map +0 -1
- package/dist/core/index.d.ts +0 -13
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/math.d.ts +0 -32
- package/dist/core/math.d.ts.map +0 -1
- package/dist/core/math.js +0 -39
- package/dist/core/math.js.map +0 -1
- package/dist/core/relation.d.ts +0 -16
- package/dist/core/relation.d.ts.map +0 -1
- package/dist/core/relation.js +0 -32
- package/dist/core/relation.js.map +0 -1
- package/dist/core/resource.d.ts +0 -9
- package/dist/core/resource.d.ts.map +0 -1
- package/dist/core/resource.js +0 -12
- package/dist/core/resource.js.map +0 -1
- package/dist/core/runtime.d.ts +0 -13
- package/dist/core/runtime.d.ts.map +0 -1
- package/dist/core/runtime.js +0 -118
- package/dist/core/runtime.js.map +0 -1
- package/dist/core/scheduler.d.ts +0 -47
- package/dist/core/scheduler.d.ts.map +0 -1
- package/dist/core/scheduler.js +0 -138
- package/dist/core/scheduler.js.map +0 -1
- package/dist/core/state.d.ts +0 -62
- package/dist/core/state.d.ts.map +0 -1
- package/dist/core/state.js +0 -185
- package/dist/core/state.js.map +0 -1
- package/dist/core/strings.d.ts +0 -3
- package/dist/core/strings.d.ts.map +0 -1
- package/dist/core/strings.js +0 -11
- package/dist/core/strings.js.map +0 -1
- package/dist/core/types.d.ts +0 -33
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/xml.d.ts +0 -42
- package/dist/core/xml.d.ts.map +0 -1
- package/dist/core/xml.js +0 -349
- package/dist/core/xml.js.map +0 -1
- package/dist/extras/arrows/index.d.ts +0 -33
- package/dist/extras/arrows/index.d.ts.map +0 -1
- package/dist/extras/arrows/index.js +0 -288
- package/dist/extras/arrows/index.js.map +0 -1
- package/dist/extras/index.d.ts +0 -5
- package/dist/extras/index.d.ts.map +0 -1
- package/dist/extras/index.js +0 -31
- package/dist/extras/index.js.map +0 -1
- package/dist/extras/lines/index.d.ts +0 -36
- package/dist/extras/lines/index.d.ts.map +0 -1
- package/dist/extras/lines/index.js +0 -288
- package/dist/extras/lines/index.js.map +0 -1
- package/dist/extras/orbit/index.d.ts +0 -20
- package/dist/extras/orbit/index.d.ts.map +0 -1
- package/dist/extras/orbit/index.js +0 -93
- package/dist/extras/orbit/index.js.map +0 -1
- package/dist/extras/text/index.d.ts +0 -64
- package/dist/extras/text/index.d.ts.map +0 -1
- package/dist/extras/text/index.js +0 -423
- package/dist/extras/text/index.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -187
- package/dist/index.js.map +0 -1
- package/dist/rust/transforms/pkg/shallot_transforms.js +0 -107
- package/dist/rust/transforms/pkg/shallot_transforms.js.map +0 -1
- package/dist/standard/compute/graph.d.ts +0 -37
- package/dist/standard/compute/graph.d.ts.map +0 -1
- package/dist/standard/compute/graph.js +0 -85
- package/dist/standard/compute/graph.js.map +0 -1
- package/dist/standard/compute/index.d.ts +0 -21
- package/dist/standard/compute/index.d.ts.map +0 -1
- package/dist/standard/compute/index.js +0 -81
- package/dist/standard/compute/index.js.map +0 -1
- package/dist/standard/defaults.d.ts +0 -3
- package/dist/standard/defaults.d.ts.map +0 -1
- package/dist/standard/defaults.js +0 -18
- package/dist/standard/defaults.js.map +0 -1
- package/dist/standard/index.d.ts +0 -8
- package/dist/standard/index.d.ts.map +0 -1
- package/dist/standard/input/index.d.ts +0 -5
- package/dist/standard/input/index.d.ts.map +0 -1
- package/dist/standard/input/index.js +0 -70
- package/dist/standard/input/index.js.map +0 -1
- package/dist/standard/loading/index.d.ts +0 -7
- package/dist/standard/loading/index.d.ts.map +0 -1
- package/dist/standard/loading/index.js +0 -91
- package/dist/standard/loading/index.js.map +0 -1
- package/dist/standard/render/camera.d.ts +0 -36
- package/dist/standard/render/camera.d.ts.map +0 -1
- package/dist/standard/render/camera.js +0 -71
- package/dist/standard/render/camera.js.map +0 -1
- package/dist/standard/render/forward.d.ts +0 -30
- package/dist/standard/render/forward.d.ts.map +0 -1
- package/dist/standard/render/forward.js +0 -158
- package/dist/standard/render/forward.js.map +0 -1
- package/dist/standard/render/index.d.ts +0 -22
- package/dist/standard/render/index.d.ts.map +0 -1
- package/dist/standard/render/index.js +0 -153
- package/dist/standard/render/index.js.map +0 -1
- package/dist/standard/render/light.d.ts +0 -25
- package/dist/standard/render/light.d.ts.map +0 -1
- package/dist/standard/render/light.js +0 -48
- package/dist/standard/render/light.js.map +0 -1
- package/dist/standard/render/mesh/box.d.ts +0 -3
- package/dist/standard/render/mesh/box.d.ts.map +0 -1
- package/dist/standard/render/mesh/box.js +0 -190
- package/dist/standard/render/mesh/box.js.map +0 -1
- package/dist/standard/render/mesh/index.d.ts +0 -52
- package/dist/standard/render/mesh/index.d.ts.map +0 -1
- package/dist/standard/render/mesh/index.js +0 -158
- package/dist/standard/render/mesh/index.js.map +0 -1
- package/dist/standard/render/mesh/plane.d.ts +0 -3
- package/dist/standard/render/mesh/plane.d.ts.map +0 -1
- package/dist/standard/render/mesh/plane.js +0 -33
- package/dist/standard/render/mesh/plane.js.map +0 -1
- package/dist/standard/render/mesh/sphere.d.ts +0 -3
- package/dist/standard/render/mesh/sphere.d.ts.map +0 -1
- package/dist/standard/render/mesh/sphere.js +0 -25
- package/dist/standard/render/mesh/sphere.js.map +0 -1
- package/dist/standard/render/postprocess.d.ts +0 -11
- package/dist/standard/render/postprocess.d.ts.map +0 -1
- package/dist/standard/render/postprocess.js +0 -190
- package/dist/standard/render/postprocess.js.map +0 -1
- package/dist/standard/render/scene.d.ts +0 -8
- package/dist/standard/render/scene.d.ts.map +0 -1
- package/dist/standard/render/scene.js +0 -67
- package/dist/standard/render/scene.js.map +0 -1
- package/dist/standard/transforms/index.d.ts +0 -27
- package/dist/standard/transforms/index.d.ts.map +0 -1
- package/dist/standard/transforms/index.js +0 -122
- package/dist/standard/transforms/index.js.map +0 -1
- package/dist/standard/transforms/wasm.d.ts +0 -17
- package/dist/standard/transforms/wasm.d.ts.map +0 -1
- package/dist/standard/transforms/wasm.js +0 -31
- package/dist/standard/transforms/wasm.js.map +0 -1
- package/dist/standard/tween/easing.d.ts +0 -5
- package/dist/standard/tween/easing.d.ts.map +0 -1
- package/dist/standard/tween/easing.js +0 -80
- package/dist/standard/tween/easing.js.map +0 -1
- package/dist/standard/tween/index.d.ts +0 -4
- package/dist/standard/tween/index.d.ts.map +0 -1
- package/dist/standard/tween/sequence.d.ts +0 -20
- package/dist/standard/tween/sequence.d.ts.map +0 -1
- package/dist/standard/tween/sequence.js +0 -95
- package/dist/standard/tween/sequence.js.map +0 -1
- package/dist/standard/tween/tween.d.ts +0 -28
- package/dist/standard/tween/tween.d.ts.map +0 -1
- package/dist/standard/tween/tween.js +0 -136
- package/dist/standard/tween/tween.js.map +0 -1
- package/src/vite-env.d.ts +0 -6
package/dist/core/runtime.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
function u() {
|
|
2
|
-
if (typeof __TAURI_INTERNALS__ < "u")
|
|
3
|
-
return "standalone";
|
|
4
|
-
if (typeof Bun < "u")
|
|
5
|
-
return "headless";
|
|
6
|
-
if (typeof window < "u" && typeof fetch == "function")
|
|
7
|
-
return "web";
|
|
8
|
-
throw new Error("Unknown runtime environment");
|
|
9
|
-
}
|
|
10
|
-
function f() {
|
|
11
|
-
return {
|
|
12
|
-
target: "web",
|
|
13
|
-
async readFile(e) {
|
|
14
|
-
const t = await fetch(e);
|
|
15
|
-
if (!t.ok)
|
|
16
|
-
throw new Error(`Failed to load ${e}: ${t.status}`);
|
|
17
|
-
return t.text();
|
|
18
|
-
},
|
|
19
|
-
async readBinary(e) {
|
|
20
|
-
const t = await fetch(e);
|
|
21
|
-
if (!t.ok)
|
|
22
|
-
throw new Error(`Failed to load ${e}: ${t.status}`);
|
|
23
|
-
return t.arrayBuffer();
|
|
24
|
-
},
|
|
25
|
-
requestFrame(e) {
|
|
26
|
-
requestAnimationFrame(e);
|
|
27
|
-
},
|
|
28
|
-
now() {
|
|
29
|
-
return performance.now();
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
function c() {
|
|
34
|
-
return {
|
|
35
|
-
target: "headless",
|
|
36
|
-
async readFile(e) {
|
|
37
|
-
return Bun.file(e).text();
|
|
38
|
-
},
|
|
39
|
-
async readBinary(e) {
|
|
40
|
-
return Bun.file(e).arrayBuffer();
|
|
41
|
-
},
|
|
42
|
-
requestFrame(e) {
|
|
43
|
-
setTimeout(e, 0);
|
|
44
|
-
},
|
|
45
|
-
now() {
|
|
46
|
-
return performance.now();
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function o(e) {
|
|
51
|
-
return e.startsWith("/") || e.startsWith("./") || e.startsWith("../");
|
|
52
|
-
}
|
|
53
|
-
function d() {
|
|
54
|
-
return {
|
|
55
|
-
target: "standalone",
|
|
56
|
-
async readFile(e) {
|
|
57
|
-
if (o(e)) {
|
|
58
|
-
const i = await fetch(e);
|
|
59
|
-
if (!i.ok)
|
|
60
|
-
throw new Error(`Failed to load ${e}: ${i.status}`);
|
|
61
|
-
return i.text();
|
|
62
|
-
}
|
|
63
|
-
const { readTextFile: t } = await import(
|
|
64
|
-
/* @vite-ignore */
|
|
65
|
-
"@tauri-apps/plugin-fs"
|
|
66
|
-
);
|
|
67
|
-
return t(e);
|
|
68
|
-
},
|
|
69
|
-
async readBinary(e) {
|
|
70
|
-
if (o(e)) {
|
|
71
|
-
const a = await fetch(e);
|
|
72
|
-
if (!a.ok)
|
|
73
|
-
throw new Error(`Failed to load ${e}: ${a.status}`);
|
|
74
|
-
return a.arrayBuffer();
|
|
75
|
-
}
|
|
76
|
-
const { readFile: t } = await import(
|
|
77
|
-
/* @vite-ignore */
|
|
78
|
-
"@tauri-apps/plugin-fs"
|
|
79
|
-
);
|
|
80
|
-
return (await t(e)).buffer;
|
|
81
|
-
},
|
|
82
|
-
requestFrame(e) {
|
|
83
|
-
requestAnimationFrame(e);
|
|
84
|
-
},
|
|
85
|
-
now() {
|
|
86
|
-
return performance.now();
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
let r;
|
|
91
|
-
async function s() {
|
|
92
|
-
switch (u()) {
|
|
93
|
-
case "headless":
|
|
94
|
-
return c();
|
|
95
|
-
case "standalone":
|
|
96
|
-
return d();
|
|
97
|
-
case "web":
|
|
98
|
-
return f();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
let n;
|
|
102
|
-
function w() {
|
|
103
|
-
if (r) return r;
|
|
104
|
-
throw n || (n = s().then((e) => (r = e, e))), new Error("Runtime not initialized. Call initRuntime() first.");
|
|
105
|
-
}
|
|
106
|
-
async function l() {
|
|
107
|
-
return r || (n || (n = s()), r = await n, r);
|
|
108
|
-
}
|
|
109
|
-
function m() {
|
|
110
|
-
r = void 0, n = void 0;
|
|
111
|
-
}
|
|
112
|
-
export {
|
|
113
|
-
u as detectTarget,
|
|
114
|
-
w as getRuntime,
|
|
115
|
-
l as initRuntime,
|
|
116
|
-
m as resetRuntime
|
|
117
|
-
};
|
|
118
|
-
//# sourceMappingURL=runtime.js.map
|
package/dist/core/runtime.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sources":["../../src/core/runtime.ts"],"sourcesContent":["export type RuntimeTarget = \"headless\" | \"standalone\" | \"web\";\n\nexport interface Runtime {\n readonly target: RuntimeTarget;\n readFile(path: string): Promise<string>;\n readBinary(path: string): Promise<ArrayBuffer>;\n requestFrame(callback: () => void): void;\n now(): number;\n}\n\ndeclare const __TAURI_INTERNALS__: unknown;\ndeclare const Bun: unknown;\n\nexport function detectTarget(): RuntimeTarget {\n if (typeof __TAURI_INTERNALS__ !== \"undefined\") {\n return \"standalone\";\n }\n\n if (typeof Bun !== \"undefined\") {\n return \"headless\";\n }\n\n if (typeof window !== \"undefined\" && typeof fetch === \"function\") {\n return \"web\";\n }\n\n throw new Error(\"Unknown runtime environment\");\n}\n\nfunction createWebRuntime(): Runtime {\n return {\n target: \"web\",\n\n async readFile(path: string): Promise<string> {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.status}`);\n }\n return response.text();\n },\n\n async readBinary(path: string): Promise<ArrayBuffer> {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.status}`);\n }\n return response.arrayBuffer();\n },\n\n requestFrame(callback: () => void): void {\n requestAnimationFrame(callback);\n },\n\n now(): number {\n return performance.now();\n },\n };\n}\n\nfunction createHeadlessRuntime(): Runtime {\n return {\n target: \"headless\",\n\n async readFile(path: string): Promise<string> {\n const file = (\n Bun as {\n file: (path: string) => {\n text: () => Promise<string>;\n arrayBuffer: () => Promise<ArrayBuffer>;\n };\n }\n ).file(path);\n return file.text();\n },\n\n async readBinary(path: string): Promise<ArrayBuffer> {\n const file = (\n Bun as {\n file: (path: string) => {\n text: () => Promise<string>;\n arrayBuffer: () => Promise<ArrayBuffer>;\n };\n }\n ).file(path);\n return file.arrayBuffer();\n },\n\n requestFrame(callback: () => void): void {\n setTimeout(callback, 0);\n },\n\n now(): number {\n return performance.now();\n },\n };\n}\n\nfunction isWebviewResource(path: string): boolean {\n return path.startsWith(\"/\") || path.startsWith(\"./\") || path.startsWith(\"../\");\n}\n\nfunction createStandaloneRuntime(): Runtime {\n return {\n target: \"standalone\",\n\n async readFile(path: string): Promise<string> {\n if (isWebviewResource(path)) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.status}`);\n }\n return response.text();\n }\n const { readTextFile } = await import(/* @vite-ignore */ \"@tauri-apps/plugin-fs\");\n return readTextFile(path);\n },\n\n async readBinary(path: string): Promise<ArrayBuffer> {\n if (isWebviewResource(path)) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(`Failed to load ${path}: ${response.status}`);\n }\n return response.arrayBuffer();\n }\n const { readFile } = await import(/* @vite-ignore */ \"@tauri-apps/plugin-fs\");\n const bytes = await readFile(path);\n return bytes.buffer;\n },\n\n requestFrame(callback: () => void): void {\n requestAnimationFrame(callback);\n },\n\n now(): number {\n return performance.now();\n },\n };\n}\n\nlet _runtime: Runtime | undefined;\n\nasync function createRuntime(): Promise<Runtime> {\n const target = detectTarget();\n\n switch (target) {\n case \"headless\":\n return createHeadlessRuntime();\n case \"standalone\":\n return createStandaloneRuntime();\n case \"web\":\n return createWebRuntime();\n }\n}\n\nlet _initPromise: Promise<Runtime> | undefined;\n\nexport function getRuntime(): Runtime {\n if (_runtime) return _runtime;\n\n if (!_initPromise) {\n _initPromise = createRuntime().then((r) => {\n _runtime = r;\n return r;\n });\n }\n\n throw new Error(\"Runtime not initialized. Call initRuntime() first.\");\n}\n\nexport async function initRuntime(): Promise<Runtime> {\n if (_runtime) return _runtime;\n\n if (!_initPromise) {\n _initPromise = createRuntime();\n }\n\n _runtime = await _initPromise;\n return _runtime;\n}\n\nexport function resetRuntime(): void {\n _runtime = undefined;\n _initPromise = undefined;\n}\n"],"names":["detectTarget","createWebRuntime","path","response","callback","createHeadlessRuntime","isWebviewResource","createStandaloneRuntime","readTextFile","readFile","_runtime","createRuntime","_initPromise","getRuntime","r","initRuntime","resetRuntime"],"mappings":"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"}
|
package/dist/core/scheduler.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { State } from './state';
|
|
2
|
-
export declare class CycleError extends Error {
|
|
3
|
-
constructor(message?: string);
|
|
4
|
-
}
|
|
5
|
-
export declare function toposort<T>(nodes: T[], edges: [T, T][]): T[];
|
|
6
|
-
export declare const Time: {
|
|
7
|
-
readonly FIXED_DT: number;
|
|
8
|
-
readonly DEFAULT_DT: number;
|
|
9
|
-
};
|
|
10
|
-
export interface GameTime {
|
|
11
|
-
deltaTime: number;
|
|
12
|
-
fixedDeltaTime: number;
|
|
13
|
-
elapsed: number;
|
|
14
|
-
}
|
|
15
|
-
export type SystemGroup = "setup" | "fixed" | "simulation" | "draw";
|
|
16
|
-
export interface System {
|
|
17
|
-
readonly update?: (state: State) => void;
|
|
18
|
-
readonly setup?: (state: State) => void;
|
|
19
|
-
readonly dispose?: (state: State) => void;
|
|
20
|
-
readonly group?: SystemGroup;
|
|
21
|
-
readonly first?: boolean;
|
|
22
|
-
readonly last?: boolean;
|
|
23
|
-
readonly before?: readonly System[];
|
|
24
|
-
readonly after?: readonly System[];
|
|
25
|
-
}
|
|
26
|
-
export declare class OrderingError extends Error {
|
|
27
|
-
constructor(message: string);
|
|
28
|
-
}
|
|
29
|
-
export declare class Scheduler {
|
|
30
|
-
private readonly _systems;
|
|
31
|
-
private _systemsVersion;
|
|
32
|
-
private _accumulator;
|
|
33
|
-
private readonly _initialized;
|
|
34
|
-
private _cache;
|
|
35
|
-
private _cacheVersion;
|
|
36
|
-
private _time;
|
|
37
|
-
get systems(): ReadonlySet<System>;
|
|
38
|
-
get systemsVersion(): number;
|
|
39
|
-
get accumulator(): number;
|
|
40
|
-
get time(): Readonly<GameTime>;
|
|
41
|
-
register(system: System): void;
|
|
42
|
-
unregister(system: System): void;
|
|
43
|
-
step(state: State, deltaTime?: number): void;
|
|
44
|
-
private runGroup;
|
|
45
|
-
private getSorted;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,UAAW,SAAQ,KAAK;gBACrB,OAAO,SAAiC;CAIvD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAsC5D;AA0BD,eAAO,MAAM,IAAI;;;CAGP,CAAC;AAEX,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,MAAM;IACnB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,qBAAa,aAAc,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI9B;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;IACtD,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,KAAK,CAIX;IAEF,IAAI,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAEjC;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAE7B;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK9B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMhC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,SAAkB,GAAG,IAAI;IAoBrD,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,SAAS;CAepB"}
|
package/dist/core/scheduler.js
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
class m extends Error {
|
|
2
|
-
constructor(e = "Circular dependency detected") {
|
|
3
|
-
super(e), this.name = "CycleError";
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
function u(r, e) {
|
|
7
|
-
if (r.length === 0) return [];
|
|
8
|
-
const s = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map();
|
|
9
|
-
for (const i of r)
|
|
10
|
-
s.set(i, /* @__PURE__ */ new Set()), t.set(i, 0);
|
|
11
|
-
for (const [i, c] of e)
|
|
12
|
-
!s.has(i) || !s.has(c) || (s.get(i).add(c), t.set(c, t.get(c) + 1));
|
|
13
|
-
_(r, s);
|
|
14
|
-
const n = [], o = [];
|
|
15
|
-
for (const i of r)
|
|
16
|
-
t.get(i) === 0 && n.push(i);
|
|
17
|
-
for (; n.length > 0; ) {
|
|
18
|
-
const i = n.shift();
|
|
19
|
-
o.push(i);
|
|
20
|
-
for (const c of s.get(i)) {
|
|
21
|
-
const h = t.get(c) - 1;
|
|
22
|
-
t.set(c, h), h === 0 && n.push(c);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return o;
|
|
26
|
-
}
|
|
27
|
-
function _(r, e) {
|
|
28
|
-
const s = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
|
|
29
|
-
function n(o) {
|
|
30
|
-
if (t.has(o)) return !0;
|
|
31
|
-
if (s.has(o)) return !1;
|
|
32
|
-
s.add(o), t.add(o);
|
|
33
|
-
for (const i of e.get(o))
|
|
34
|
-
if (n(i)) return !0;
|
|
35
|
-
return t.delete(o), !1;
|
|
36
|
-
}
|
|
37
|
-
for (const o of r)
|
|
38
|
-
if (n(o)) throw new m();
|
|
39
|
-
}
|
|
40
|
-
const a = {
|
|
41
|
-
FIXED_DT: 1 / 50,
|
|
42
|
-
DEFAULT_DT: 1 / 60
|
|
43
|
-
};
|
|
44
|
-
class d extends Error {
|
|
45
|
-
constructor(e) {
|
|
46
|
-
super(e), this.name = "OrderingError";
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
class w {
|
|
50
|
-
_systems = /* @__PURE__ */ new Set();
|
|
51
|
-
_systemsVersion = 0;
|
|
52
|
-
_accumulator = 0;
|
|
53
|
-
_initialized = /* @__PURE__ */ new WeakSet();
|
|
54
|
-
_cache = /* @__PURE__ */ new Map();
|
|
55
|
-
_cacheVersion = -1;
|
|
56
|
-
_time = {
|
|
57
|
-
deltaTime: 0,
|
|
58
|
-
fixedDeltaTime: a.FIXED_DT,
|
|
59
|
-
elapsed: 0
|
|
60
|
-
};
|
|
61
|
-
get systems() {
|
|
62
|
-
return this._systems;
|
|
63
|
-
}
|
|
64
|
-
get systemsVersion() {
|
|
65
|
-
return this._systemsVersion;
|
|
66
|
-
}
|
|
67
|
-
get accumulator() {
|
|
68
|
-
return this._accumulator;
|
|
69
|
-
}
|
|
70
|
-
get time() {
|
|
71
|
-
return this._time;
|
|
72
|
-
}
|
|
73
|
-
register(e) {
|
|
74
|
-
this._systems.add(e), this._systemsVersion++;
|
|
75
|
-
}
|
|
76
|
-
unregister(e) {
|
|
77
|
-
this._systems.delete(e) && this._systemsVersion++;
|
|
78
|
-
}
|
|
79
|
-
step(e, s = a.DEFAULT_DT) {
|
|
80
|
-
const t = a.FIXED_DT;
|
|
81
|
-
for (this._time.deltaTime = s, this._time.elapsed += s, this._accumulator += s, this.runGroup(e, "setup"); this._accumulator >= t; )
|
|
82
|
-
this._time.deltaTime = t, this.runGroup(e, "fixed"), this._accumulator -= t;
|
|
83
|
-
this._time.deltaTime = s, this.runGroup(e, "simulation"), this.runGroup(e, "draw");
|
|
84
|
-
}
|
|
85
|
-
runGroup(e, s) {
|
|
86
|
-
for (const t of this.getSorted(s))
|
|
87
|
-
this._initialized.has(t) || (t.setup?.(e), this._initialized.add(t)), t.update?.(e);
|
|
88
|
-
}
|
|
89
|
-
getSorted(e) {
|
|
90
|
-
this._systemsVersion !== this._cacheVersion && (this._cache.clear(), this._cacheVersion = this._systemsVersion);
|
|
91
|
-
const s = this._cache.get(e);
|
|
92
|
-
if (s) return s;
|
|
93
|
-
const t = Array.from(this._systems), n = t.filter((i) => (i.group ?? "simulation") === e), o = p(n, t);
|
|
94
|
-
return this._cache.set(e, o), o;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function p(r, e) {
|
|
98
|
-
g(r, e ?? r);
|
|
99
|
-
const t = r.filter((i) => i.first), n = r.filter((i) => i.last), o = r.filter((i) => !i.first && !i.last);
|
|
100
|
-
return [
|
|
101
|
-
...u(t, f(t)),
|
|
102
|
-
...u(o, f(o)),
|
|
103
|
-
...u(n, f(n))
|
|
104
|
-
];
|
|
105
|
-
}
|
|
106
|
-
function f(r) {
|
|
107
|
-
const e = [];
|
|
108
|
-
for (const s of r) {
|
|
109
|
-
for (const t of s.before ?? [])
|
|
110
|
-
r.includes(t) && e.push([s, t]);
|
|
111
|
-
for (const t of s.after ?? [])
|
|
112
|
-
r.includes(t) && e.push([t, s]);
|
|
113
|
-
}
|
|
114
|
-
return e;
|
|
115
|
-
}
|
|
116
|
-
function g(r, e) {
|
|
117
|
-
for (const s of r) {
|
|
118
|
-
if (s.first && s.last)
|
|
119
|
-
throw new d("System cannot have both first and last constraints");
|
|
120
|
-
const t = s.group ?? "simulation";
|
|
121
|
-
for (const n of s.before ?? []) l(n, t, e);
|
|
122
|
-
for (const n of s.after ?? []) l(n, t, e);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
function l(r, e, s) {
|
|
126
|
-
if (!s.includes(r)) return;
|
|
127
|
-
const t = r.group ?? "simulation";
|
|
128
|
-
if (t !== e)
|
|
129
|
-
throw new d(`Cross-group constraint: ${e} references ${t}`);
|
|
130
|
-
}
|
|
131
|
-
export {
|
|
132
|
-
m as CycleError,
|
|
133
|
-
d as OrderingError,
|
|
134
|
-
w as Scheduler,
|
|
135
|
-
a as Time,
|
|
136
|
-
u as toposort
|
|
137
|
-
};
|
|
138
|
-
//# sourceMappingURL=scheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sources":["../../src/core/scheduler.ts"],"sourcesContent":["import type { State } from \"./state\";\n\nexport class CycleError extends Error {\n constructor(message = \"Circular dependency detected\") {\n super(message);\n this.name = \"CycleError\";\n }\n}\n\nexport function toposort<T>(nodes: T[], edges: [T, T][]): T[] {\n if (nodes.length === 0) return [];\n\n const graph = new Map<T, Set<T>>();\n const inDegree = new Map<T, number>();\n\n for (const node of nodes) {\n graph.set(node, new Set());\n inDegree.set(node, 0);\n }\n\n for (const [from, to] of edges) {\n if (!graph.has(from) || !graph.has(to)) continue;\n graph.get(from)!.add(to);\n inDegree.set(to, inDegree.get(to)! + 1);\n }\n\n detectCycle(nodes, graph);\n\n const queue: T[] = [];\n const sorted: T[] = [];\n\n for (const node of nodes) {\n if (inDegree.get(node) === 0) queue.push(node);\n }\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n sorted.push(node);\n\n for (const dep of graph.get(node)!) {\n const newDegree = inDegree.get(dep)! - 1;\n inDegree.set(dep, newDegree);\n if (newDegree === 0) queue.push(dep);\n }\n }\n\n return sorted;\n}\n\nfunction detectCycle<T>(nodes: T[], graph: Map<T, Set<T>>): void {\n const visited = new Set<T>();\n const stack = new Set<T>();\n\n function hasCycle(node: T): boolean {\n if (stack.has(node)) return true;\n if (visited.has(node)) return false;\n\n visited.add(node);\n stack.add(node);\n\n for (const dep of graph.get(node)!) {\n if (hasCycle(dep)) return true;\n }\n\n stack.delete(node);\n return false;\n }\n\n for (const node of nodes) {\n if (hasCycle(node)) throw new CycleError();\n }\n}\n\nexport const Time = {\n FIXED_DT: 1 / 50,\n DEFAULT_DT: 1 / 60,\n} as const;\n\nexport interface GameTime {\n deltaTime: number;\n fixedDeltaTime: number;\n elapsed: number;\n}\n\nexport type SystemGroup = \"setup\" | \"fixed\" | \"simulation\" | \"draw\";\n\nexport interface System {\n readonly update?: (state: State) => void;\n readonly setup?: (state: State) => void;\n readonly dispose?: (state: State) => void;\n readonly group?: SystemGroup;\n readonly first?: boolean;\n readonly last?: boolean;\n readonly before?: readonly System[];\n readonly after?: readonly System[];\n}\n\nexport class OrderingError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"OrderingError\";\n }\n}\n\nexport class Scheduler {\n private readonly _systems = new Set<System>();\n private _systemsVersion = 0;\n private _accumulator = 0;\n private readonly _initialized = new WeakSet<System>();\n private _cache = new Map<SystemGroup, System[]>();\n private _cacheVersion = -1;\n private _time: GameTime = {\n deltaTime: 0,\n fixedDeltaTime: Time.FIXED_DT,\n elapsed: 0,\n };\n\n get systems(): ReadonlySet<System> {\n return this._systems;\n }\n\n get systemsVersion(): number {\n return this._systemsVersion;\n }\n\n get accumulator(): number {\n return this._accumulator;\n }\n\n get time(): Readonly<GameTime> {\n return this._time;\n }\n\n register(system: System): void {\n this._systems.add(system);\n this._systemsVersion++;\n }\n\n unregister(system: System): void {\n if (this._systems.delete(system)) {\n this._systemsVersion++;\n }\n }\n\n step(state: State, deltaTime = Time.DEFAULT_DT): void {\n const fixedDt = Time.FIXED_DT;\n\n this._time.deltaTime = deltaTime;\n this._time.elapsed += deltaTime;\n this._accumulator += deltaTime;\n\n this.runGroup(state, \"setup\");\n\n while (this._accumulator >= fixedDt) {\n this._time.deltaTime = fixedDt;\n this.runGroup(state, \"fixed\");\n this._accumulator -= fixedDt;\n }\n\n this._time.deltaTime = deltaTime;\n this.runGroup(state, \"simulation\");\n this.runGroup(state, \"draw\");\n }\n\n private runGroup(state: State, group: SystemGroup): void {\n for (const system of this.getSorted(group)) {\n if (!this._initialized.has(system)) {\n system.setup?.(state);\n this._initialized.add(system);\n }\n system.update?.(state);\n }\n }\n\n private getSorted(group: SystemGroup): System[] {\n if (this._systemsVersion !== this._cacheVersion) {\n this._cache.clear();\n this._cacheVersion = this._systemsVersion;\n }\n\n const cached = this._cache.get(group);\n if (cached) return cached;\n\n const all = Array.from(this._systems);\n const filtered = all.filter((s) => (s.group ?? \"simulation\") === group);\n const sorted = sortSystems(filtered, all);\n this._cache.set(group, sorted);\n return sorted;\n }\n}\n\nfunction sortSystems(systems: System[], allSystems?: System[]): System[] {\n const all = allSystems ?? systems;\n validateSystems(systems, all);\n\n const first = systems.filter((s) => s.first);\n const last = systems.filter((s) => s.last);\n const normal = systems.filter((s) => !s.first && !s.last);\n\n return [\n ...toposort(first, buildEdges(first)),\n ...toposort(normal, buildEdges(normal)),\n ...toposort(last, buildEdges(last)),\n ];\n}\n\nfunction buildEdges(systems: System[]): [System, System][] {\n const edges: [System, System][] = [];\n for (const system of systems) {\n for (const target of system.before ?? []) {\n if (systems.includes(target)) edges.push([system, target]);\n }\n for (const target of system.after ?? []) {\n if (systems.includes(target)) edges.push([target, system]);\n }\n }\n return edges;\n}\n\nfunction validateSystems(systems: System[], all: System[]): void {\n for (const s of systems) {\n if (s.first && s.last) {\n throw new OrderingError(\"System cannot have both first and last constraints\");\n }\n\n const group = s.group ?? \"simulation\";\n for (const ref of s.before ?? []) checkGroup(ref, group, all);\n for (const ref of s.after ?? []) checkGroup(ref, group, all);\n }\n}\n\nfunction checkGroup(ref: System, group: string, all: System[]): void {\n if (!all.includes(ref)) return;\n const refGroup = ref.group ?? \"simulation\";\n if (refGroup !== group) {\n throw new OrderingError(`Cross-group constraint: ${group} references ${refGroup}`);\n }\n}\n"],"names":["CycleError","message","toposort","nodes","edges","graph","inDegree","node","from","to","detectCycle","queue","sorted","dep","newDegree","visited","stack","hasCycle","Time","OrderingError","Scheduler","system","state","deltaTime","fixedDt","group","cached","all","filtered","s","sortSystems","systems","allSystems","validateSystems","first","last","normal","buildEdges","target","ref","checkGroup","refGroup"],"mappings":"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"}
|
package/dist/core/state.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ComponentRef, World } from 'bitecs';
|
|
2
|
-
import { Scheduler, GameTime, System } from './scheduler';
|
|
3
|
-
import { RelationDef } from './relation';
|
|
4
|
-
import { Plugin } from './types';
|
|
5
|
-
import { StateBuilder } from './builder';
|
|
6
|
-
import { Runtime } from './runtime';
|
|
7
|
-
import { FieldAccessor } from './component';
|
|
8
|
-
import { ResourceKey } from './resource';
|
|
9
|
-
export declare const MAX_ENTITIES = 65536;
|
|
10
|
-
export declare class State {
|
|
11
|
-
readonly world: World;
|
|
12
|
-
readonly scheduler: Scheduler;
|
|
13
|
-
readonly canvas: HTMLCanvasElement | null;
|
|
14
|
-
private _resources;
|
|
15
|
-
private _disposed;
|
|
16
|
-
private _running;
|
|
17
|
-
private _runtime;
|
|
18
|
-
private _lastTime;
|
|
19
|
-
private _fieldAccessors;
|
|
20
|
-
get time(): Readonly<GameTime>;
|
|
21
|
-
get running(): boolean;
|
|
22
|
-
static Builder: (new () => StateBuilder) | null;
|
|
23
|
-
static new(): StateBuilder;
|
|
24
|
-
constructor(canvas?: HTMLCanvasElement | null);
|
|
25
|
-
setResource<T>(key: ResourceKey<T>, value: T): void;
|
|
26
|
-
getResource<T>(key: ResourceKey<T>): T | undefined;
|
|
27
|
-
deleteResource<T>(key: ResourceKey<T>): boolean;
|
|
28
|
-
start(runtime?: Runtime): Promise<void>;
|
|
29
|
-
stop(): void;
|
|
30
|
-
private scheduleFrame;
|
|
31
|
-
private tick;
|
|
32
|
-
register(pluginOrSystem: Plugin | System): void;
|
|
33
|
-
unregister(system: System): void;
|
|
34
|
-
step(deltaTime?: number): void;
|
|
35
|
-
addEntity(): number;
|
|
36
|
-
removeEntity(eid: number): void;
|
|
37
|
-
entityExists(eid: number): boolean;
|
|
38
|
-
getAllEntities(): readonly number[];
|
|
39
|
-
query(terms: ComponentRef[]): Iterable<number>;
|
|
40
|
-
getEntityComponents(eid: number): ComponentRef[];
|
|
41
|
-
addComponent<T extends ComponentRef>(eid: number, component: T): void;
|
|
42
|
-
addComponents(eid: number, ...components: ComponentRef[]): void;
|
|
43
|
-
removeComponent(eid: number, ...components: ComponentRef[]): void;
|
|
44
|
-
removeComponents(eid: number, ...components: ComponentRef[]): void;
|
|
45
|
-
hasComponent<T extends ComponentRef>(eid: number, component: T): boolean;
|
|
46
|
-
getComponent<T extends ComponentRef>(eid: number, component: T): any;
|
|
47
|
-
setComponent<T extends ComponentRef>(eid: number, component: T, data: Record<string, number>): void;
|
|
48
|
-
addRelation(subject: number, relation: RelationDef, target: number): void;
|
|
49
|
-
hasRelation(subject: number, relation: RelationDef, target: number): boolean;
|
|
50
|
-
getRelationTargets(subject: number, relation: RelationDef): number[];
|
|
51
|
-
getFirstRelationTarget(subject: number, relation: RelationDef): number;
|
|
52
|
-
private ensureFieldAccessors;
|
|
53
|
-
resolveFieldPath(path: string): {
|
|
54
|
-
component: string;
|
|
55
|
-
field: string;
|
|
56
|
-
} | null;
|
|
57
|
-
bindFieldAccessor(bindingId: number, componentName: string, fieldPath: string): FieldAccessor | null;
|
|
58
|
-
getFieldAccessor(bindingId: number): FieldAccessor | undefined;
|
|
59
|
-
removeFieldAccessor(bindingId: number): boolean;
|
|
60
|
-
dispose(): void;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=state.d.ts.map
|
package/dist/core/state.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/core/state.js
DELETED
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { createWorld as p, addEntity as g, removeEntity as _, entityExists as w, getAllEntities as C, query as A, getEntityComponents as E, addComponent as d, removeComponent as y, removeComponents as F, hasComponent as h, getComponent as T, getRelationTargets as a } from "bitecs";
|
|
2
|
-
import { Scheduler as v, Time as R } from "./scheduler.js";
|
|
3
|
-
import { initRuntime as x } from "./runtime.js";
|
|
4
|
-
import { registerComponent as j, getTraits as m, getRegisteredComponent as B, directAccessor as I } from "./component.js";
|
|
5
|
-
import { toCamelCase as b } from "./strings.js";
|
|
6
|
-
const f = 65536;
|
|
7
|
-
class c {
|
|
8
|
-
world;
|
|
9
|
-
scheduler = new v();
|
|
10
|
-
canvas;
|
|
11
|
-
_resources = /* @__PURE__ */ new Map();
|
|
12
|
-
_disposed = !1;
|
|
13
|
-
_running = !1;
|
|
14
|
-
_runtime = null;
|
|
15
|
-
_lastTime = 0;
|
|
16
|
-
_fieldAccessors = null;
|
|
17
|
-
get time() {
|
|
18
|
-
return this.scheduler.time;
|
|
19
|
-
}
|
|
20
|
-
get running() {
|
|
21
|
-
return this._running;
|
|
22
|
-
}
|
|
23
|
-
static Builder = null;
|
|
24
|
-
static new() {
|
|
25
|
-
if (!c.Builder)
|
|
26
|
-
throw new Error("StateBuilder not injected. Import from 'shallot' or 'shallot/core'.");
|
|
27
|
-
return new c.Builder();
|
|
28
|
-
}
|
|
29
|
-
constructor(e = null) {
|
|
30
|
-
this.world = p(), this.canvas = e;
|
|
31
|
-
}
|
|
32
|
-
setResource(e, t) {
|
|
33
|
-
this._resources.set(e, t);
|
|
34
|
-
}
|
|
35
|
-
getResource(e) {
|
|
36
|
-
return this._resources.get(e);
|
|
37
|
-
}
|
|
38
|
-
deleteResource(e) {
|
|
39
|
-
return this._resources.delete(e);
|
|
40
|
-
}
|
|
41
|
-
async start(e) {
|
|
42
|
-
this._running || (this._runtime = e ?? await x(), this._running = !0, this._lastTime = this._runtime.now(), this.scheduleFrame());
|
|
43
|
-
}
|
|
44
|
-
stop() {
|
|
45
|
-
this._running = !1;
|
|
46
|
-
}
|
|
47
|
-
scheduleFrame() {
|
|
48
|
-
!this._running || !this._runtime || this._runtime.requestFrame(() => this.tick());
|
|
49
|
-
}
|
|
50
|
-
tick() {
|
|
51
|
-
if (!this._running || !this._runtime) return;
|
|
52
|
-
const e = this._runtime.now(), t = (e - this._lastTime) / 1e3;
|
|
53
|
-
this._lastTime = e, this.step(t), this.scheduleFrame();
|
|
54
|
-
}
|
|
55
|
-
register(e) {
|
|
56
|
-
if ("update" in e || "setup" in e || "dispose" in e)
|
|
57
|
-
this.scheduler.register(e);
|
|
58
|
-
else {
|
|
59
|
-
const t = e;
|
|
60
|
-
if (t.components)
|
|
61
|
-
for (const [s, r] of Object.entries(t.components))
|
|
62
|
-
j(s, r);
|
|
63
|
-
if (t.systems)
|
|
64
|
-
for (const s of t.systems)
|
|
65
|
-
this.scheduler.register(s);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
unregister(e) {
|
|
69
|
-
this.scheduler.unregister(e);
|
|
70
|
-
}
|
|
71
|
-
step(e = R.DEFAULT_DT) {
|
|
72
|
-
this.scheduler.step(this, e);
|
|
73
|
-
}
|
|
74
|
-
addEntity() {
|
|
75
|
-
const e = g(this.world);
|
|
76
|
-
if (e >= f)
|
|
77
|
-
throw new Error(`Entity limit exceeded: ${e} >= ${f}`);
|
|
78
|
-
return e;
|
|
79
|
-
}
|
|
80
|
-
removeEntity(e) {
|
|
81
|
-
this._fieldAccessors?.delete(e), _(this.world, e);
|
|
82
|
-
}
|
|
83
|
-
entityExists(e) {
|
|
84
|
-
return w(this.world, e);
|
|
85
|
-
}
|
|
86
|
-
getAllEntities() {
|
|
87
|
-
return C(this.world);
|
|
88
|
-
}
|
|
89
|
-
query(e) {
|
|
90
|
-
return A(this.world, e);
|
|
91
|
-
}
|
|
92
|
-
getEntityComponents(e) {
|
|
93
|
-
return E(this.world, e);
|
|
94
|
-
}
|
|
95
|
-
addComponent(e, t) {
|
|
96
|
-
d(this.world, e, t);
|
|
97
|
-
const s = m(t);
|
|
98
|
-
if (s?.defaults) {
|
|
99
|
-
const r = s.defaults(), n = t;
|
|
100
|
-
for (const [o, i] of Object.entries(r)) {
|
|
101
|
-
const l = n[o];
|
|
102
|
-
l != null && (l[e] = i);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
addComponents(e, ...t) {
|
|
107
|
-
for (const s of t)
|
|
108
|
-
this.addComponent(e, s);
|
|
109
|
-
}
|
|
110
|
-
removeComponent(e, ...t) {
|
|
111
|
-
y(this.world, e, ...t);
|
|
112
|
-
}
|
|
113
|
-
removeComponents(e, ...t) {
|
|
114
|
-
F(this.world, e, ...t);
|
|
115
|
-
}
|
|
116
|
-
hasComponent(e, t) {
|
|
117
|
-
return h(this.world, e, t);
|
|
118
|
-
}
|
|
119
|
-
getComponent(e, t) {
|
|
120
|
-
return T(this.world, e, t);
|
|
121
|
-
}
|
|
122
|
-
setComponent(e, t, s) {
|
|
123
|
-
this.addComponent(e, t);
|
|
124
|
-
const r = t;
|
|
125
|
-
for (const [n, o] of Object.entries(s)) {
|
|
126
|
-
const i = r[n];
|
|
127
|
-
i != null && (i[e] = o);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
addRelation(e, t, s) {
|
|
131
|
-
d(this.world, e, t.relation(s));
|
|
132
|
-
}
|
|
133
|
-
hasRelation(e, t, s) {
|
|
134
|
-
return h(this.world, e, t.relation(s));
|
|
135
|
-
}
|
|
136
|
-
getRelationTargets(e, t) {
|
|
137
|
-
return a(this.world, e, t.relation);
|
|
138
|
-
}
|
|
139
|
-
getFirstRelationTarget(e, t) {
|
|
140
|
-
const s = a(this.world, e, t.relation);
|
|
141
|
-
return s.length > 0 ? s[0] : -1;
|
|
142
|
-
}
|
|
143
|
-
ensureFieldAccessors() {
|
|
144
|
-
return this._fieldAccessors || (this._fieldAccessors = /* @__PURE__ */ new Map()), this._fieldAccessors;
|
|
145
|
-
}
|
|
146
|
-
resolveFieldPath(e) {
|
|
147
|
-
const t = e.lastIndexOf(".");
|
|
148
|
-
return t === -1 ? null : {
|
|
149
|
-
component: e.slice(0, t),
|
|
150
|
-
field: e.slice(t + 1)
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
bindFieldAccessor(e, t, s) {
|
|
154
|
-
const r = B(t);
|
|
155
|
-
if (!r) return null;
|
|
156
|
-
const n = b(s), o = m(r.component);
|
|
157
|
-
if (o?.accessors?.[n]) {
|
|
158
|
-
const u = o.accessors[n];
|
|
159
|
-
return this.ensureFieldAccessors().set(e, u), u;
|
|
160
|
-
}
|
|
161
|
-
const i = r.component[n];
|
|
162
|
-
if (i == null) return null;
|
|
163
|
-
const l = I(i, 1, 0);
|
|
164
|
-
return this.ensureFieldAccessors().set(e, l), l;
|
|
165
|
-
}
|
|
166
|
-
getFieldAccessor(e) {
|
|
167
|
-
return this._fieldAccessors?.get(e);
|
|
168
|
-
}
|
|
169
|
-
removeFieldAccessor(e) {
|
|
170
|
-
return this._fieldAccessors?.delete(e) ?? !1;
|
|
171
|
-
}
|
|
172
|
-
dispose() {
|
|
173
|
-
if (!this._disposed) {
|
|
174
|
-
this.stop(), this._fieldAccessors = null;
|
|
175
|
-
for (const e of this.scheduler.systems)
|
|
176
|
-
e.dispose?.(this);
|
|
177
|
-
this._disposed = !0;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
export {
|
|
182
|
-
f as MAX_ENTITIES,
|
|
183
|
-
c as State
|
|
184
|
-
};
|
|
185
|
-
//# sourceMappingURL=state.js.map
|
package/dist/core/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sources":["../../src/core/state.ts"],"sourcesContent":["import {\n addComponent,\n addEntity,\n createWorld,\n entityExists,\n getAllEntities,\n getComponent,\n getEntityComponents,\n getRelationTargets,\n hasComponent,\n query,\n removeComponent,\n removeComponents,\n removeEntity,\n type ComponentRef,\n type World,\n} from \"bitecs\";\nimport { Scheduler, Time, type GameTime, type System } from \"./scheduler\";\nimport type { RelationDef } from \"./relation\";\nimport type { Plugin } from \"./types\";\nimport type { StateBuilder } from \"./builder\";\nimport { initRuntime, type Runtime } from \"./runtime\";\nimport {\n registerComponent,\n getTraits,\n getRegisteredComponent,\n directAccessor,\n type ComponentData,\n type FieldAccessor,\n} from \"./component\";\nimport { type ResourceKey } from \"./resource\";\nimport { toCamelCase } from \"./strings\";\n\nexport const MAX_ENTITIES = 65536;\n\nexport class State {\n readonly world: World;\n readonly scheduler = new Scheduler();\n readonly canvas: HTMLCanvasElement | null;\n\n private _resources = new Map<symbol, unknown>();\n private _disposed = false;\n private _running = false;\n private _runtime: Runtime | null = null;\n private _lastTime = 0;\n private _fieldAccessors: Map<number, FieldAccessor> | null = null;\n\n get time(): Readonly<GameTime> {\n return this.scheduler.time;\n }\n\n get running(): boolean {\n return this._running;\n }\n\n static Builder: (new () => StateBuilder) | null = null;\n\n static new(): StateBuilder {\n if (!State.Builder) {\n throw new Error(\"StateBuilder not injected. Import from 'shallot' or 'shallot/core'.\");\n }\n return new State.Builder();\n }\n\n constructor(canvas: HTMLCanvasElement | null = null) {\n this.world = createWorld();\n this.canvas = canvas;\n }\n\n setResource<T>(key: ResourceKey<T>, value: T): void {\n this._resources.set(key, value);\n }\n\n getResource<T>(key: ResourceKey<T>): T | undefined {\n return this._resources.get(key) as T | undefined;\n }\n\n deleteResource<T>(key: ResourceKey<T>): boolean {\n return this._resources.delete(key);\n }\n\n async start(runtime?: Runtime): Promise<void> {\n if (this._running) return;\n this._runtime = runtime ?? (await initRuntime());\n this._running = true;\n this._lastTime = this._runtime.now();\n this.scheduleFrame();\n }\n\n stop(): void {\n this._running = false;\n }\n\n private scheduleFrame(): void {\n if (!this._running || !this._runtime) return;\n this._runtime.requestFrame(() => this.tick());\n }\n\n private tick(): void {\n if (!this._running || !this._runtime) return;\n const now = this._runtime.now();\n const dt = (now - this._lastTime) / 1000;\n this._lastTime = now;\n this.step(dt);\n this.scheduleFrame();\n }\n\n register(pluginOrSystem: Plugin | System): void {\n if (\n \"update\" in pluginOrSystem ||\n \"setup\" in pluginOrSystem ||\n \"dispose\" in pluginOrSystem\n ) {\n this.scheduler.register(pluginOrSystem as System);\n } else {\n const plugin = pluginOrSystem as Plugin;\n if (plugin.components) {\n for (const [name, component] of Object.entries(plugin.components)) {\n registerComponent(name, component);\n }\n }\n if (plugin.systems) {\n for (const system of plugin.systems) {\n this.scheduler.register(system);\n }\n }\n }\n }\n\n unregister(system: System): void {\n this.scheduler.unregister(system);\n }\n\n step(deltaTime = Time.DEFAULT_DT): void {\n this.scheduler.step(this, deltaTime);\n }\n\n addEntity(): number {\n const eid = addEntity(this.world);\n if (eid >= MAX_ENTITIES) {\n throw new Error(`Entity limit exceeded: ${eid} >= ${MAX_ENTITIES}`);\n }\n return eid;\n }\n\n removeEntity(eid: number): void {\n this._fieldAccessors?.delete(eid);\n removeEntity(this.world, eid);\n }\n\n entityExists(eid: number): boolean {\n return entityExists(this.world, eid);\n }\n\n getAllEntities(): readonly number[] {\n return getAllEntities(this.world);\n }\n\n query(terms: ComponentRef[]): Iterable<number> {\n return query(this.world, terms);\n }\n\n getEntityComponents(eid: number): ComponentRef[] {\n return getEntityComponents(this.world, eid);\n }\n\n addComponent<T extends ComponentRef>(eid: number, component: T): void {\n addComponent(this.world, eid, component);\n\n const traits = getTraits(component as ComponentData);\n if (traits?.defaults) {\n const defaults = traits.defaults();\n const comp = component as ComponentData;\n for (const [field, value] of Object.entries(defaults)) {\n const arr = comp[field];\n if (arr != null) {\n arr[eid] = value;\n }\n }\n }\n }\n\n addComponents(eid: number, ...components: ComponentRef[]): void {\n for (const component of components) {\n this.addComponent(eid, component);\n }\n }\n\n removeComponent(eid: number, ...components: ComponentRef[]): void {\n removeComponent(this.world, eid, ...components);\n }\n\n removeComponents(eid: number, ...components: ComponentRef[]): void {\n removeComponents(this.world, eid, ...components);\n }\n\n hasComponent<T extends ComponentRef>(eid: number, component: T): boolean {\n return hasComponent(this.world, eid, component);\n }\n\n getComponent<T extends ComponentRef>(eid: number, component: T) {\n return getComponent(this.world, eid, component);\n }\n\n setComponent<T extends ComponentRef>(\n eid: number,\n component: T,\n data: Record<string, number>\n ): void {\n this.addComponent(eid, component);\n const comp = component as Record<string, number[]>;\n for (const [field, value] of Object.entries(data)) {\n const arr = comp[field];\n if (arr != null) {\n arr[eid] = value;\n }\n }\n }\n\n addRelation(subject: number, relation: RelationDef, target: number): void {\n addComponent(this.world, subject, relation.relation(target));\n }\n\n hasRelation(subject: number, relation: RelationDef, target: number): boolean {\n return hasComponent(this.world, subject, relation.relation(target));\n }\n\n getRelationTargets(subject: number, relation: RelationDef): number[] {\n return getRelationTargets(this.world, subject, relation.relation);\n }\n\n getFirstRelationTarget(subject: number, relation: RelationDef): number {\n const targets = getRelationTargets(this.world, subject, relation.relation);\n return targets.length > 0 ? targets[0] : -1;\n }\n\n private ensureFieldAccessors(): Map<number, FieldAccessor> {\n if (!this._fieldAccessors) {\n this._fieldAccessors = new Map();\n }\n return this._fieldAccessors;\n }\n\n resolveFieldPath(path: string): { component: string; field: string } | null {\n const dotIndex = path.lastIndexOf(\".\");\n if (dotIndex === -1) return null;\n return {\n component: path.slice(0, dotIndex),\n field: path.slice(dotIndex + 1),\n };\n }\n\n bindFieldAccessor(\n bindingId: number,\n componentName: string,\n fieldPath: string\n ): FieldAccessor | null {\n const registered = getRegisteredComponent(componentName);\n if (!registered) return null;\n\n const camelPath = toCamelCase(fieldPath);\n\n const traits = getTraits(registered.component);\n if (traits?.accessors?.[camelPath]) {\n const accessor = traits.accessors[camelPath];\n this.ensureFieldAccessors().set(bindingId, accessor);\n return accessor;\n }\n\n const array = registered.component[camelPath];\n if (array == null) return null;\n\n const accessor = directAccessor(array, 1, 0);\n this.ensureFieldAccessors().set(bindingId, accessor);\n return accessor;\n }\n\n getFieldAccessor(bindingId: number): FieldAccessor | undefined {\n return this._fieldAccessors?.get(bindingId);\n }\n\n removeFieldAccessor(bindingId: number): boolean {\n return this._fieldAccessors?.delete(bindingId) ?? false;\n }\n\n dispose(): void {\n if (this._disposed) return;\n this.stop();\n this._fieldAccessors = null;\n for (const system of this.scheduler.systems) {\n system.dispose?.(this);\n }\n this._disposed = true;\n }\n}\n"],"names":["MAX_ENTITIES","State","Scheduler","canvas","createWorld","key","value","runtime","initRuntime","now","dt","pluginOrSystem","plugin","name","component","registerComponent","system","deltaTime","Time","eid","addEntity","removeEntity","entityExists","getAllEntities","terms","query","getEntityComponents","addComponent","traits","getTraits","defaults","comp","field","arr","components","removeComponent","removeComponents","hasComponent","getComponent","data","subject","relation","target","getRelationTargets","targets","path","dotIndex","bindingId","componentName","fieldPath","registered","getRegisteredComponent","camelPath","toCamelCase","accessor","array","directAccessor"],"mappings":"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"}
|
package/dist/core/strings.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/core/strings.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/core/strings.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
function t(e) {
|
|
2
|
-
return e.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
|
|
3
|
-
}
|
|
4
|
-
function o(e) {
|
|
5
|
-
return e.replace(/-([a-z])/g, (r, a) => a.toUpperCase());
|
|
6
|
-
}
|
|
7
|
-
export {
|
|
8
|
-
o as toCamelCase,
|
|
9
|
-
t as toKebabCase
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=strings.js.map
|
package/dist/core/strings.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","sources":["../../src/core/strings.ts"],"sourcesContent":["export function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n\nexport function toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n}\n"],"names":["toKebabCase","str","toCamelCase","_","letter"],"mappings":"AAAO,SAASA,EAAYC,GAAqB;AAC7C,SAAOA,EACF,QAAQ,mBAAmB,OAAO,EAClC,QAAQ,WAAW,GAAG,EACtB,YAAA;AACT;AAEO,SAASC,EAAYD,GAAqB;AAC7C,SAAOA,EAAI,QAAQ,aAAa,CAACE,GAAGC,MAAWA,EAAO,aAAa;AACvE;"}
|