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.
Files changed (231) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +131 -0
  4. package/lib/module/assets/defineAssets.js +48 -0
  5. package/lib/module/assets/defineAssets.js.map +1 -0
  6. package/lib/module/assets/errors.js +38 -0
  7. package/lib/module/assets/errors.js.map +1 -0
  8. package/lib/module/assets/types.js +2 -0
  9. package/lib/module/assets/types.js.map +1 -0
  10. package/lib/module/assets/validation.js +99 -0
  11. package/lib/module/assets/validation.js.map +1 -0
  12. package/lib/module/core/frameDriver.js +20 -0
  13. package/lib/module/core/frameDriver.js.map +1 -0
  14. package/lib/module/core/input/createInputBuffer.js +296 -0
  15. package/lib/module/core/input/createInputBuffer.js.map +1 -0
  16. package/lib/module/core/input/types.js +4 -0
  17. package/lib/module/core/input/types.js.map +1 -0
  18. package/lib/module/core/session/createGameSession.js +554 -0
  19. package/lib/module/core/session/createGameSession.js.map +1 -0
  20. package/lib/module/core/session/deepFreeze.js +155 -0
  21. package/lib/module/core/session/deepFreeze.js.map +1 -0
  22. package/lib/module/core/session/diagnostics.js +2 -0
  23. package/lib/module/core/session/diagnostics.js.map +1 -0
  24. package/lib/module/core/session/types.js +43 -0
  25. package/lib/module/core/session/types.js.map +1 -0
  26. package/lib/module/definition/defineGame.js +57 -0
  27. package/lib/module/definition/defineGame.js.map +1 -0
  28. package/lib/module/definition/types.js +4 -0
  29. package/lib/module/definition/types.js.map +1 -0
  30. package/lib/module/geometry/types.js +2 -0
  31. package/lib/module/geometry/types.js.map +1 -0
  32. package/lib/module/index.js +12 -0
  33. package/lib/module/index.js.map +1 -0
  34. package/lib/module/package.json +1 -0
  35. package/lib/module/react/GamePointerInput.js +385 -0
  36. package/lib/module/react/GamePointerInput.js.map +1 -0
  37. package/lib/module/react/GameView.js +223 -0
  38. package/lib/module/react/GameView.js.map +1 -0
  39. package/lib/module/react/alphaClock.js +42 -0
  40. package/lib/module/react/alphaClock.js.map +1 -0
  41. package/lib/module/react/assets/createGameAssetStore.js +358 -0
  42. package/lib/module/react/assets/createGameAssetStore.js.map +1 -0
  43. package/lib/module/react/assets/decodeSkiaImage.js +54 -0
  44. package/lib/module/react/assets/decodeSkiaImage.js.map +1 -0
  45. package/lib/module/react/assets/errors.js +10 -0
  46. package/lib/module/react/assets/errors.js.map +1 -0
  47. package/lib/module/react/assets/useGameAssets.js +160 -0
  48. package/lib/module/react/assets/useGameAssets.js.map +1 -0
  49. package/lib/module/react/bindAppLifecycle.js +58 -0
  50. package/lib/module/react/bindAppLifecycle.js.map +1 -0
  51. package/lib/module/react/bindGameSession.js +37 -0
  52. package/lib/module/react/bindGameSession.js.map +1 -0
  53. package/lib/module/react/gestureLifecycle.js +68 -0
  54. package/lib/module/react/gestureLifecycle.js.map +1 -0
  55. package/lib/module/react/instrumentation.js +4 -0
  56. package/lib/module/react/instrumentation.js.map +1 -0
  57. package/lib/module/react/pointerBinding.js +196 -0
  58. package/lib/module/react/pointerBinding.js.map +1 -0
  59. package/lib/module/react/pointerCoalescer.js +224 -0
  60. package/lib/module/react/pointerCoalescer.js.map +1 -0
  61. package/lib/module/react/pointerContainment.js +27 -0
  62. package/lib/module/react/pointerContainment.js.map +1 -0
  63. package/lib/module/react/sprites/GameSprite.js +116 -0
  64. package/lib/module/react/sprites/GameSprite.js.map +1 -0
  65. package/lib/module/react/sprites/GameWorld2D.js +44 -0
  66. package/lib/module/react/sprites/GameWorld2D.js.map +1 -0
  67. package/lib/module/react/sprites/Sprite.js +147 -0
  68. package/lib/module/react/sprites/Sprite.js.map +1 -0
  69. package/lib/module/react/sprites/SpriteBatch.js +173 -0
  70. package/lib/module/react/sprites/SpriteBatch.js.map +1 -0
  71. package/lib/module/react/sprites/spriteBatchPolicy.js +25 -0
  72. package/lib/module/react/sprites/spriteBatchPolicy.js.map +1 -0
  73. package/lib/module/react/sprites/spriteTransform.js +135 -0
  74. package/lib/module/react/sprites/spriteTransform.js.map +1 -0
  75. package/lib/module/react/viewportBinding.js +101 -0
  76. package/lib/module/react/viewportBinding.js.map +1 -0
  77. package/lib/module/react.js +13 -0
  78. package/lib/module/react.js.map +1 -0
  79. package/lib/module/scene/defineScene.js +29 -0
  80. package/lib/module/scene/defineScene.js.map +1 -0
  81. package/lib/module/scene/types.js +4 -0
  82. package/lib/module/scene/types.js.map +1 -0
  83. package/lib/module/sprites/sampleSpriteClip.js +50 -0
  84. package/lib/module/sprites/sampleSpriteClip.js.map +1 -0
  85. package/lib/module/sprites/spriteAnimationState.js +165 -0
  86. package/lib/module/sprites/spriteAnimationState.js.map +1 -0
  87. package/lib/module/testing.js +57 -0
  88. package/lib/module/testing.js.map +1 -0
  89. package/lib/module/viewport2d/index.js +4 -0
  90. package/lib/module/viewport2d/index.js.map +1 -0
  91. package/lib/module/viewport2d/math.js +129 -0
  92. package/lib/module/viewport2d/math.js.map +1 -0
  93. package/lib/module/viewport2d/types.js +2 -0
  94. package/lib/module/viewport2d/types.js.map +1 -0
  95. package/lib/typescript/package.json +1 -0
  96. package/lib/typescript/src/assets/defineAssets.d.ts +20 -0
  97. package/lib/typescript/src/assets/defineAssets.d.ts.map +1 -0
  98. package/lib/typescript/src/assets/errors.d.ts +20 -0
  99. package/lib/typescript/src/assets/errors.d.ts.map +1 -0
  100. package/lib/typescript/src/assets/types.d.ts +138 -0
  101. package/lib/typescript/src/assets/types.d.ts.map +1 -0
  102. package/lib/typescript/src/assets/validation.d.ts +15 -0
  103. package/lib/typescript/src/assets/validation.d.ts.map +1 -0
  104. package/lib/typescript/src/core/frameDriver.d.ts +12 -0
  105. package/lib/typescript/src/core/frameDriver.d.ts.map +1 -0
  106. package/lib/typescript/src/core/input/createInputBuffer.d.ts +12 -0
  107. package/lib/typescript/src/core/input/createInputBuffer.d.ts.map +1 -0
  108. package/lib/typescript/src/core/input/types.d.ts +64 -0
  109. package/lib/typescript/src/core/input/types.d.ts.map +1 -0
  110. package/lib/typescript/src/core/session/createGameSession.d.ts +18 -0
  111. package/lib/typescript/src/core/session/createGameSession.d.ts.map +1 -0
  112. package/lib/typescript/src/core/session/deepFreeze.d.ts +27 -0
  113. package/lib/typescript/src/core/session/deepFreeze.d.ts.map +1 -0
  114. package/lib/typescript/src/core/session/diagnostics.d.ts +36 -0
  115. package/lib/typescript/src/core/session/diagnostics.d.ts.map +1 -0
  116. package/lib/typescript/src/core/session/types.d.ts +104 -0
  117. package/lib/typescript/src/core/session/types.d.ts.map +1 -0
  118. package/lib/typescript/src/definition/defineGame.d.ts +66 -0
  119. package/lib/typescript/src/definition/defineGame.d.ts.map +1 -0
  120. package/lib/typescript/src/definition/types.d.ts +56 -0
  121. package/lib/typescript/src/definition/types.d.ts.map +1 -0
  122. package/lib/typescript/src/geometry/types.d.ts +8 -0
  123. package/lib/typescript/src/geometry/types.d.ts.map +1 -0
  124. package/lib/typescript/src/index.d.ts +18 -0
  125. package/lib/typescript/src/index.d.ts.map +1 -0
  126. package/lib/typescript/src/react/GamePointerInput.d.ts +37 -0
  127. package/lib/typescript/src/react/GamePointerInput.d.ts.map +1 -0
  128. package/lib/typescript/src/react/GameView.d.ts +61 -0
  129. package/lib/typescript/src/react/GameView.d.ts.map +1 -0
  130. package/lib/typescript/src/react/alphaClock.d.ts +29 -0
  131. package/lib/typescript/src/react/alphaClock.d.ts.map +1 -0
  132. package/lib/typescript/src/react/assets/createGameAssetStore.d.ts +33 -0
  133. package/lib/typescript/src/react/assets/createGameAssetStore.d.ts.map +1 -0
  134. package/lib/typescript/src/react/assets/decodeSkiaImage.d.ts +12 -0
  135. package/lib/typescript/src/react/assets/decodeSkiaImage.d.ts.map +1 -0
  136. package/lib/typescript/src/react/assets/errors.d.ts +8 -0
  137. package/lib/typescript/src/react/assets/errors.d.ts.map +1 -0
  138. package/lib/typescript/src/react/assets/useGameAssets.d.ts +35 -0
  139. package/lib/typescript/src/react/assets/useGameAssets.d.ts.map +1 -0
  140. package/lib/typescript/src/react/bindAppLifecycle.d.ts +32 -0
  141. package/lib/typescript/src/react/bindAppLifecycle.d.ts.map +1 -0
  142. package/lib/typescript/src/react/bindGameSession.d.ts +14 -0
  143. package/lib/typescript/src/react/bindGameSession.d.ts.map +1 -0
  144. package/lib/typescript/src/react/gestureLifecycle.d.ts +37 -0
  145. package/lib/typescript/src/react/gestureLifecycle.d.ts.map +1 -0
  146. package/lib/typescript/src/react/instrumentation.d.ts +47 -0
  147. package/lib/typescript/src/react/instrumentation.d.ts.map +1 -0
  148. package/lib/typescript/src/react/pointerBinding.d.ts +104 -0
  149. package/lib/typescript/src/react/pointerBinding.d.ts.map +1 -0
  150. package/lib/typescript/src/react/pointerCoalescer.d.ts +106 -0
  151. package/lib/typescript/src/react/pointerCoalescer.d.ts.map +1 -0
  152. package/lib/typescript/src/react/pointerContainment.d.ts +12 -0
  153. package/lib/typescript/src/react/pointerContainment.d.ts.map +1 -0
  154. package/lib/typescript/src/react/sprites/GameSprite.d.ts +75 -0
  155. package/lib/typescript/src/react/sprites/GameSprite.d.ts.map +1 -0
  156. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts +29 -0
  157. package/lib/typescript/src/react/sprites/GameWorld2D.d.ts.map +1 -0
  158. package/lib/typescript/src/react/sprites/Sprite.d.ts +43 -0
  159. package/lib/typescript/src/react/sprites/Sprite.d.ts.map +1 -0
  160. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts +41 -0
  161. package/lib/typescript/src/react/sprites/SpriteBatch.d.ts.map +1 -0
  162. package/lib/typescript/src/react/sprites/spriteBatchPolicy.d.ts +10 -0
  163. package/lib/typescript/src/react/sprites/spriteBatchPolicy.d.ts.map +1 -0
  164. package/lib/typescript/src/react/sprites/spriteTransform.d.ts +86 -0
  165. package/lib/typescript/src/react/sprites/spriteTransform.d.ts.map +1 -0
  166. package/lib/typescript/src/react/viewportBinding.d.ts +42 -0
  167. package/lib/typescript/src/react/viewportBinding.d.ts.map +1 -0
  168. package/lib/typescript/src/react.d.ts +20 -0
  169. package/lib/typescript/src/react.d.ts.map +1 -0
  170. package/lib/typescript/src/scene/defineScene.d.ts +26 -0
  171. package/lib/typescript/src/scene/defineScene.d.ts.map +1 -0
  172. package/lib/typescript/src/scene/types.d.ts +71 -0
  173. package/lib/typescript/src/scene/types.d.ts.map +1 -0
  174. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts +24 -0
  175. package/lib/typescript/src/sprites/sampleSpriteClip.d.ts.map +1 -0
  176. package/lib/typescript/src/sprites/spriteAnimationState.d.ts +45 -0
  177. package/lib/typescript/src/sprites/spriteAnimationState.d.ts.map +1 -0
  178. package/lib/typescript/src/testing.d.ts +28 -0
  179. package/lib/typescript/src/testing.d.ts.map +1 -0
  180. package/lib/typescript/src/viewport2d/index.d.ts +3 -0
  181. package/lib/typescript/src/viewport2d/index.d.ts.map +1 -0
  182. package/lib/typescript/src/viewport2d/math.d.ts +25 -0
  183. package/lib/typescript/src/viewport2d/math.d.ts.map +1 -0
  184. package/lib/typescript/src/viewport2d/types.d.ts +59 -0
  185. package/lib/typescript/src/viewport2d/types.d.ts.map +1 -0
  186. package/package.json +120 -0
  187. package/src/assets/defineAssets.ts +62 -0
  188. package/src/assets/errors.ts +64 -0
  189. package/src/assets/types.ts +164 -0
  190. package/src/assets/validation.ts +158 -0
  191. package/src/core/frameDriver.ts +31 -0
  192. package/src/core/input/createInputBuffer.ts +337 -0
  193. package/src/core/input/types.ts +67 -0
  194. package/src/core/session/createGameSession.ts +652 -0
  195. package/src/core/session/deepFreeze.ts +158 -0
  196. package/src/core/session/diagnostics.ts +35 -0
  197. package/src/core/session/types.ts +122 -0
  198. package/src/definition/defineGame.ts +94 -0
  199. package/src/definition/types.ts +67 -0
  200. package/src/geometry/types.ts +7 -0
  201. package/src/index.ts +84 -0
  202. package/src/react/GamePointerInput.tsx +478 -0
  203. package/src/react/GameView.tsx +317 -0
  204. package/src/react/alphaClock.ts +59 -0
  205. package/src/react/assets/createGameAssetStore.ts +459 -0
  206. package/src/react/assets/decodeSkiaImage.ts +64 -0
  207. package/src/react/assets/errors.ts +7 -0
  208. package/src/react/assets/useGameAssets.ts +171 -0
  209. package/src/react/bindAppLifecycle.ts +79 -0
  210. package/src/react/bindGameSession.ts +41 -0
  211. package/src/react/gestureLifecycle.ts +73 -0
  212. package/src/react/instrumentation.ts +54 -0
  213. package/src/react/pointerBinding.ts +226 -0
  214. package/src/react/pointerCoalescer.ts +234 -0
  215. package/src/react/pointerContainment.ts +23 -0
  216. package/src/react/sprites/GameSprite.tsx +192 -0
  217. package/src/react/sprites/GameWorld2D.tsx +46 -0
  218. package/src/react/sprites/Sprite.tsx +194 -0
  219. package/src/react/sprites/SpriteBatch.tsx +219 -0
  220. package/src/react/sprites/spriteBatchPolicy.ts +21 -0
  221. package/src/react/sprites/spriteTransform.ts +163 -0
  222. package/src/react/viewportBinding.ts +104 -0
  223. package/src/react.ts +37 -0
  224. package/src/scene/defineScene.ts +38 -0
  225. package/src/scene/types.ts +79 -0
  226. package/src/sprites/sampleSpriteClip.ts +51 -0
  227. package/src/sprites/spriteAnimationState.ts +176 -0
  228. package/src/testing.ts +61 -0
  229. package/src/viewport2d/index.ts +7 -0
  230. package/src/viewport2d/math.ts +134 -0
  231. 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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=diagnostics.js.map
@@ -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,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["definition/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -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"}