@energy8platform/game-engine 0.2.0 → 0.3.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/README.md +318 -49
- package/dist/animation.cjs.js +191 -1
- package/dist/animation.cjs.js.map +1 -1
- package/dist/animation.d.ts +117 -1
- package/dist/animation.esm.js +192 -3
- package/dist/animation.esm.js.map +1 -1
- package/dist/audio.cjs.js +66 -16
- package/dist/audio.cjs.js.map +1 -1
- package/dist/audio.d.ts +4 -0
- package/dist/audio.esm.js +66 -16
- package/dist/audio.esm.js.map +1 -1
- package/dist/core.cjs.js +310 -84
- package/dist/core.cjs.js.map +1 -1
- package/dist/core.d.ts +60 -1
- package/dist/core.esm.js +311 -85
- package/dist/core.esm.js.map +1 -1
- package/dist/debug.cjs.js +36 -68
- package/dist/debug.cjs.js.map +1 -1
- package/dist/debug.d.ts +4 -6
- package/dist/debug.esm.js +36 -68
- package/dist/debug.esm.js.map +1 -1
- package/dist/index.cjs.js +1250 -251
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +386 -41
- package/dist/index.esm.js +1250 -254
- package/dist/index.esm.js.map +1 -1
- package/dist/ui.cjs.js +757 -1
- package/dist/ui.cjs.js.map +1 -1
- package/dist/ui.d.ts +208 -2
- package/dist/ui.esm.js +756 -2
- package/dist/ui.esm.js.map +1 -1
- package/dist/vite.cjs.js +65 -68
- package/dist/vite.cjs.js.map +1 -1
- package/dist/vite.d.ts +17 -23
- package/dist/vite.esm.js +66 -68
- package/dist/vite.esm.js.map +1 -1
- package/package.json +4 -5
- package/src/animation/SpriteAnimation.ts +210 -0
- package/src/animation/Tween.ts +27 -1
- package/src/animation/index.ts +2 -0
- package/src/audio/AudioManager.ts +64 -15
- package/src/core/EventEmitter.ts +7 -1
- package/src/core/GameApplication.ts +25 -7
- package/src/core/SceneManager.ts +3 -1
- package/src/debug/DevBridge.ts +49 -80
- package/src/index.ts +6 -0
- package/src/input/InputManager.ts +26 -0
- package/src/loading/CSSPreloader.ts +7 -33
- package/src/loading/LoadingScene.ts +17 -41
- package/src/loading/index.ts +1 -0
- package/src/loading/logo.ts +95 -0
- package/src/types.ts +4 -0
- package/src/ui/BalanceDisplay.ts +14 -0
- package/src/ui/Button.ts +1 -1
- package/src/ui/Layout.ts +364 -0
- package/src/ui/ScrollContainer.ts +557 -0
- package/src/ui/index.ts +4 -0
- package/src/viewport/ViewportManager.ts +2 -0
- package/src/vite/index.ts +83 -83
package/src/vite/index.ts
CHANGED
|
@@ -1,83 +1,96 @@
|
|
|
1
1
|
import type { UserConfig, Plugin } from 'vite';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// ─── Types ───────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
export interface GameConfig {
|
|
6
|
+
/** Vite `base` path for deployment (default: '/') */
|
|
5
7
|
base?: string;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/** Enable DevBridge auto-injection in dev mode */
|
|
8
|
+
|
|
9
|
+
/** Enable DevBridge mock server in dev mode (default: false) */
|
|
9
10
|
devBridge?: boolean;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
/** Path to DevBridge config file (default: './dev.config.ts') */
|
|
13
|
+
devBridgeConfig?: string;
|
|
14
|
+
|
|
15
|
+
/** Additional Vite config to merge */
|
|
13
16
|
vite?: UserConfig;
|
|
14
17
|
}
|
|
15
18
|
|
|
19
|
+
// ─── DevBridge Plugin ────────────────────────────────────
|
|
20
|
+
|
|
16
21
|
/**
|
|
17
|
-
* Vite plugin that injects the DevBridge
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* allowing SDK communication to work without a real backend.
|
|
22
|
+
* Vite plugin that auto-injects the DevBridge script into the
|
|
23
|
+
* HTML during development, so the game can communicate with a
|
|
24
|
+
* mock casino host without manual setup.
|
|
21
25
|
*/
|
|
22
|
-
const
|
|
23
|
-
|
|
26
|
+
const VIRTUAL_ID = '/@dev-bridge-entry.js';
|
|
27
|
+
|
|
28
|
+
function devBridgePlugin(configPath: string): Plugin {
|
|
29
|
+
let entrySrc = '';
|
|
30
|
+
let resolvedConfigPath = configPath;
|
|
24
31
|
|
|
25
|
-
function gameEngineDevPlugin(options: { devBridge?: boolean } = {}): Plugin {
|
|
26
32
|
return {
|
|
27
|
-
name: 'game-engine-
|
|
28
|
-
apply: 'serve',
|
|
33
|
+
name: 'game-engine:dev-bridge',
|
|
34
|
+
apply: 'serve', // dev only
|
|
35
|
+
enforce: 'pre',
|
|
36
|
+
|
|
37
|
+
configResolved(config) {
|
|
38
|
+
// Resolve relative config path against Vite root so the virtual
|
|
39
|
+
// module can import it with an absolute path.
|
|
40
|
+
if (configPath.startsWith('.')) {
|
|
41
|
+
resolvedConfigPath = config.root + '/' + configPath.replace(/^\.\//, '');
|
|
42
|
+
}
|
|
43
|
+
},
|
|
29
44
|
|
|
30
45
|
resolveId(id) {
|
|
31
|
-
if (id ===
|
|
46
|
+
if (id === VIRTUAL_ID) return id;
|
|
32
47
|
},
|
|
33
48
|
|
|
34
49
|
load(id) {
|
|
35
|
-
if (id ===
|
|
36
|
-
// This
|
|
37
|
-
// so bare specifiers like '@energy8platform/game-engine/debug' resolve correctly.
|
|
50
|
+
if (id === VIRTUAL_ID) {
|
|
51
|
+
// This goes through Vite's pipeline so bare imports are resolved
|
|
38
52
|
return `
|
|
39
53
|
import { DevBridge } from '@energy8platform/game-engine/debug';
|
|
40
54
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// No dev config — use defaults
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const bridge = new DevBridge(config);
|
|
51
|
-
bridge.start();
|
|
52
|
-
window.__devBridge = bridge;
|
|
53
|
-
console.log('[GameEngine] DevBridge started in development mode');
|
|
55
|
+
try {
|
|
56
|
+
const mod = await import('${resolvedConfigPath}');
|
|
57
|
+
const config = mod.default ?? mod.config ?? mod;
|
|
58
|
+
new DevBridge(config).start();
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.warn('[DevBridge] Failed to load config:', e);
|
|
54
61
|
}
|
|
55
62
|
|
|
56
|
-
|
|
63
|
+
await import('${entrySrc}');
|
|
57
64
|
`;
|
|
58
65
|
}
|
|
59
66
|
},
|
|
60
67
|
|
|
61
68
|
transformIndexHtml(html) {
|
|
62
|
-
|
|
69
|
+
// Find the app's entry module script (skip Vite internal /@... scripts)
|
|
70
|
+
const scriptRegex = /<script\s+type="module"\s+src="((?!\/@)[^"]+)"\s*>\s*<\/script>/;
|
|
71
|
+
const match = html.match(scriptRegex);
|
|
63
72
|
|
|
64
|
-
|
|
65
|
-
|
|
73
|
+
if (!match) {
|
|
74
|
+
console.warn('[DevBridge] Could not find entry module script in index.html');
|
|
75
|
+
return html;
|
|
76
|
+
}
|
|
66
77
|
|
|
67
|
-
|
|
78
|
+
entrySrc = match[1];
|
|
79
|
+
return html.replace(match[0], `<script type="module" src="${VIRTUAL_ID}"></script>`);
|
|
68
80
|
},
|
|
69
81
|
};
|
|
70
82
|
}
|
|
71
83
|
|
|
84
|
+
// ─── defineGameConfig ────────────────────────────────────
|
|
85
|
+
|
|
72
86
|
/**
|
|
73
|
-
*
|
|
87
|
+
* Define a Vite configuration tailored for Energy8 casino games.
|
|
74
88
|
*
|
|
75
|
-
*
|
|
76
|
-
* -
|
|
77
|
-
* -
|
|
78
|
-
* -
|
|
79
|
-
* -
|
|
80
|
-
* - Configurable base path for S3/CDN deploy
|
|
89
|
+
* Merges sensible defaults for iGaming projects:
|
|
90
|
+
* - Build target: ES2020+
|
|
91
|
+
* - Asset inlining threshold: 8KB
|
|
92
|
+
* - Source maps for dev, none for prod
|
|
93
|
+
* - Optional DevBridge auto-injection in dev mode
|
|
81
94
|
*
|
|
82
95
|
* @example
|
|
83
96
|
* ```ts
|
|
@@ -85,69 +98,56 @@ initDevBridge();
|
|
|
85
98
|
* import { defineGameConfig } from '@energy8platform/game-engine/vite';
|
|
86
99
|
*
|
|
87
100
|
* export default defineGameConfig({
|
|
88
|
-
* base: '/
|
|
101
|
+
* base: '/',
|
|
89
102
|
* devBridge: true,
|
|
90
103
|
* });
|
|
91
104
|
* ```
|
|
92
105
|
*/
|
|
93
|
-
export function defineGameConfig(config:
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
106
|
+
export function defineGameConfig(config: GameConfig = {}): UserConfig {
|
|
107
|
+
const plugins: Plugin[] = [];
|
|
108
|
+
|
|
109
|
+
if (config.devBridge) {
|
|
110
|
+
const configPath = config.devBridgeConfig ?? './dev.config';
|
|
111
|
+
plugins.push(devBridgePlugin(configPath));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const userVite = config.vite ?? {};
|
|
101
115
|
|
|
102
116
|
return {
|
|
103
117
|
base: config.base ?? '/',
|
|
104
118
|
|
|
105
119
|
plugins: [
|
|
106
|
-
|
|
107
|
-
...(
|
|
120
|
+
...plugins,
|
|
121
|
+
...((userVite.plugins as Plugin[]) ?? []),
|
|
108
122
|
],
|
|
109
123
|
|
|
110
124
|
build: {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
minify: 'terser',
|
|
125
|
+
target: 'es2020',
|
|
126
|
+
assetsInlineLimit: 8192,
|
|
114
127
|
sourcemap: false,
|
|
115
|
-
assetsInlineLimit: 4096,
|
|
116
128
|
rollupOptions: {
|
|
117
129
|
output: {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
130
|
+
manualChunks: {
|
|
131
|
+
pixi: ['pixi.js'],
|
|
132
|
+
},
|
|
121
133
|
},
|
|
122
134
|
},
|
|
123
|
-
...
|
|
124
|
-
},
|
|
125
|
-
|
|
126
|
-
optimizeDeps: {
|
|
127
|
-
// Pre-bundle libs for fast dev startup
|
|
128
|
-
include: ['pixi.js'],
|
|
129
|
-
exclude: ['@esotericsoftware/spine-pixi-v8'],
|
|
135
|
+
...userVite.build,
|
|
130
136
|
},
|
|
131
137
|
|
|
132
|
-
assetsInclude: assetExtensions.map((ext) => `**/*.${ext}`),
|
|
133
|
-
|
|
134
138
|
server: {
|
|
135
139
|
port: 3000,
|
|
136
140
|
open: true,
|
|
137
|
-
...
|
|
141
|
+
...userVite.server,
|
|
138
142
|
},
|
|
139
143
|
|
|
140
144
|
resolve: {
|
|
141
|
-
...
|
|
145
|
+
...userVite.resolve,
|
|
142
146
|
},
|
|
143
147
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
),
|
|
149
|
-
),
|
|
148
|
+
optimizeDeps: {
|
|
149
|
+
include: ['pixi.js'],
|
|
150
|
+
...userVite.optimizeDeps,
|
|
151
|
+
},
|
|
150
152
|
};
|
|
151
153
|
}
|
|
152
|
-
|
|
153
|
-
export { gameEngineDevPlugin };
|