@energy8platform/game-engine 0.15.2 → 0.16.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 +22 -12
- package/dist/assets.d.ts +2 -14
- package/dist/core.cjs.js +16 -201
- package/dist/core.cjs.js.map +1 -1
- package/dist/core.d.ts +4 -35
- package/dist/core.esm.js +12 -197
- package/dist/core.esm.js.map +1 -1
- package/dist/debug.cjs.js +5 -233
- package/dist/debug.cjs.js.map +1 -1
- package/dist/debug.d.ts +2 -140
- package/dist/debug.esm.js +2 -233
- package/dist/debug.esm.js.map +1 -1
- package/dist/index.cjs.js +21 -432
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +10 -195
- package/dist/index.esm.js +14 -429
- package/dist/index.esm.js.map +1 -1
- package/dist/lua.cjs.js +7 -1493
- package/dist/lua.cjs.js.map +1 -1
- package/dist/lua.d.ts +1 -403
- package/dist/lua.esm.js +1 -1483
- package/dist/lua.esm.js.map +1 -1
- package/dist/react.cjs.js.map +1 -1
- package/dist/react.d.ts +4 -35
- package/dist/react.esm.js.map +1 -1
- package/dist/vite.cjs.js +19 -175
- package/dist/vite.cjs.js.map +1 -1
- package/dist/vite.d.ts +8 -3
- package/dist/vite.esm.js +10 -173
- package/dist/vite.esm.js.map +1 -1
- package/package.json +6 -16
- package/src/core/GameApplication.ts +14 -18
- package/src/debug/index.ts +4 -2
- package/src/index.ts +3 -3
- package/src/loading/LoadingScene.ts +1 -1
- package/src/loading/index.ts +9 -2
- package/src/lua/index.ts +3 -31
- package/src/types.ts +16 -41
- package/src/vite/index.ts +13 -196
- package/bin/simulate.ts +0 -139
- package/scripts/install-simulate.mjs +0 -101
- package/src/debug/DevBridge.ts +0 -305
- package/src/loading/CSSPreloader.ts +0 -129
- package/src/loading/logo.ts +0 -95
- package/src/lua/ActionRouter.ts +0 -132
- package/src/lua/LuaEngine.ts +0 -412
- package/src/lua/LuaEngineAPI.ts +0 -314
- package/src/lua/NativeSimulationRunner.ts +0 -367
- package/src/lua/ParallelSimulationRunner.ts +0 -156
- package/src/lua/PersistentState.ts +0 -80
- package/src/lua/SessionManager.ts +0 -227
- package/src/lua/SimulationRunner.ts +0 -192
- package/src/lua/SimulationWorker.ts +0 -44
- package/src/lua/fengari.d.ts +0 -10
- package/src/lua/types.ts +0 -149
package/dist/debug.d.ts
CHANGED
|
@@ -1,143 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export { DevBridge, DevBridgeConfig } from '@energy8platform/platform-core/dev-bridge';
|
|
2
2
|
import { Application } from 'pixi.js';
|
|
3
3
|
|
|
4
|
-
interface GameDefinition {
|
|
5
|
-
id: string;
|
|
6
|
-
type: 'SLOT' | 'TABLE';
|
|
7
|
-
actions: Record<string, ActionDefinition>;
|
|
8
|
-
bet_levels?: number[] | BetLevelsConfig;
|
|
9
|
-
max_win?: MaxWinConfig;
|
|
10
|
-
buy_bonus?: BuyBonusConfig;
|
|
11
|
-
ante_bet?: AnteBetConfig;
|
|
12
|
-
persistent_state?: PersistentStateConfig;
|
|
13
|
-
}
|
|
14
|
-
interface BetLevelsConfig {
|
|
15
|
-
levels?: number[];
|
|
16
|
-
min?: number;
|
|
17
|
-
max?: number;
|
|
18
|
-
}
|
|
19
|
-
interface MaxWinConfig {
|
|
20
|
-
multiplier?: number;
|
|
21
|
-
fixed?: number;
|
|
22
|
-
}
|
|
23
|
-
interface BuyBonusConfig {
|
|
24
|
-
modes: Record<string, BuyBonusMode>;
|
|
25
|
-
}
|
|
26
|
-
interface BuyBonusMode {
|
|
27
|
-
cost_multiplier: number;
|
|
28
|
-
/** Distribution of forced scatter counts. Optional — if omitted, Lua script handles bonus setup itself. */
|
|
29
|
-
scatter_distribution?: Record<string, number>;
|
|
30
|
-
/** Optional description */
|
|
31
|
-
description?: string;
|
|
32
|
-
}
|
|
33
|
-
interface AnteBetConfig {
|
|
34
|
-
cost_multiplier: number;
|
|
35
|
-
}
|
|
36
|
-
interface PersistentStateConfig {
|
|
37
|
-
vars: string[];
|
|
38
|
-
exposed_vars: string[];
|
|
39
|
-
}
|
|
40
|
-
interface ActionDefinition {
|
|
41
|
-
stage: string;
|
|
42
|
-
debit: 'bet' | 'buy_bonus_cost' | 'ante_bet_cost' | 'none';
|
|
43
|
-
credit?: 'win' | 'none' | 'defer';
|
|
44
|
-
requires_session?: boolean;
|
|
45
|
-
buy_bonus_mode?: string;
|
|
46
|
-
transitions: TransitionRule[];
|
|
47
|
-
input_schema?: Record<string, unknown>;
|
|
48
|
-
}
|
|
49
|
-
interface TransitionRule {
|
|
50
|
-
condition: string;
|
|
51
|
-
creates_session?: boolean;
|
|
52
|
-
complete_session?: boolean;
|
|
53
|
-
credit_override?: 'defer';
|
|
54
|
-
next_actions: string[];
|
|
55
|
-
session_config?: SessionConfig;
|
|
56
|
-
add_spins_var?: string;
|
|
57
|
-
}
|
|
58
|
-
interface SessionConfig {
|
|
59
|
-
total_spins_var: string;
|
|
60
|
-
persistent_vars?: string[];
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
interface DevBridgeConfig {
|
|
64
|
-
/** Mock initial balance */
|
|
65
|
-
balance?: number;
|
|
66
|
-
/** Mock currency */
|
|
67
|
-
currency?: string;
|
|
68
|
-
/** Game config */
|
|
69
|
-
gameConfig?: Partial<GameConfigData>;
|
|
70
|
-
/** Base URL for assets (default: '/assets/') */
|
|
71
|
-
assetsUrl?: string;
|
|
72
|
-
/** Active session to resume (null = no active session) */
|
|
73
|
-
session?: SessionData | null;
|
|
74
|
-
/** Custom play result handler — return mock result data */
|
|
75
|
-
onPlay?: (params: PlayParams) => Partial<PlayResultData>;
|
|
76
|
-
/** Simulated network delay in ms */
|
|
77
|
-
networkDelay?: number;
|
|
78
|
-
/** Enable debug logging */
|
|
79
|
-
debug?: boolean;
|
|
80
|
-
/** Lua script source code. When set, play requests are routed to the Vite dev server's LuaEngine. */
|
|
81
|
-
luaScript?: string;
|
|
82
|
-
/** Game definition for Lua engine (actions, transitions, etc.) */
|
|
83
|
-
gameDefinition?: GameDefinition;
|
|
84
|
-
/** RNG seed for deterministic Lua execution */
|
|
85
|
-
luaSeed?: number;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Mock host bridge for local development.
|
|
89
|
-
*
|
|
90
|
-
* Uses the SDK's `Bridge` class in `devMode` to communicate with
|
|
91
|
-
* `CasinoGameSDK` via a shared in-memory `MemoryChannel`, removing
|
|
92
|
-
* the need for postMessage and iframes.
|
|
93
|
-
*
|
|
94
|
-
* When `luaScript` is set, play requests are sent to the Vite dev server
|
|
95
|
-
* which runs LuaEngine in Node.js — no fengari in the browser.
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
* ```ts
|
|
99
|
-
* import { DevBridge } from '@energy8platform/game-engine/debug';
|
|
100
|
-
*
|
|
101
|
-
* const devBridge = new DevBridge({
|
|
102
|
-
* balance: 5000,
|
|
103
|
-
* currency: 'EUR',
|
|
104
|
-
* gameConfig: { id: 'my-slot', type: 'slot', betLevels: [0.2, 0.5, 1, 2] },
|
|
105
|
-
* onPlay: ({ action, bet }) => ({
|
|
106
|
-
* totalWin: Math.random() > 0.5 ? bet * (Math.random() * 20) : 0,
|
|
107
|
-
* data: { matrix: [[1,2,3],[4,5,6],[7,8,9]] },
|
|
108
|
-
* }),
|
|
109
|
-
* });
|
|
110
|
-
* devBridge.start();
|
|
111
|
-
* ```
|
|
112
|
-
*/
|
|
113
|
-
declare class DevBridge {
|
|
114
|
-
private _config;
|
|
115
|
-
private _balance;
|
|
116
|
-
private _roundCounter;
|
|
117
|
-
private _bridge;
|
|
118
|
-
private _useLuaServer;
|
|
119
|
-
constructor(config?: DevBridgeConfig);
|
|
120
|
-
/** Current mock balance */
|
|
121
|
-
get balance(): number;
|
|
122
|
-
/** Start listening for SDK messages */
|
|
123
|
-
start(): void;
|
|
124
|
-
/** Stop listening */
|
|
125
|
-
stop(): void;
|
|
126
|
-
/** Set mock balance */
|
|
127
|
-
setBalance(balance: number): void;
|
|
128
|
-
/** Destroy the dev bridge */
|
|
129
|
-
destroy(): void;
|
|
130
|
-
private handleGameReady;
|
|
131
|
-
private handlePlayRequest;
|
|
132
|
-
private executeLuaOnServer;
|
|
133
|
-
private buildFallbackResult;
|
|
134
|
-
private handlePlayAck;
|
|
135
|
-
private handleGetBalance;
|
|
136
|
-
private handleGetState;
|
|
137
|
-
private handleOpenDeposit;
|
|
138
|
-
private delayedSend;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
4
|
/**
|
|
142
5
|
* FPS overlay for debugging performance.
|
|
143
6
|
*
|
|
@@ -169,5 +32,4 @@ declare class FPSOverlay {
|
|
|
169
32
|
destroy(): void;
|
|
170
33
|
}
|
|
171
34
|
|
|
172
|
-
export {
|
|
173
|
-
export type { DevBridgeConfig };
|
|
35
|
+
export { FPSOverlay };
|
package/dist/debug.esm.js
CHANGED
|
@@ -1,237 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export { DevBridge } from '@energy8platform/platform-core/dev-bridge';
|
|
2
2
|
import { Container, Text } from 'pixi.js';
|
|
3
3
|
|
|
4
|
-
const DEFAULT_CONFIG = {
|
|
5
|
-
balance: 10000,
|
|
6
|
-
currency: 'USD',
|
|
7
|
-
gameConfig: {
|
|
8
|
-
id: 'dev-game',
|
|
9
|
-
type: 'slot',
|
|
10
|
-
version: '1.0.0',
|
|
11
|
-
viewport: { width: 1920, height: 1080 },
|
|
12
|
-
betLevels: [0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50],
|
|
13
|
-
},
|
|
14
|
-
assetsUrl: '/assets/',
|
|
15
|
-
session: null,
|
|
16
|
-
onPlay: () => ({}),
|
|
17
|
-
networkDelay: 200,
|
|
18
|
-
debug: true,
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Mock host bridge for local development.
|
|
22
|
-
*
|
|
23
|
-
* Uses the SDK's `Bridge` class in `devMode` to communicate with
|
|
24
|
-
* `CasinoGameSDK` via a shared in-memory `MemoryChannel`, removing
|
|
25
|
-
* the need for postMessage and iframes.
|
|
26
|
-
*
|
|
27
|
-
* When `luaScript` is set, play requests are sent to the Vite dev server
|
|
28
|
-
* which runs LuaEngine in Node.js — no fengari in the browser.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```ts
|
|
32
|
-
* import { DevBridge } from '@energy8platform/game-engine/debug';
|
|
33
|
-
*
|
|
34
|
-
* const devBridge = new DevBridge({
|
|
35
|
-
* balance: 5000,
|
|
36
|
-
* currency: 'EUR',
|
|
37
|
-
* gameConfig: { id: 'my-slot', type: 'slot', betLevels: [0.2, 0.5, 1, 2] },
|
|
38
|
-
* onPlay: ({ action, bet }) => ({
|
|
39
|
-
* totalWin: Math.random() > 0.5 ? bet * (Math.random() * 20) : 0,
|
|
40
|
-
* data: { matrix: [[1,2,3],[4,5,6],[7,8,9]] },
|
|
41
|
-
* }),
|
|
42
|
-
* });
|
|
43
|
-
* devBridge.start();
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
class DevBridge {
|
|
47
|
-
_config;
|
|
48
|
-
_balance;
|
|
49
|
-
_roundCounter = 0;
|
|
50
|
-
_bridge = null;
|
|
51
|
-
_useLuaServer;
|
|
52
|
-
constructor(config = {}) {
|
|
53
|
-
this._config = { ...DEFAULT_CONFIG, ...config };
|
|
54
|
-
this._balance = this._config.balance;
|
|
55
|
-
this._useLuaServer = !!(this._config.luaScript && this._config.gameDefinition);
|
|
56
|
-
}
|
|
57
|
-
/** Current mock balance */
|
|
58
|
-
get balance() {
|
|
59
|
-
return this._balance;
|
|
60
|
-
}
|
|
61
|
-
/** Start listening for SDK messages */
|
|
62
|
-
start() {
|
|
63
|
-
if (this._bridge)
|
|
64
|
-
return;
|
|
65
|
-
console.debug('[DevBridge] Starting with config:', this._config);
|
|
66
|
-
this._bridge = new Bridge({ devMode: true, debug: this._config.debug });
|
|
67
|
-
this._bridge.on('GAME_READY', (_payload, id) => {
|
|
68
|
-
this.handleGameReady(id);
|
|
69
|
-
});
|
|
70
|
-
this._bridge.on('PLAY_REQUEST', (payload, id) => {
|
|
71
|
-
this.handlePlayRequest(payload, id);
|
|
72
|
-
});
|
|
73
|
-
this._bridge.on('PLAY_RESULT_ACK', (payload) => {
|
|
74
|
-
this.handlePlayAck(payload);
|
|
75
|
-
});
|
|
76
|
-
this._bridge.on('GET_BALANCE', (_payload, id) => {
|
|
77
|
-
this.handleGetBalance(id);
|
|
78
|
-
});
|
|
79
|
-
this._bridge.on('GET_STATE', (_payload, id) => {
|
|
80
|
-
this.handleGetState(id);
|
|
81
|
-
});
|
|
82
|
-
this._bridge.on('OPEN_DEPOSIT', () => {
|
|
83
|
-
this.handleOpenDeposit();
|
|
84
|
-
});
|
|
85
|
-
if (this._config.debug) {
|
|
86
|
-
const mode = this._useLuaServer ? 'Lua (server-side)' : 'onPlay callback';
|
|
87
|
-
console.log(`[DevBridge] Started — mode: ${mode}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/** Stop listening */
|
|
91
|
-
stop() {
|
|
92
|
-
if (this._bridge) {
|
|
93
|
-
this._bridge.destroy();
|
|
94
|
-
this._bridge = null;
|
|
95
|
-
}
|
|
96
|
-
if (this._config.debug) {
|
|
97
|
-
console.log('[DevBridge] Stopped');
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/** Set mock balance */
|
|
101
|
-
setBalance(balance) {
|
|
102
|
-
this._balance = balance;
|
|
103
|
-
this._bridge?.send('BALANCE_UPDATE', { balance: this._balance });
|
|
104
|
-
}
|
|
105
|
-
/** Destroy the dev bridge */
|
|
106
|
-
destroy() {
|
|
107
|
-
this.stop();
|
|
108
|
-
}
|
|
109
|
-
// ─── Message Handling ──────────────────────────────────
|
|
110
|
-
handleGameReady(id) {
|
|
111
|
-
const initData = {
|
|
112
|
-
balance: this._balance,
|
|
113
|
-
currency: this._config.currency,
|
|
114
|
-
config: this._config.gameConfig,
|
|
115
|
-
session: this._config.session,
|
|
116
|
-
assetsUrl: this._config.assetsUrl,
|
|
117
|
-
};
|
|
118
|
-
this.delayedSend('INIT', initData, id);
|
|
119
|
-
}
|
|
120
|
-
handlePlayRequest(payload, id) {
|
|
121
|
-
const { action, bet, roundId, params } = payload;
|
|
122
|
-
this._roundCounter++;
|
|
123
|
-
if (this._useLuaServer) {
|
|
124
|
-
// Debit bet (server deducts before Lua execution)
|
|
125
|
-
// For session actions (free spins), debit is 0 — LuaEngine handles bet from session
|
|
126
|
-
this._balance -= bet;
|
|
127
|
-
this.executeLuaOnServer({ action, bet, roundId, params })
|
|
128
|
-
.then((result) => {
|
|
129
|
-
this._bridge?.send('PLAY_RESULT', result, id);
|
|
130
|
-
})
|
|
131
|
-
.catch((err) => {
|
|
132
|
-
console.error('[DevBridge] Lua server error:', err);
|
|
133
|
-
this._balance += bet;
|
|
134
|
-
this._bridge?.send('PLAY_RESULT', this.buildFallbackResult(action, bet, roundId), id);
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// Fallback to onPlay callback
|
|
139
|
-
const customResult = this._config.onPlay({ action, bet, roundId, params });
|
|
140
|
-
const totalWin = customResult.totalWin ?? (Math.random() > 0.6 ? bet * (1 + Math.random() * 10) : 0);
|
|
141
|
-
this._balance += totalWin;
|
|
142
|
-
const result = {
|
|
143
|
-
roundId: roundId ?? `dev-round-${this._roundCounter}`,
|
|
144
|
-
action,
|
|
145
|
-
balanceAfter: this._balance,
|
|
146
|
-
totalWin: Math.round(totalWin * 100) / 100,
|
|
147
|
-
data: customResult.data ?? {},
|
|
148
|
-
nextActions: customResult.nextActions ?? ['spin'],
|
|
149
|
-
session: customResult.session ?? null,
|
|
150
|
-
creditPending: false,
|
|
151
|
-
bonusFreeSpin: customResult.bonusFreeSpin ?? null,
|
|
152
|
-
currency: this._config.currency,
|
|
153
|
-
gameId: this._config.gameConfig?.id ?? 'dev-game',
|
|
154
|
-
};
|
|
155
|
-
this.delayedSend('PLAY_RESULT', result, id);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
async executeLuaOnServer(params) {
|
|
159
|
-
const response = await fetch('/__lua-play', {
|
|
160
|
-
method: 'POST',
|
|
161
|
-
headers: { 'Content-Type': 'application/json' },
|
|
162
|
-
body: JSON.stringify(params),
|
|
163
|
-
});
|
|
164
|
-
if (!response.ok) {
|
|
165
|
-
const err = await response.json().catch(() => ({ error: 'Unknown error' }));
|
|
166
|
-
throw new Error(err.error ?? `HTTP ${response.status}`);
|
|
167
|
-
}
|
|
168
|
-
const luaResult = await response.json();
|
|
169
|
-
// Server credit logic:
|
|
170
|
-
// shouldCredit = (no session) OR (session.completed)
|
|
171
|
-
// creditAmount = result.totalWin
|
|
172
|
-
const shouldCredit = !luaResult.session || luaResult.session.completed;
|
|
173
|
-
if (shouldCredit && luaResult.totalWin > 0) {
|
|
174
|
-
this._balance += luaResult.totalWin;
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
roundId: params.roundId ?? `dev-round-${this._roundCounter}`,
|
|
178
|
-
action: params.action,
|
|
179
|
-
balanceAfter: this._balance,
|
|
180
|
-
totalWin: Math.round(luaResult.totalWin * 100) / 100,
|
|
181
|
-
data: luaResult.data,
|
|
182
|
-
nextActions: luaResult.nextActions,
|
|
183
|
-
session: luaResult.session,
|
|
184
|
-
creditPending: !shouldCredit,
|
|
185
|
-
bonusFreeSpin: null,
|
|
186
|
-
currency: this._config.currency,
|
|
187
|
-
gameId: this._config.gameConfig?.id ?? 'dev-game',
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
buildFallbackResult(action, bet, roundId) {
|
|
191
|
-
return {
|
|
192
|
-
roundId: roundId ?? `dev-round-${this._roundCounter}`,
|
|
193
|
-
action,
|
|
194
|
-
balanceAfter: this._balance,
|
|
195
|
-
totalWin: 0,
|
|
196
|
-
data: { error: 'Lua execution failed' },
|
|
197
|
-
nextActions: ['spin'],
|
|
198
|
-
session: null,
|
|
199
|
-
creditPending: false,
|
|
200
|
-
bonusFreeSpin: null,
|
|
201
|
-
currency: this._config.currency,
|
|
202
|
-
gameId: this._config.gameConfig?.id ?? 'dev-game',
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
handlePlayAck(_payload) {
|
|
206
|
-
if (this._config.debug) {
|
|
207
|
-
console.log('[DevBridge] Play acknowledged');
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
handleGetBalance(id) {
|
|
211
|
-
this.delayedSend('BALANCE_UPDATE', { balance: this._balance }, id);
|
|
212
|
-
}
|
|
213
|
-
handleGetState(id) {
|
|
214
|
-
this.delayedSend('STATE_RESPONSE', { session: this._config.session ?? null }, id);
|
|
215
|
-
}
|
|
216
|
-
handleOpenDeposit() {
|
|
217
|
-
if (this._config.debug) {
|
|
218
|
-
console.log('[DevBridge] Open deposit requested (mock: adding 1000)');
|
|
219
|
-
}
|
|
220
|
-
this._balance += 1000;
|
|
221
|
-
this._bridge?.send('BALANCE_UPDATE', { balance: this._balance });
|
|
222
|
-
}
|
|
223
|
-
// ─── Communication ─────────────────────────────────────
|
|
224
|
-
delayedSend(type, payload, id) {
|
|
225
|
-
const delay = this._config.networkDelay;
|
|
226
|
-
if (delay > 0) {
|
|
227
|
-
setTimeout(() => this._bridge?.send(type, payload, id), delay);
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
this._bridge?.send(type, payload, id);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
4
|
/**
|
|
236
5
|
* FPS overlay for debugging performance.
|
|
237
6
|
*
|
|
@@ -322,5 +91,5 @@ class FPSOverlay {
|
|
|
322
91
|
}
|
|
323
92
|
}
|
|
324
93
|
|
|
325
|
-
export {
|
|
94
|
+
export { FPSOverlay };
|
|
326
95
|
//# sourceMappingURL=debug.esm.js.map
|
package/dist/debug.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.esm.js","sources":["../src/debug/
|
|
1
|
+
{"version":3,"file":"debug.esm.js","sources":["../src/debug/FPSOverlay.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAGA;;;;;;;;;;AAUG;MACU,UAAU,CAAA;AACb,IAAA,IAAI;AACJ,IAAA,UAAU;AACV,IAAA,QAAQ;IACR,QAAQ,GAAG,KAAK;IAChB,QAAQ,GAAa,EAAE;IACvB,WAAW,GAAG,EAAE;IAChB,WAAW,GAAG,CAAC;IACf,OAAO,GAAsC,IAAI;AAEzD,IAAA,WAAA,CAAY,GAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AAEf,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,EAAE;AACjC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,YAAY;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK;AAE9B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC;AACvB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE;AACL,gBAAA,UAAU,EAAE,WAAW;AACvB,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;AACtC,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QAEnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC;;IAGA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QAEpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;AAEzC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,MAAc,KAAI;YAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;AAC3C,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACvB;;AAGA,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE;gBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG;AACnB,oBAAA,CAAA,KAAA,EAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAAG;oBACnD,CAAA,OAAA,EAAU,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;AACxC,iBAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,CAAC,WAAW,GAAG,GAAG;YACxB;AACF,QAAA,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC;;IAGA,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AAErB,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE;QACb;aAAO;YACL,IAAI,CAAC,IAAI,EAAE;QACb;IACF;;IAGA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7C;AACD;;;;"}
|