@energy8platform/game-engine 0.8.0 → 0.9.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.
@@ -0,0 +1,470 @@
1
+ 'use strict';
2
+
3
+ var constants = require('react-reconciler/constants');
4
+ var Reconciler = require('react-reconciler');
5
+ var pixi_js = require('pixi.js');
6
+ var react = require('react');
7
+
8
+ /** Mutable catalogue: PascalCase name -> PixiJS constructor */
9
+ const catalogue = {};
10
+ /**
11
+ * Register PixiJS classes for use as JSX elements.
12
+ * Keys must be PascalCase; JSX uses the camelCase equivalent.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * import { Container, Sprite, Text } from 'pixi.js';
17
+ * extend({ Container, Sprite, Text });
18
+ * // Now <container>, <sprite>, <text> work in JSX
19
+ * ```
20
+ */
21
+ function extend(components) {
22
+ Object.assign(catalogue, components);
23
+ }
24
+
25
+ const RESERVED = new Set(['children', 'key', 'ref']);
26
+ const REACT_TO_PIXI_EVENTS = {
27
+ onClick: 'onclick',
28
+ onPointerDown: 'onpointerdown',
29
+ onPointerUp: 'onpointerup',
30
+ onPointerMove: 'onpointermove',
31
+ onPointerOver: 'onpointerover',
32
+ onPointerOut: 'onpointerout',
33
+ onPointerEnter: 'onpointerenter',
34
+ onPointerLeave: 'onpointerleave',
35
+ onPointerCancel: 'onpointercancel',
36
+ onPointerTap: 'onpointertap',
37
+ onPointerUpOutside: 'onpointerupoutside',
38
+ onMouseDown: 'onmousedown',
39
+ onMouseUp: 'onmouseup',
40
+ onMouseMove: 'onmousemove',
41
+ onMouseOver: 'onmouseover',
42
+ onMouseOut: 'onmouseout',
43
+ onMouseEnter: 'onmouseenter',
44
+ onMouseLeave: 'onmouseleave',
45
+ onMouseUpOutside: 'onmouseupoutside',
46
+ onTouchStart: 'ontouchstart',
47
+ onTouchEnd: 'ontouchend',
48
+ onTouchMove: 'ontouchmove',
49
+ onTouchCancel: 'ontouchcancel',
50
+ onTouchEndOutside: 'ontouchendoutside',
51
+ onWheel: 'onwheel',
52
+ onRightClick: 'onrightclick',
53
+ onRightDown: 'onrightdown',
54
+ onRightUp: 'onrightup',
55
+ onRightUpOutside: 'onrightupoutside',
56
+ onTap: 'ontap',
57
+ onGlobalpointermove: 'onglobalpointermove',
58
+ onGlobalmousemove: 'onglobalmousemove',
59
+ onGlobaltouchmove: 'onglobaltouchmove',
60
+ };
61
+ function isEventProp(key) {
62
+ return key in REACT_TO_PIXI_EVENTS;
63
+ }
64
+ function hasEventProps(props) {
65
+ for (const key in props) {
66
+ if (isEventProp(key))
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ function setNestedValue(target, path, value) {
72
+ let obj = target;
73
+ for (let i = 0; i < path.length - 1; i++) {
74
+ obj = obj[path[i]];
75
+ if (obj == null)
76
+ return;
77
+ }
78
+ obj[path[path.length - 1]] = value;
79
+ }
80
+ function applyProps(instance, newProps, oldProps = {}) {
81
+ // Remove old props not in newProps
82
+ for (const key in oldProps) {
83
+ if (RESERVED.has(key) || key in newProps)
84
+ continue;
85
+ const pixiEvent = REACT_TO_PIXI_EVENTS[key];
86
+ if (pixiEvent) {
87
+ instance[pixiEvent] = null;
88
+ }
89
+ else if (key === 'draw') ;
90
+ else if (key.includes('-')) ;
91
+ else {
92
+ try {
93
+ instance[key] = undefined;
94
+ }
95
+ catch {
96
+ // read-only or non-configurable
97
+ }
98
+ }
99
+ }
100
+ // Apply new props
101
+ for (const key in newProps) {
102
+ if (RESERVED.has(key))
103
+ continue;
104
+ const value = newProps[key];
105
+ const pixiEvent = REACT_TO_PIXI_EVENTS[key];
106
+ if (pixiEvent) {
107
+ instance[pixiEvent] = value;
108
+ }
109
+ else if (key === 'draw' && typeof value === 'function') {
110
+ instance.clear?.();
111
+ value(instance);
112
+ }
113
+ else if (key.includes('-')) {
114
+ const parts = key.split('-');
115
+ setNestedValue(instance, parts, value);
116
+ }
117
+ else {
118
+ try {
119
+ instance[key] = value;
120
+ }
121
+ catch {
122
+ // read-only property
123
+ }
124
+ }
125
+ }
126
+ }
127
+
128
+ function toPascalCase(str) {
129
+ return str.charAt(0).toUpperCase() + str.slice(1);
130
+ }
131
+ const hostConfig = {
132
+ isPrimaryRenderer: false,
133
+ supportsMutation: true,
134
+ supportsPersistence: false,
135
+ supportsHydration: false,
136
+ createInstance(type, props) {
137
+ const name = toPascalCase(type);
138
+ const Ctor = catalogue[name];
139
+ if (!Ctor) {
140
+ throw new Error(`[PixiReconciler] Unknown element "<${type}>". ` +
141
+ `Call extend({ ${name} }) before rendering.`);
142
+ }
143
+ const instance = new Ctor();
144
+ applyProps(instance, props);
145
+ // Enable interactivity if any event prop is present
146
+ if (hasEventProps(props) && instance.eventMode === 'auto') {
147
+ instance.eventMode = 'static';
148
+ }
149
+ return instance;
150
+ },
151
+ createTextInstance() {
152
+ throw new Error('[PixiReconciler] Text strings are not supported. Use a <text> element.');
153
+ },
154
+ appendInitialChild(parent, child) {
155
+ if (child instanceof pixi_js.Container)
156
+ parent.addChild(child);
157
+ },
158
+ appendChild(parent, child) {
159
+ if (child instanceof pixi_js.Container)
160
+ parent.addChild(child);
161
+ },
162
+ appendChildToContainer(container, child) {
163
+ if (child instanceof pixi_js.Container)
164
+ container.addChild(child);
165
+ },
166
+ removeChild(parent, child) {
167
+ if (child instanceof pixi_js.Container) {
168
+ parent.removeChild(child);
169
+ child.destroy({ children: true });
170
+ }
171
+ },
172
+ removeChildFromContainer(container, child) {
173
+ if (child instanceof pixi_js.Container) {
174
+ container.removeChild(child);
175
+ child.destroy({ children: true });
176
+ }
177
+ },
178
+ insertBefore(parent, child, beforeChild) {
179
+ if (child instanceof pixi_js.Container && beforeChild instanceof pixi_js.Container) {
180
+ if (child.parent)
181
+ child.parent.removeChild(child);
182
+ const index = parent.getChildIndex(beforeChild);
183
+ parent.addChildAt(child, index);
184
+ }
185
+ },
186
+ insertInContainerBefore(container, child, beforeChild) {
187
+ if (child instanceof pixi_js.Container && beforeChild instanceof pixi_js.Container) {
188
+ if (child.parent)
189
+ child.parent.removeChild(child);
190
+ const index = container.getChildIndex(beforeChild);
191
+ container.addChildAt(child, index);
192
+ }
193
+ },
194
+ commitUpdate(instance, _updatePayload, _type, oldProps, newProps) {
195
+ applyProps(instance, newProps, oldProps);
196
+ if (hasEventProps(newProps) && instance.eventMode === 'auto') {
197
+ instance.eventMode = 'static';
198
+ }
199
+ },
200
+ finalizeInitialChildren() {
201
+ return false;
202
+ },
203
+ prepareUpdate() {
204
+ return true;
205
+ },
206
+ shouldSetTextContent() {
207
+ return false;
208
+ },
209
+ getRootHostContext() {
210
+ return null;
211
+ },
212
+ getChildHostContext(parentHostContext) {
213
+ return parentHostContext;
214
+ },
215
+ getPublicInstance(instance) {
216
+ return instance;
217
+ },
218
+ prepareForCommit() {
219
+ return null;
220
+ },
221
+ resetAfterCommit() { },
222
+ preparePortalMount() { },
223
+ scheduleTimeout: setTimeout,
224
+ cancelTimeout: clearTimeout,
225
+ noTimeout: -1,
226
+ getCurrentEventPriority() {
227
+ return constants.DefaultEventPriority;
228
+ },
229
+ hideInstance(instance) {
230
+ instance.visible = false;
231
+ },
232
+ unhideInstance(instance) {
233
+ instance.visible = true;
234
+ },
235
+ hideTextInstance() { },
236
+ unhideTextInstance() { },
237
+ clearContainer() { },
238
+ detachDeletedInstance() { },
239
+ prepareScopeUpdate() { },
240
+ getInstanceFromNode() { return null; },
241
+ getInstanceFromScope() { return null; },
242
+ beforeActiveInstanceBlur() { },
243
+ afterActiveInstanceBlur() { },
244
+ };
245
+ const reconciler = Reconciler(hostConfig);
246
+
247
+ function createPixiRoot(container) {
248
+ const fiberRoot = reconciler.createContainer(container, // containerInfo
249
+ constants.ConcurrentRoot, // tag
250
+ null, // hydrationCallbacks
251
+ false, // isStrictMode
252
+ null, // concurrentUpdatesByDefaultOverride
253
+ '', // identifierPrefix
254
+ (err) => console.error('[PixiRoot]', err), null);
255
+ return {
256
+ render(element) {
257
+ reconciler.updateContainer(element, fiberRoot, null, () => { });
258
+ },
259
+ unmount() {
260
+ reconciler.updateContainer(null, fiberRoot, null, () => { });
261
+ },
262
+ };
263
+ }
264
+
265
+ /**
266
+ * Register all standard PixiJS display objects for JSX use.
267
+ * Call once at app startup before rendering any React scenes.
268
+ */
269
+ function extendPixiElements() {
270
+ extend({
271
+ Container: pixi_js.Container,
272
+ Sprite: pixi_js.Sprite,
273
+ Graphics: pixi_js.Graphics,
274
+ Text: pixi_js.Text,
275
+ AnimatedSprite: pixi_js.AnimatedSprite,
276
+ NineSliceSprite: pixi_js.NineSliceSprite,
277
+ TilingSprite: pixi_js.TilingSprite,
278
+ Mesh: pixi_js.Mesh,
279
+ MeshPlane: pixi_js.MeshPlane,
280
+ MeshRope: pixi_js.MeshRope,
281
+ MeshSimple: pixi_js.MeshSimple,
282
+ BitmapText: pixi_js.BitmapText,
283
+ HTMLText: pixi_js.HTMLText,
284
+ });
285
+ }
286
+ /**
287
+ * Register @pixi/layout components for JSX use.
288
+ * Pass the dynamically imported module:
289
+ *
290
+ * ```ts
291
+ * const layout = await import('@pixi/layout/components');
292
+ * extendLayoutElements(layout);
293
+ * ```
294
+ */
295
+ function extendLayoutElements(layoutModule) {
296
+ extend(layoutModule);
297
+ }
298
+
299
+ /**
300
+ * Base class for all scenes.
301
+ * Provides a root PixiJS Container and lifecycle hooks.
302
+ *
303
+ * @example
304
+ * ```ts
305
+ * class MenuScene extends Scene {
306
+ * async onEnter() {
307
+ * const bg = Sprite.from('menu-bg');
308
+ * this.container.addChild(bg);
309
+ * }
310
+ *
311
+ * onUpdate(dt: number) {
312
+ * // per-frame logic
313
+ * }
314
+ *
315
+ * onResize(width: number, height: number) {
316
+ * // reposition UI
317
+ * }
318
+ * }
319
+ * ```
320
+ */
321
+ class Scene {
322
+ container;
323
+ constructor() {
324
+ this.container = new pixi_js.Container();
325
+ this.container.label = this.constructor.name;
326
+ }
327
+ }
328
+
329
+ const EngineContext = react.createContext(null);
330
+ function useEngine() {
331
+ const ctx = react.useContext(EngineContext);
332
+ if (!ctx)
333
+ throw new Error('useEngine() must be used inside a ReactScene');
334
+ return ctx;
335
+ }
336
+
337
+ // ─── Scale Modes ───────────────────────────────────────────
338
+ var ScaleMode;
339
+ (function (ScaleMode) {
340
+ /** Fit inside container, maintain aspect ratio (letterbox/pillarbox) */
341
+ ScaleMode["FIT"] = "FIT";
342
+ /** Fill container, maintain aspect ratio (crop edges) */
343
+ ScaleMode["FILL"] = "FILL";
344
+ /** Stretch to fill (distorts) */
345
+ ScaleMode["STRETCH"] = "STRETCH";
346
+ })(ScaleMode || (ScaleMode = {}));
347
+ // ─── Orientation ───────────────────────────────────────────
348
+ var Orientation;
349
+ (function (Orientation) {
350
+ Orientation["LANDSCAPE"] = "landscape";
351
+ Orientation["PORTRAIT"] = "portrait";
352
+ Orientation["ANY"] = "any";
353
+ })(Orientation || (Orientation = {}));
354
+ // ─── Transition Types ──────────────────────────────────────
355
+ var TransitionType;
356
+ (function (TransitionType) {
357
+ TransitionType["NONE"] = "none";
358
+ TransitionType["FADE"] = "fade";
359
+ TransitionType["SLIDE_LEFT"] = "slide-left";
360
+ TransitionType["SLIDE_RIGHT"] = "slide-right";
361
+ })(TransitionType || (TransitionType = {}));
362
+
363
+ class ReactScene extends Scene {
364
+ _pixiRoot = null;
365
+ _contextValue = null;
366
+ /** Access the GameApplication instance. */
367
+ getApp() {
368
+ const app = this.__engineApp;
369
+ if (!app) {
370
+ throw new Error('[ReactScene] No GameApplication reference. ' +
371
+ 'Ensure this scene is managed by SceneManager (not instantiated manually).');
372
+ }
373
+ return app;
374
+ }
375
+ async onEnter(data) {
376
+ const app = this.getApp();
377
+ this._contextValue = {
378
+ app,
379
+ sdk: app.sdk,
380
+ audio: app.audio,
381
+ input: app.input,
382
+ viewport: app.viewport,
383
+ gameConfig: app.gameConfig,
384
+ screen: {
385
+ width: app.viewport.width,
386
+ height: app.viewport.height,
387
+ scale: app.viewport.scale,
388
+ },
389
+ isPortrait: app.viewport.orientation === Orientation.PORTRAIT,
390
+ };
391
+ this._pixiRoot = createPixiRoot(this.container);
392
+ this._mountReactTree();
393
+ }
394
+ async onExit() {
395
+ this._pixiRoot?.unmount();
396
+ this._pixiRoot = null;
397
+ this._contextValue = null;
398
+ }
399
+ onResize(width, height) {
400
+ if (!this._contextValue)
401
+ return;
402
+ const app = this.getApp();
403
+ this._contextValue = {
404
+ ...this._contextValue,
405
+ screen: { width, height, scale: app.viewport.scale },
406
+ isPortrait: height > width,
407
+ };
408
+ this._mountReactTree();
409
+ }
410
+ onDestroy() {
411
+ this._pixiRoot?.unmount();
412
+ this._pixiRoot = null;
413
+ this._contextValue = null;
414
+ }
415
+ _mountReactTree() {
416
+ if (!this._pixiRoot || !this._contextValue)
417
+ return;
418
+ this._pixiRoot.render(react.createElement(EngineContext.Provider, { value: this._contextValue }, this.render()));
419
+ }
420
+ }
421
+
422
+ function useSDK() {
423
+ return useEngine().sdk;
424
+ }
425
+ function useAudio() {
426
+ return useEngine().audio;
427
+ }
428
+ function useInput() {
429
+ return useEngine().input;
430
+ }
431
+ function useViewport() {
432
+ const { screen, isPortrait } = useEngine();
433
+ return { ...screen, isPortrait };
434
+ }
435
+ function useBalance() {
436
+ const { sdk } = useEngine();
437
+ const [balance, setBalance] = react.useState(sdk?.balance ?? 0);
438
+ react.useEffect(() => {
439
+ if (!sdk)
440
+ return;
441
+ const handler = (data) => setBalance(data.balance);
442
+ sdk.on('balanceUpdate', handler);
443
+ return () => {
444
+ sdk.off('balanceUpdate', handler);
445
+ };
446
+ }, [sdk]);
447
+ return balance;
448
+ }
449
+ function useSession() {
450
+ return useEngine().app.session;
451
+ }
452
+ function useGameConfig() {
453
+ return useEngine().gameConfig;
454
+ }
455
+
456
+ exports.EngineContext = EngineContext;
457
+ exports.ReactScene = ReactScene;
458
+ exports.createPixiRoot = createPixiRoot;
459
+ exports.extend = extend;
460
+ exports.extendLayoutElements = extendLayoutElements;
461
+ exports.extendPixiElements = extendPixiElements;
462
+ exports.useAudio = useAudio;
463
+ exports.useBalance = useBalance;
464
+ exports.useEngine = useEngine;
465
+ exports.useGameConfig = useGameConfig;
466
+ exports.useInput = useInput;
467
+ exports.useSDK = useSDK;
468
+ exports.useSession = useSession;
469
+ exports.useViewport = useViewport;
470
+ //# sourceMappingURL=react.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.cjs.js","sources":["../src/react/catalogue.ts","../src/react/applyProps.ts","../src/react/reconciler.ts","../src/react/createPixiRoot.ts","../src/react/extendAll.ts","../src/core/Scene.ts","../src/react/EngineContext.ts","../src/types.ts","../src/react/ReactScene.ts","../src/react/hooks.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null],"names":["Container","DefaultEventPriority","ConcurrentRoot","Sprite","Graphics","Text","AnimatedSprite","NineSliceSprite","TilingSprite","Mesh","MeshPlane","MeshRope","MeshSimple","BitmapText","HTMLText","createContext","useContext","createElement","useState","useEffect"],"mappings":"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"}