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,296 @@
1
+ "use strict";
2
+
3
+ function freezePoint(x, y) {
4
+ return Object.freeze({
5
+ x,
6
+ y
7
+ });
8
+ }
9
+ function assertFinitePointerId(pointerId) {
10
+ if (!Number.isFinite(pointerId)) {
11
+ throw new TypeError(`Pointer id must be finite (got ${pointerId})`);
12
+ }
13
+ }
14
+ function assertFinitePosition(position) {
15
+ if (!Number.isFinite(position.x) || !Number.isFinite(position.y)) {
16
+ throw new TypeError(`Pointer position must be finite (got ${position.x}, ${position.y})`);
17
+ }
18
+ }
19
+ export function createInputBuffer(input, assertLive) {
20
+ const states = new Map();
21
+ // F1: monotonic count of accepted input events. The lab associates a commit
22
+ // with the inputs its sampled step actually consumed via this counter.
23
+ let acceptedCount = 0;
24
+ for (const [action, actionConfig] of Object.entries(input)) {
25
+ if (actionConfig.type === 'pointer') {
26
+ states.set(action, {
27
+ kind: 'pointer',
28
+ ownsSlot: false,
29
+ active: false,
30
+ pressed: false,
31
+ released: false,
32
+ cancelled: false,
33
+ pointerId: undefined,
34
+ position: undefined,
35
+ delta: {
36
+ x: 0,
37
+ y: 0
38
+ },
39
+ pendingBegin: undefined
40
+ });
41
+ } else {
42
+ states.set(action, {
43
+ kind: 'button',
44
+ held: false,
45
+ pressed: false,
46
+ released: false,
47
+ cancelled: false
48
+ });
49
+ }
50
+ }
51
+ const getState = action => {
52
+ const state = states.get(action);
53
+ if (!state) {
54
+ throw new Error(`Unknown input action: ${action}`);
55
+ }
56
+ return state;
57
+ };
58
+ const getButton = action => {
59
+ const state = getState(action);
60
+ if (state.kind !== 'button') {
61
+ throw new Error(`Input action "${action}" is a pointer action, not a button`);
62
+ }
63
+ return state;
64
+ };
65
+ const getPointer = action => {
66
+ const state = getState(action);
67
+ if (state.kind !== 'pointer') {
68
+ throw new Error(`Input action "${action}" is a button action, not a pointer`);
69
+ }
70
+ return state;
71
+ };
72
+ const controller = Object.freeze({
73
+ get acceptedCount() {
74
+ return acceptedCount;
75
+ },
76
+ press(action) {
77
+ assertLive();
78
+ acceptedCount += 1;
79
+ const state = getButton(action);
80
+ state.pressed ||= !state.held;
81
+ state.held = true;
82
+ },
83
+ release(action) {
84
+ assertLive();
85
+ acceptedCount += 1;
86
+ const state = getButton(action);
87
+ state.released ||= state.held;
88
+ state.held = false;
89
+ },
90
+ begin(action, pointerId, position) {
91
+ assertLive();
92
+ assertFinitePointerId(pointerId);
93
+ assertFinitePosition(position);
94
+ const state = getPointer(action);
95
+ if (state.ownsSlot && state.active) {
96
+ return; // Secondary pointer: the first pointer owns the action slot.
97
+ }
98
+ if (state.ownsSlot && !state.active) {
99
+ // The current owner released but the terminal edge has not been
100
+ // sampled yet. Queue the first new pointer and transfer after the
101
+ // release/cancel frame.
102
+ if (state.pendingBegin === undefined) {
103
+ state.pendingBegin = {
104
+ pointerId,
105
+ position: freezePoint(position.x, position.y)
106
+ };
107
+ }
108
+ acceptedCount += 1;
109
+ return;
110
+ }
111
+ acceptedCount += 1;
112
+ state.ownsSlot = true;
113
+ state.active = true;
114
+ state.pressed = true;
115
+ state.pointerId = pointerId;
116
+ state.position = freezePoint(position.x, position.y);
117
+ state.delta.x = 0;
118
+ state.delta.y = 0;
119
+ },
120
+ move(action, pointerId, position) {
121
+ assertLive();
122
+ assertFinitePointerId(pointerId);
123
+ assertFinitePosition(position);
124
+ const state = getPointer(action);
125
+ if (!state.ownsSlot || !state.active || state.pointerId !== pointerId) {
126
+ return;
127
+ }
128
+ acceptedCount += 1;
129
+ if (state.position !== undefined) {
130
+ state.delta.x += position.x - state.position.x;
131
+ state.delta.y += position.y - state.position.y;
132
+ }
133
+ state.position = freezePoint(position.x, position.y);
134
+ },
135
+ end(action, pointerId) {
136
+ assertLive();
137
+ assertFinitePointerId(pointerId);
138
+ const state = getPointer(action);
139
+ if (!state.ownsSlot || state.pointerId !== pointerId) {
140
+ return;
141
+ }
142
+ acceptedCount += 1;
143
+ // The slot stays owned until the release edge is sampled so a fast
144
+ // end -> begin between ticks cannot corrupt the terminal frame.
145
+ state.active = false;
146
+ state.released = true;
147
+ },
148
+ cancel(action) {
149
+ assertLive();
150
+ const state = getState(action);
151
+ if (state.kind === 'button') {
152
+ acceptedCount += 1;
153
+ state.cancelled = true;
154
+ state.released ||= state.held;
155
+ state.held = false;
156
+ return;
157
+ }
158
+ if (!state.ownsSlot) {
159
+ return;
160
+ }
161
+ acceptedCount += 1;
162
+ // Same slot semantics as `end`.
163
+ state.active = false;
164
+ state.cancelled = true;
165
+ }
166
+ });
167
+ const samplePointer = state => {
168
+ const sampled = Object.freeze({
169
+ active: state.active,
170
+ pressed: state.pressed,
171
+ released: state.released,
172
+ cancelled: state.cancelled,
173
+ ...(state.pointerId !== undefined ? {
174
+ pointerId: state.pointerId
175
+ } : {}),
176
+ ...(state.position !== undefined ? {
177
+ position: state.position
178
+ } : {}),
179
+ delta: freezePoint(state.delta.x, state.delta.y)
180
+ });
181
+ state.pressed = false;
182
+ state.released = false;
183
+ state.cancelled = false;
184
+ state.delta.x = 0;
185
+ state.delta.y = 0;
186
+ if (sampled.released || sampled.cancelled) {
187
+ if (state.pendingBegin !== undefined) {
188
+ // Transfer to the queued pointer after the terminal frame.
189
+ state.active = true;
190
+ state.pressed = true;
191
+ state.pointerId = state.pendingBegin.pointerId;
192
+ state.position = state.pendingBegin.position;
193
+ state.delta.x = 0;
194
+ state.delta.y = 0;
195
+ state.pendingBegin = undefined;
196
+ } else {
197
+ state.ownsSlot = false;
198
+ state.pointerId = undefined;
199
+ state.position = undefined;
200
+ }
201
+ }
202
+ return sampled;
203
+ };
204
+ return {
205
+ controller,
206
+ sample() {
207
+ const sampled = new Map();
208
+ for (const [action, state] of states) {
209
+ if (state.kind === 'pointer') {
210
+ sampled.set(action, {
211
+ kind: 'pointer',
212
+ state: samplePointer(state)
213
+ });
214
+ } else {
215
+ sampled.set(action, {
216
+ kind: 'button',
217
+ state: Object.freeze({
218
+ held: state.held,
219
+ pressed: state.pressed,
220
+ released: state.released,
221
+ cancelled: state.cancelled
222
+ })
223
+ });
224
+ state.pressed = false;
225
+ state.released = false;
226
+ state.cancelled = false;
227
+ }
228
+ }
229
+ return Object.freeze({
230
+ button(action) {
231
+ const entry = sampled.get(action);
232
+ if (!entry) {
233
+ throw new Error(`Unknown input action: ${action}`);
234
+ }
235
+ if (entry.kind !== 'button') {
236
+ throw new Error(`Input action "${action}" is a pointer action, not a button`);
237
+ }
238
+ return entry.state;
239
+ },
240
+ pointer(action) {
241
+ const entry = sampled.get(action);
242
+ if (!entry) {
243
+ throw new Error(`Unknown input action: ${action}`);
244
+ }
245
+ if (entry.kind !== 'pointer') {
246
+ throw new Error(`Input action "${action}" is a button action, not a pointer`);
247
+ }
248
+ return entry.state;
249
+ }
250
+ });
251
+ },
252
+ resetForTransition(targetActions) {
253
+ const targetActionSet = new Set(targetActions);
254
+ for (const [action, state] of states) {
255
+ const preservePointer = state.kind === 'pointer' && state.ownsSlot && state.active && targetActionSet.has(action);
256
+ if (state.kind === 'pointer') {
257
+ if (!preservePointer) {
258
+ state.ownsSlot = false;
259
+ state.active = false;
260
+ state.pointerId = undefined;
261
+ state.position = undefined;
262
+ }
263
+ state.pendingBegin = undefined;
264
+ state.delta.x = 0;
265
+ state.delta.y = 0;
266
+ } else {
267
+ // Buttons are semantic scene actions rather than a continuous spatial
268
+ // gesture. Do not leak a held button into a newly created scene.
269
+ state.held = false;
270
+ }
271
+ state.pressed = false;
272
+ state.released = false;
273
+ state.cancelled = false;
274
+ }
275
+ },
276
+ reset() {
277
+ for (const state of states.values()) {
278
+ if (state.kind === 'pointer') {
279
+ state.ownsSlot = false;
280
+ state.active = false;
281
+ state.pointerId = undefined;
282
+ state.position = undefined;
283
+ state.pendingBegin = undefined;
284
+ state.delta.x = 0;
285
+ state.delta.y = 0;
286
+ } else {
287
+ state.held = false;
288
+ }
289
+ state.pressed = false;
290
+ state.released = false;
291
+ state.cancelled = false;
292
+ }
293
+ }
294
+ };
295
+ }
296
+ //# sourceMappingURL=createInputBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["freezePoint","x","y","Object","freeze","assertFinitePointerId","pointerId","Number","isFinite","TypeError","assertFinitePosition","position","createInputBuffer","input","assertLive","states","Map","acceptedCount","action","actionConfig","entries","type","set","kind","ownsSlot","active","pressed","released","cancelled","undefined","delta","pendingBegin","held","getState","state","get","Error","getButton","getPointer","controller","press","release","begin","move","end","cancel","samplePointer","sampled","sample","button","entry","pointer","resetForTransition","targetActions","targetActionSet","Set","preservePointer","has","reset","values"],"sourceRoot":"../../../../src","sources":["core/input/createInputBuffer.ts"],"mappings":"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","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":["core/input/types.ts"],"mappings":"","ignoreList":[]}