rn-gamekit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/lib/module/assets/defineAssets.js +48 -0
- package/lib/module/assets/defineAssets.js.map +1 -0
- package/lib/module/assets/errors.js +38 -0
- package/lib/module/assets/errors.js.map +1 -0
- package/lib/module/assets/types.js +2 -0
- package/lib/module/assets/types.js.map +1 -0
- package/lib/module/assets/validation.js +99 -0
- package/lib/module/assets/validation.js.map +1 -0
- package/lib/module/core/frameDriver.js +20 -0
- package/lib/module/core/frameDriver.js.map +1 -0
- package/lib/module/core/input/createInputBuffer.js +296 -0
- package/lib/module/core/input/createInputBuffer.js.map +1 -0
- package/lib/module/core/input/types.js +4 -0
- package/lib/module/core/input/types.js.map +1 -0
- package/lib/module/core/session/createGameSession.js +554 -0
- package/lib/module/core/session/createGameSession.js.map +1 -0
- package/lib/module/core/session/deepFreeze.js +155 -0
- package/lib/module/core/session/deepFreeze.js.map +1 -0
- package/lib/module/core/session/diagnostics.js +2 -0
- package/lib/module/core/session/diagnostics.js.map +1 -0
- package/lib/module/core/session/types.js +43 -0
- package/lib/module/core/session/types.js.map +1 -0
- package/lib/module/definition/defineGame.js +57 -0
- package/lib/module/definition/defineGame.js.map +1 -0
- package/lib/module/definition/types.js +4 -0
- package/lib/module/definition/types.js.map +1 -0
- package/lib/module/geometry/types.js +2 -0
- package/lib/module/geometry/types.js.map +1 -0
- package/lib/module/index.js +12 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/react/GamePointerInput.js +385 -0
- package/lib/module/react/GamePointerInput.js.map +1 -0
- package/lib/module/react/GameView.js +223 -0
- package/lib/module/react/GameView.js.map +1 -0
- package/lib/module/react/alphaClock.js +42 -0
- package/lib/module/react/alphaClock.js.map +1 -0
- package/lib/module/react/assets/createGameAssetStore.js +358 -0
- package/lib/module/react/assets/createGameAssetStore.js.map +1 -0
- package/lib/module/react/assets/decodeSkiaImage.js +54 -0
- package/lib/module/react/assets/decodeSkiaImage.js.map +1 -0
- package/lib/module/react/assets/errors.js +10 -0
- package/lib/module/react/assets/errors.js.map +1 -0
- package/lib/module/react/assets/useGameAssets.js +160 -0
- package/lib/module/react/assets/useGameAssets.js.map +1 -0
- package/lib/module/react/bindAppLifecycle.js +58 -0
- package/lib/module/react/bindAppLifecycle.js.map +1 -0
- package/lib/module/react/bindGameSession.js +37 -0
- package/lib/module/react/bindGameSession.js.map +1 -0
- package/lib/module/react/gestureLifecycle.js +68 -0
- package/lib/module/react/gestureLifecycle.js.map +1 -0
- package/lib/module/react/instrumentation.js +4 -0
- package/lib/module/react/instrumentation.js.map +1 -0
- package/lib/module/react/pointerBinding.js +196 -0
- package/lib/module/react/pointerBinding.js.map +1 -0
- package/lib/module/react/pointerCoalescer.js +224 -0
- package/lib/module/react/pointerCoalescer.js.map +1 -0
- package/lib/module/react/pointerContainment.js +27 -0
- package/lib/module/react/pointerContainment.js.map +1 -0
- package/lib/module/react/sprites/GameSprite.js +116 -0
- package/lib/module/react/sprites/GameSprite.js.map +1 -0
- package/lib/module/react/sprites/GameWorld2D.js +44 -0
- package/lib/module/react/sprites/GameWorld2D.js.map +1 -0
- package/lib/module/react/sprites/Sprite.js +147 -0
- package/lib/module/react/sprites/Sprite.js.map +1 -0
- package/lib/module/react/sprites/SpriteBatch.js +173 -0
- package/lib/module/react/sprites/SpriteBatch.js.map +1 -0
- package/lib/module/react/sprites/spriteBatchPolicy.js +25 -0
- package/lib/module/react/sprites/spriteBatchPolicy.js.map +1 -0
- package/lib/module/react/sprites/spriteTransform.js +135 -0
- package/lib/module/react/sprites/spriteTransform.js.map +1 -0
- package/lib/module/react/viewportBinding.js +101 -0
- package/lib/module/react/viewportBinding.js.map +1 -0
- package/lib/module/react.js +13 -0
- package/lib/module/react.js.map +1 -0
- package/lib/module/scene/defineScene.js +29 -0
- package/lib/module/scene/defineScene.js.map +1 -0
- package/lib/module/scene/types.js +4 -0
- package/lib/module/scene/types.js.map +1 -0
- package/lib/module/sprites/sampleSpriteClip.js +50 -0
- package/lib/module/sprites/sampleSpriteClip.js.map +1 -0
- package/lib/module/sprites/spriteAnimationState.js +165 -0
- package/lib/module/sprites/spriteAnimationState.js.map +1 -0
- package/lib/module/testing.js +57 -0
- package/lib/module/testing.js.map +1 -0
- package/lib/module/viewport2d/index.js +4 -0
- package/lib/module/viewport2d/index.js.map +1 -0
- package/lib/module/viewport2d/math.js +129 -0
- package/lib/module/viewport2d/math.js.map +1 -0
- package/lib/module/viewport2d/types.js +2 -0
- package/lib/module/viewport2d/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/assets/defineAssets.d.ts +20 -0
- package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -0
- package/lib/typescript/src/assets/errors.d.ts +20 -0
- package/lib/typescript/src/assets/errors.d.ts.map +1 -0
- package/lib/typescript/src/assets/types.d.ts +138 -0
- package/lib/typescript/src/assets/types.d.ts.map +1 -0
- package/lib/typescript/src/assets/validation.d.ts +15 -0
- package/lib/typescript/src/assets/validation.d.ts.map +1 -0
- package/lib/typescript/src/core/frameDriver.d.ts +12 -0
- package/lib/typescript/src/core/frameDriver.d.ts.map +1 -0
- package/lib/typescript/src/core/input/createInputBuffer.d.ts +12 -0
- package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -0
- package/lib/typescript/src/core/input/types.d.ts +64 -0
- package/lib/typescript/src/core/input/types.d.ts.map +1 -0
- package/lib/typescript/src/core/session/createGameSession.d.ts +18 -0
- package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -0
- package/lib/typescript/src/core/session/deepFreeze.d.ts +27 -0
- package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -0
- package/lib/typescript/src/core/session/diagnostics.d.ts +36 -0
- package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -0
- package/lib/typescript/src/core/session/types.d.ts +104 -0
- package/lib/typescript/src/core/session/types.d.ts.map +1 -0
- package/lib/typescript/src/definition/defineGame.d.ts +66 -0
- package/lib/typescript/src/definition/defineGame.d.ts.map +1 -0
- package/lib/typescript/src/definition/types.d.ts +56 -0
- package/lib/typescript/src/definition/types.d.ts.map +1 -0
- package/lib/typescript/src/geometry/types.d.ts +8 -0
- package/lib/typescript/src/geometry/types.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +18 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/react/GamePointerInput.d.ts +37 -0
- package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -0
- package/lib/typescript/src/react/GameView.d.ts +61 -0
- package/lib/typescript/src/react/GameView.d.ts.map +1 -0
- package/lib/typescript/src/react/alphaClock.d.ts +29 -0
- package/lib/typescript/src/react/alphaClock.d.ts.map +1 -0
- package/lib/typescript/src/react/assets/createGameAssetStore.d.ts +33 -0
- package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -0
- package/lib/typescript/src/react/assets/decodeSkiaImage.d.ts +12 -0
- package/lib/typescript/src/react/assets/decodeSkiaImage.d.ts.map +1 -0
- package/lib/typescript/src/react/assets/errors.d.ts +8 -0
- package/lib/typescript/src/react/assets/errors.d.ts.map +1 -0
- package/lib/typescript/src/react/assets/useGameAssets.d.ts +35 -0
- package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -0
- package/lib/typescript/src/react/bindAppLifecycle.d.ts +32 -0
- package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -0
- package/lib/typescript/src/react/bindGameSession.d.ts +14 -0
- package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -0
- package/lib/typescript/src/react/gestureLifecycle.d.ts +37 -0
- package/lib/typescript/src/react/gestureLifecycle.d.ts.map +1 -0
- package/lib/typescript/src/react/instrumentation.d.ts +47 -0
- package/lib/typescript/src/react/instrumentation.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerBinding.d.ts +104 -0
- package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerCoalescer.d.ts +106 -0
- package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -0
- package/lib/typescript/src/react/pointerContainment.d.ts +12 -0
- package/lib/typescript/src/react/pointerContainment.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/GameSprite.d.ts +75 -0
- package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +29 -0
- package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/Sprite.d.ts +43 -0
- package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +41 -0
- package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteBatchPolicy.d.ts +10 -0
- package/lib/typescript/src/react/sprites/spriteBatchPolicy.d.ts.map +1 -0
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts +86 -0
- package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -0
- package/lib/typescript/src/react/viewportBinding.d.ts +42 -0
- package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -0
- package/lib/typescript/src/react.d.ts +20 -0
- package/lib/typescript/src/react.d.ts.map +1 -0
- package/lib/typescript/src/scene/defineScene.d.ts +26 -0
- package/lib/typescript/src/scene/defineScene.d.ts.map +1 -0
- package/lib/typescript/src/scene/types.d.ts +71 -0
- package/lib/typescript/src/scene/types.d.ts.map +1 -0
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +24 -0
- package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -0
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts +45 -0
- package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -0
- package/lib/typescript/src/testing.d.ts +28 -0
- package/lib/typescript/src/testing.d.ts.map +1 -0
- package/lib/typescript/src/viewport2d/index.d.ts +3 -0
- package/lib/typescript/src/viewport2d/index.d.ts.map +1 -0
- package/lib/typescript/src/viewport2d/math.d.ts +25 -0
- package/lib/typescript/src/viewport2d/math.d.ts.map +1 -0
- package/lib/typescript/src/viewport2d/types.d.ts +59 -0
- package/lib/typescript/src/viewport2d/types.d.ts.map +1 -0
- package/package.json +120 -0
- package/src/assets/defineAssets.ts +62 -0
- package/src/assets/errors.ts +64 -0
- package/src/assets/types.ts +164 -0
- package/src/assets/validation.ts +158 -0
- package/src/core/frameDriver.ts +31 -0
- package/src/core/input/createInputBuffer.ts +337 -0
- package/src/core/input/types.ts +67 -0
- package/src/core/session/createGameSession.ts +652 -0
- package/src/core/session/deepFreeze.ts +158 -0
- package/src/core/session/diagnostics.ts +35 -0
- package/src/core/session/types.ts +122 -0
- package/src/definition/defineGame.ts +94 -0
- package/src/definition/types.ts +67 -0
- package/src/geometry/types.ts +7 -0
- package/src/index.ts +84 -0
- package/src/react/GamePointerInput.tsx +478 -0
- package/src/react/GameView.tsx +317 -0
- package/src/react/alphaClock.ts +59 -0
- package/src/react/assets/createGameAssetStore.ts +459 -0
- package/src/react/assets/decodeSkiaImage.ts +64 -0
- package/src/react/assets/errors.ts +7 -0
- package/src/react/assets/useGameAssets.ts +171 -0
- package/src/react/bindAppLifecycle.ts +79 -0
- package/src/react/bindGameSession.ts +41 -0
- package/src/react/gestureLifecycle.ts +73 -0
- package/src/react/instrumentation.ts +54 -0
- package/src/react/pointerBinding.ts +226 -0
- package/src/react/pointerCoalescer.ts +234 -0
- package/src/react/pointerContainment.ts +23 -0
- package/src/react/sprites/GameSprite.tsx +192 -0
- package/src/react/sprites/GameWorld2D.tsx +46 -0
- package/src/react/sprites/Sprite.tsx +194 -0
- package/src/react/sprites/SpriteBatch.tsx +219 -0
- package/src/react/sprites/spriteBatchPolicy.ts +21 -0
- package/src/react/sprites/spriteTransform.ts +163 -0
- package/src/react/viewportBinding.ts +104 -0
- package/src/react.ts +37 -0
- package/src/scene/defineScene.ts +38 -0
- package/src/scene/types.ts +79 -0
- package/src/sprites/sampleSpriteClip.ts +51 -0
- package/src/sprites/spriteAnimationState.ts +176 -0
- package/src/testing.ts +61 -0
- package/src/viewport2d/index.ts +7 -0
- package/src/viewport2d/math.ts +134 -0
- package/src/viewport2d/types.ts +63 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Trusted deep-freeze cache (T3).
|
|
5
|
+
*
|
|
6
|
+
* Each session owns one freezer. A subtree that has been completely frozen
|
|
7
|
+
* once is recorded in a `WeakSet` and never re-traversed: structurally
|
|
8
|
+
* shared snapshot subtrees (the common case: unchanged bricks, entities,
|
|
9
|
+
* or config objects reused by reference across ticks) are walked exactly
|
|
10
|
+
* once for the lifetime of the session.
|
|
11
|
+
*
|
|
12
|
+
* Correctness rules:
|
|
13
|
+
* - A node is promoted into the trusted set **only after** its whole
|
|
14
|
+
* subtree finished freezing. A child getter that throws mid-traversal
|
|
15
|
+
* leaves every ancestor untrusted, so a later snapshot re-walks it.
|
|
16
|
+
* - Cycle detection uses a separate per-traversal `visiting` set, never the
|
|
17
|
+
* trusted set, so cycles freeze exactly once without infinite recursion.
|
|
18
|
+
* - `Object.isFrozen` is never used as a skip test: an externally
|
|
19
|
+
* shallow-frozen object can contain mutable children and must still be
|
|
20
|
+
* recursed into.
|
|
21
|
+
* - Freezing is never dev-only: the public API promise of deeply immutable
|
|
22
|
+
* snapshots holds in every build.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/** Whether a string is a canonical array index (`0 <= i < 2^32 - 1`). */
|
|
26
|
+
/** Decimal digit count of a non-negative integer (0 <= value < 1e11). */
|
|
27
|
+
function digitLength(value) {
|
|
28
|
+
'worklet';
|
|
29
|
+
|
|
30
|
+
if (value < 10) {
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
if (value < 100) {
|
|
34
|
+
return 2;
|
|
35
|
+
}
|
|
36
|
+
if (value < 1_000) {
|
|
37
|
+
return 3;
|
|
38
|
+
}
|
|
39
|
+
if (value < 10_000) {
|
|
40
|
+
return 4;
|
|
41
|
+
}
|
|
42
|
+
if (value < 100_000) {
|
|
43
|
+
return 5;
|
|
44
|
+
}
|
|
45
|
+
if (value < 1_000_000) {
|
|
46
|
+
return 6;
|
|
47
|
+
}
|
|
48
|
+
if (value < 10_000_000) {
|
|
49
|
+
return 7;
|
|
50
|
+
}
|
|
51
|
+
if (value < 100_000_000) {
|
|
52
|
+
return 8;
|
|
53
|
+
}
|
|
54
|
+
if (value < 1_000_000_000) {
|
|
55
|
+
return 9;
|
|
56
|
+
}
|
|
57
|
+
return 10;
|
|
58
|
+
}
|
|
59
|
+
function isArrayIndexKey(key) {
|
|
60
|
+
'worklet';
|
|
61
|
+
|
|
62
|
+
// A canonical array index is the exact decimal form of an integer in
|
|
63
|
+
// [0, 2^32 - 2]; numeric-looking strings such as '1e0', '01', or
|
|
64
|
+
// '4294967295' are ordinary properties, not indices. The check is
|
|
65
|
+
// allocation-free: a digit scan plus the leading-zero rule.
|
|
66
|
+
const length = key.length;
|
|
67
|
+
if (length === 0 || length > 10) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (length > 1 && key.charCodeAt(0) === 48 /* '0' */) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
let value = 0;
|
|
74
|
+
for (let index = 0; index < length; index += 1) {
|
|
75
|
+
const code = key.charCodeAt(index);
|
|
76
|
+
if (code < 48 /* '0' */ || code > 57 /* '9' */) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
value = value * 10 + (code - 48);
|
|
80
|
+
}
|
|
81
|
+
return value <= 0xffffffff - 1;
|
|
82
|
+
}
|
|
83
|
+
export function createDeepFreeze() {
|
|
84
|
+
const trusted = new WeakSet();
|
|
85
|
+
return function deepFreeze(value) {
|
|
86
|
+
if (typeof value !== 'object' || value === null) {
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
const visiting = new WeakSet();
|
|
90
|
+
const freeze = node => {
|
|
91
|
+
if (typeof node !== 'object' || node === null) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (trusted.has(node) || visiting.has(node)) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
visiting.add(node);
|
|
98
|
+
if (Array.isArray(node)) {
|
|
99
|
+
// Index fast path: avoids materialising an index-key array per array.
|
|
100
|
+
for (let index = 0; index < node.length; index += 1) {
|
|
101
|
+
freeze(node[index]);
|
|
102
|
+
}
|
|
103
|
+
// F5: legal JavaScript arrays may also carry values on non-index
|
|
104
|
+
// string keys and symbol keys. Only own keys are reachable snapshot
|
|
105
|
+
// values, so the scan uses getOwnPropertyNames (own string keys,
|
|
106
|
+
// enumerable and non-enumerable, no inherited keys) plus
|
|
107
|
+
// getOwnPropertySymbols — `for-in` was rejected because it yields
|
|
108
|
+
// inherited enumerable keys and skips non-enumerable own keys. The
|
|
109
|
+
// name array allocation is the documented cost of full correctness;
|
|
110
|
+
// canonical indices and `length` are skipped with an arithmetic
|
|
111
|
+
// check, and every remaining own value is frozen before the array is
|
|
112
|
+
// promoted into the trusted set.
|
|
113
|
+
const names = Object.getOwnPropertyNames(node);
|
|
114
|
+
// getOwnPropertyNames yields canonical indices first, in ascending
|
|
115
|
+
// order, then 'length', then any extra string keys in insertion
|
|
116
|
+
// order — so a dense array's indices take one Number() compare each
|
|
117
|
+
// and only extras reach the canonical-form check.
|
|
118
|
+
let expectedIndex = 0;
|
|
119
|
+
for (let index = 0; index < names.length; index += 1) {
|
|
120
|
+
const name = names[index];
|
|
121
|
+
if (name === undefined || name === 'length') {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
// Fast discriminator: a canonical ascending index must match the
|
|
125
|
+
// expected value AND carry its exact decimal length — '01', '1e0',
|
|
126
|
+
// or '4294967295' cannot pass the length guard and fall through
|
|
127
|
+
// to the canonical check.
|
|
128
|
+
if (Number(name) === expectedIndex && name.length === digitLength(expectedIndex)) {
|
|
129
|
+
expectedIndex += 1;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (!isArrayIndexKey(name)) {
|
|
133
|
+
freeze(node[name]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const symbols = Object.getOwnPropertySymbols(node);
|
|
137
|
+
for (let index = 0; index < symbols.length; index += 1) {
|
|
138
|
+
const symbol = symbols[index];
|
|
139
|
+
if (symbol !== undefined) {
|
|
140
|
+
freeze(node[symbol]);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
} else {
|
|
144
|
+
for (const key of Reflect.ownKeys(node)) {
|
|
145
|
+
freeze(node[key]);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
Object.freeze(node);
|
|
149
|
+
trusted.add(node);
|
|
150
|
+
};
|
|
151
|
+
freeze(value);
|
|
152
|
+
return value;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=deepFreeze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["digitLength","value","isArrayIndexKey","key","length","charCodeAt","index","code","createDeepFreeze","trusted","WeakSet","deepFreeze","visiting","freeze","node","has","add","Array","isArray","names","Object","getOwnPropertyNames","expectedIndex","name","undefined","Number","symbols","getOwnPropertySymbols","symbol","Reflect","ownKeys"],"sourceRoot":"../../../../src","sources":["core/session/deepFreeze.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["core/session/diagnostics.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** Recursively readonly view of renderer snapshot data. */
|
|
4
|
+
|
|
5
|
+
/** Lifecycle states of a headless game session. */
|
|
6
|
+
|
|
7
|
+
/** One renderer-neutral simulation commit produced by a game session. */
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A simulation commit discriminated by its scene name.
|
|
11
|
+
*
|
|
12
|
+
* Narrowing on `frame.scene` narrows both `previous` and `current` to the
|
|
13
|
+
* snapshot type of that scene. A transition commits a hard cut where both
|
|
14
|
+
* snapshots come from the new scene; frames never interpolate between two
|
|
15
|
+
* scene types.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** A commit frame plus a presentation fraction computed on demand. */
|
|
19
|
+
|
|
20
|
+
/** An idempotently removable render-frame subscription. */
|
|
21
|
+
|
|
22
|
+
/** A closure-backed, headless running instance of one game definition. */
|
|
23
|
+
|
|
24
|
+
/** Error thrown when live work is requested from a disposed session. */
|
|
25
|
+
export class GameSessionDisposedError extends Error {
|
|
26
|
+
name = 'GameSessionDisposedError';
|
|
27
|
+
constructor() {
|
|
28
|
+
super('This GameSession has been disposed');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Error thrown for lifecycle violations: conflicting transition requests,
|
|
34
|
+
* transition controllers used outside their update, unknown runtime scene
|
|
35
|
+
* names, and pending transition conflicts.
|
|
36
|
+
*/
|
|
37
|
+
export class GameSessionLifecycleError extends Error {
|
|
38
|
+
name = 'GameSessionLifecycleError';
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["GameSessionDisposedError","Error","name","constructor","GameSessionLifecycleError","message"],"sourceRoot":"../../../../src","sources":["core/session/types.ts"],"mappings":";;AAKA;;AASA;;AAGA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA;;AAMA;;AAMA;;AAwCA;AACA,OAAO,MAAMA,wBAAwB,SAASC,KAAK,CAAC;EAChCC,IAAI,GAAG,0BAA0B;EAEnDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,oCAAoC,CAAC;EAC7C;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,SAASH,KAAK,CAAC;EACjCC,IAAI,GAAG,2BAA2B;EAEpDC,WAAWA,CAACE,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Declare a game.
|
|
5
|
+
*
|
|
6
|
+
* `defineGame` is the entry point of the provisional GameKit API. It
|
|
7
|
+
* validates the definition at the type level — scene names are inferred so
|
|
8
|
+
* `initialScene` must be one of the keys of `scenes`, every scene action must
|
|
9
|
+
* exist in the game input map, and every declared transition target must be a
|
|
10
|
+
* declared scene — and preserves and returns the supplied definition.
|
|
11
|
+
*
|
|
12
|
+
* This function creates no runtime state: it does not start a scheduler,
|
|
13
|
+
* allocate a session, load assets, or register input. Pass the definition to
|
|
14
|
+
* `createGameSession` to create a live instance. The shape is provisional
|
|
15
|
+
* until reference games validate it.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const game = defineGame({
|
|
20
|
+
* viewport: {
|
|
21
|
+
* logicalSize: { width: 390, height: 844 },
|
|
22
|
+
* mode: 'fit',
|
|
23
|
+
* },
|
|
24
|
+
* assets: [],
|
|
25
|
+
* input: { primary: { type: 'pointer' } },
|
|
26
|
+
* scenes: {
|
|
27
|
+
* ready: defineScene({
|
|
28
|
+
* actions: ['primary'],
|
|
29
|
+
* transitions: ['play'],
|
|
30
|
+
* create: () => ({ ready: true }),
|
|
31
|
+
* update: ({ state, input, transition }) => {
|
|
32
|
+
* if (input.pointer('primary').pressed) {
|
|
33
|
+
* transition.setScene('play');
|
|
34
|
+
* }
|
|
35
|
+
* return state;
|
|
36
|
+
* },
|
|
37
|
+
* snapshot: ({ state }) => state,
|
|
38
|
+
* }),
|
|
39
|
+
* play: defineScene({
|
|
40
|
+
* actions: [],
|
|
41
|
+
* create: () => ({ x: 0 }),
|
|
42
|
+
* update: ({ state }) => ({ x: state.x + 1 }),
|
|
43
|
+
* snapshot: ({ state }) => ({ x: state.x }),
|
|
44
|
+
* }),
|
|
45
|
+
* },
|
|
46
|
+
* initialScene: 'ready',
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export function defineGame(definition) {
|
|
51
|
+
// The viewport config is part of the public session surface; freeze it so a
|
|
52
|
+
// caller cannot mutate a live game's coordinate authority.
|
|
53
|
+
Object.freeze(definition.viewport.logicalSize);
|
|
54
|
+
Object.freeze(definition.viewport);
|
|
55
|
+
return definition;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=defineGame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["defineGame","definition","Object","freeze","viewport","logicalSize"],"sourceRoot":"../../../src","sources":["definition/defineGame.ts"],"mappings":";;AA+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,UAAUA,CAMxBC,UAEmC,EACsB;EACzD;EACA;EACAC,MAAM,CAACC,MAAM,CAACF,UAAU,CAACG,QAAQ,CAACC,WAAW,CAAC;EAC9CH,MAAM,CAACC,MAAM,CAACF,UAAU,CAACG,QAAQ,CAAC;EAClC,OAAOH,UAAU;AACnB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["definition/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["geometry/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { createGameSession } from "./core/session/createGameSession.js";
|
|
4
|
+
export { GameSessionDisposedError, GameSessionLifecycleError } from "./core/session/types.js";
|
|
5
|
+
export { advanceSpriteAnimation, pauseSpriteAnimation, playSpriteAnimation, resetSpriteAnimation, resumeSpriteAnimation, setSpriteAnimationSpeed, startSpriteAnimation } from "./sprites/spriteAnimationState.js";
|
|
6
|
+
export { sampleSpriteClipFrame, sampleSpriteClipFrameName, spriteClipDurationMs } from "./sprites/sampleSpriteClip.js";
|
|
7
|
+
export { defineAssets, image, spriteSheet } from "./assets/defineAssets.js";
|
|
8
|
+
export { GameAssetError } from "./assets/errors.js";
|
|
9
|
+
export { defineGame } from "./definition/defineGame.js";
|
|
10
|
+
export { defineScene } from "./scene/defineScene.js";
|
|
11
|
+
export { containsSurfacePoint, resolveViewport2D, surfaceToWorld, worldToSurface } from "./viewport2d/index.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createGameSession","GameSessionDisposedError","GameSessionLifecycleError","advanceSpriteAnimation","pauseSpriteAnimation","playSpriteAnimation","resetSpriteAnimation","resumeSpriteAnimation","setSpriteAnimationSpeed","startSpriteAnimation","sampleSpriteClipFrame","sampleSpriteClipFrameName","spriteClipDurationMs","defineAssets","image","spriteSheet","GameAssetError","defineGame","defineScene","containsSurfacePoint","resolveViewport2D","surfaceToWorld","worldToSurface"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,iBAAiB,QAAQ,qCAAkC;AACpE,SAASC,wBAAwB,EAAEC,yBAAyB,QAAQ,yBAAsB;AAe1F,SACEC,sBAAsB,EACtBC,oBAAoB,EACpBC,mBAAmB,EACnBC,oBAAoB,EACpBC,qBAAqB,EACrBC,uBAAuB,EACvBC,oBAAoB,QACf,mCAAgC;AACvC,SACEC,qBAAqB,EACrBC,yBAAyB,EACzBC,oBAAoB,QACf,+BAA4B;AAEnC,SAASC,YAAY,EAAEC,KAAK,EAAEC,WAAW,QAAQ,0BAAuB;AACxE,SAASC,cAAc,QAAQ,oBAAiB;AAmBhD,SAASC,UAAU,QAAQ,4BAAyB;AAWpD,SAASC,WAAW,QAAQ,wBAAqB;AAQjD,SACEC,oBAAoB,EACpBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,QACT,uBAAc","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|