@energy8platform/game-engine 0.24.0 → 0.26.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/dist/devtools.cjs.js +593 -0
- package/dist/devtools.cjs.js.map +1 -0
- package/dist/devtools.d.ts +430 -0
- package/dist/devtools.esm.js +580 -0
- package/dist/devtools.esm.js.map +1 -0
- package/dist/harness.cjs.js +34 -0
- package/dist/harness.cjs.js.map +1 -0
- package/dist/harness.d.ts +34 -0
- package/dist/harness.esm.js +31 -0
- package/dist/harness.esm.js.map +1 -0
- package/dist/reel-panel-client.cjs.js +622 -0
- package/dist/reel-panel-client.cjs.js.map +1 -0
- package/dist/reel-panel-client.d.ts +5 -0
- package/dist/reel-panel-client.esm.js +620 -0
- package/dist/reel-panel-client.esm.js.map +1 -0
- package/package.json +16 -1
- package/src/harness/index.ts +43 -0
- package/src/slot/devtools/configDiff.ts +41 -0
- package/src/slot/devtools/controlPanel.ts +151 -0
- package/src/slot/devtools/fieldSchema.ts +211 -0
- package/src/slot/devtools/index.ts +31 -0
- package/src/slot/devtools/panelClient.ts +126 -0
- package/src/slot/devtools/protocol.ts +29 -0
- package/src/slot/devtools/reelDevBridge.ts +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reel-panel-client.esm.js","sources":["../src/slot/devtools/fieldSchema.ts","../src/slot/devtools/controlPanel.ts","../src/slot/config/ReelSystemConfig.ts","../src/slot/devtools/configDiff.ts","../src/slot/devtools/protocol.ts","../src/slot/devtools/panelClient.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@energy8platform/game-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Universal casino game engine built on PixiJS v8 and @energy8platform/game-sdk",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs.js",
|
|
@@ -66,6 +66,16 @@
|
|
|
66
66
|
"import": "./dist/slot.esm.js",
|
|
67
67
|
"require": "./dist/slot.cjs.js",
|
|
68
68
|
"types": "./dist/slot.d.ts"
|
|
69
|
+
},
|
|
70
|
+
"./devtools": {
|
|
71
|
+
"import": "./dist/devtools.esm.js",
|
|
72
|
+
"require": "./dist/devtools.cjs.js",
|
|
73
|
+
"types": "./dist/devtools.d.ts"
|
|
74
|
+
},
|
|
75
|
+
"./harness": {
|
|
76
|
+
"import": "./dist/harness.esm.js",
|
|
77
|
+
"require": "./dist/harness.cjs.js",
|
|
78
|
+
"types": "./dist/harness.d.ts"
|
|
69
79
|
}
|
|
70
80
|
},
|
|
71
81
|
"files": [
|
|
@@ -89,9 +99,13 @@
|
|
|
89
99
|
"peerDependencies": {
|
|
90
100
|
"@energy8platform/game-sdk": "^2.8.0",
|
|
91
101
|
"@energy8platform/stake-bridge": ">=0.2.1",
|
|
102
|
+
"@energy8platform/harness": "*",
|
|
92
103
|
"pixi.js": "^8.16.0"
|
|
93
104
|
},
|
|
94
105
|
"peerDependenciesMeta": {
|
|
106
|
+
"@energy8platform/harness": {
|
|
107
|
+
"optional": true
|
|
108
|
+
},
|
|
95
109
|
"@energy8platform/stake-bridge": {
|
|
96
110
|
"optional": true
|
|
97
111
|
},
|
|
@@ -104,6 +118,7 @@
|
|
|
104
118
|
},
|
|
105
119
|
"devDependencies": {
|
|
106
120
|
"@energy8platform/game-sdk": "^2.8.0",
|
|
121
|
+
"@energy8platform/harness": "*",
|
|
107
122
|
"@energy8platform/stake-bridge": "*",
|
|
108
123
|
"@esotericsoftware/spine-pixi-v8": "~4.2.0",
|
|
109
124
|
"@pixi/sound": "^6.0.0",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@energy8platform/game-engine/harness` — node-only entry.
|
|
3
|
+
*
|
|
4
|
+
* Contributes the reel-config **panel** to `@energy8platform/harness`: a docked
|
|
5
|
+
* right sidebar that tunes a running game's ReelSystem live. Pair it with
|
|
6
|
+
* `mountReelDevBridge` (from `@energy8platform/game-engine/devtools`) in the game.
|
|
7
|
+
*
|
|
8
|
+
* Usage in a game's vite.config:
|
|
9
|
+
* import { createHarness } from '@energy8platform/harness';
|
|
10
|
+
* import { reelDevtoolsPlugin } from '@energy8platform/game-engine/harness';
|
|
11
|
+
* createHarness({ plugins: [ reelDevtoolsPlugin({ sections: { geometry: false } }) ] });
|
|
12
|
+
*
|
|
13
|
+
* Node-only: resolves the built, self-contained panel-client ESM the harness serves.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
|
|
18
|
+
import type { HarnessPanel, HarnessPlugin } from '@energy8platform/harness';
|
|
19
|
+
import type { SectionKey } from '../slot/devtools';
|
|
20
|
+
|
|
21
|
+
export interface ReelDevtoolsPluginOptions {
|
|
22
|
+
/** Sidebar header / tab label. Default 'Reels'. */
|
|
23
|
+
title?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Toggle whole sections of the reel panel. A missing key is shown; set a key to
|
|
26
|
+
* `false` to hide (and lock) that section — e.g. `{ geometry: false }` to disable
|
|
27
|
+
* live geometry editing. Sections: geometry · motion · anticipation · cascade · win · features.
|
|
28
|
+
*/
|
|
29
|
+
sections?: Partial<Record<SectionKey, boolean>>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function reelDevtoolsPlugin(opts: ReelDevtoolsPluginOptions = {}): HarnessPlugin {
|
|
33
|
+
// The self-contained panel client sits next to this module in dist/.
|
|
34
|
+
const clientEntry = fileURLToPath(new URL('./reel-panel-client.esm.js', import.meta.url));
|
|
35
|
+
const panel: HarnessPanel = {
|
|
36
|
+
id: 'reels',
|
|
37
|
+
title: opts.title ?? 'Reels',
|
|
38
|
+
placement: 'sidebar',
|
|
39
|
+
clientEntry,
|
|
40
|
+
config: opts.sections ? { sections: opts.sections } : undefined,
|
|
41
|
+
};
|
|
42
|
+
return { panel };
|
|
43
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// packages/game-engine/src/slot/devtools/configDiff.ts
|
|
2
|
+
//
|
|
3
|
+
// Compute the minimal override diff of a reel config against the defaults, and emit a
|
|
4
|
+
// paste-ready `resolveReelConfig({...})` TypeScript snippet. Pure — no pixi, no DOM.
|
|
5
|
+
|
|
6
|
+
import { resolveReelConfig, type ReelSystemConfig } from '../config/ReelSystemConfig';
|
|
7
|
+
|
|
8
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
9
|
+
/** Deep diff `obj` against `base`: arrays compared whole, objects recursed, scalars by !==. */
|
|
10
|
+
export function configDiff(base: any, obj: any): any {
|
|
11
|
+
const out: any = {};
|
|
12
|
+
for (const k of Object.keys(obj ?? {})) {
|
|
13
|
+
const a = base?.[k];
|
|
14
|
+
const b = obj[k];
|
|
15
|
+
if (Array.isArray(b)) {
|
|
16
|
+
if (JSON.stringify(a) !== JSON.stringify(b)) out[k] = b;
|
|
17
|
+
} else if (b && typeof b === 'object') {
|
|
18
|
+
const d = configDiff(a ?? {}, b);
|
|
19
|
+
if (Object.keys(d).length) out[k] = d;
|
|
20
|
+
} else if (a !== b) {
|
|
21
|
+
out[k] = b;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
27
|
+
|
|
28
|
+
/** Diff a working config against DEFAULT_REEL_CONFIG (via resolveReelConfig()). */
|
|
29
|
+
export function diffFromDefaults(config: ReelSystemConfig): Partial<ReelSystemConfig> {
|
|
30
|
+
return configDiff(resolveReelConfig(), config) as Partial<ReelSystemConfig>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Emit a paste-ready TS module exporting the reel config as overrides-only. */
|
|
34
|
+
export function emitReelConfigTs(config: ReelSystemConfig): string {
|
|
35
|
+
const diff = diffFromDefaults(config);
|
|
36
|
+
return (
|
|
37
|
+
`import { resolveReelConfig } from '@energy8platform/game-engine/slot';\n\n` +
|
|
38
|
+
`// Only the overrides vs DEFAULT_REEL_CONFIG.\n` +
|
|
39
|
+
`export const reelConfig = resolveReelConfig(${JSON.stringify(diff, null, 2)} as const);\n`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// packages/game-engine/src/slot/devtools/controlPanel.ts
|
|
2
|
+
//
|
|
3
|
+
// Renders the reel-config field schema into a DOM panel and binds each control to a
|
|
4
|
+
// live config object. Pure DOM — no pixi. Shared by the harness reel sidebar and the
|
|
5
|
+
// reel-lab playground.
|
|
6
|
+
|
|
7
|
+
import { REEL_FIELD_SCHEMA, type Control, type Section } from './fieldSchema';
|
|
8
|
+
|
|
9
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
|
+
export function getPath(obj: any, path: string): any {
|
|
11
|
+
return path.split('.').reduce((o, k) => (o == null ? o : o[k]), obj);
|
|
12
|
+
}
|
|
13
|
+
export function setPath(obj: any, path: string, value: any): void {
|
|
14
|
+
const keys = path.split('.');
|
|
15
|
+
const last = keys.pop() as string;
|
|
16
|
+
const target = keys.reduce((o, k) => (o[k] ??= {}), obj);
|
|
17
|
+
target[last] = value;
|
|
18
|
+
}
|
|
19
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
20
|
+
|
|
21
|
+
export interface ControlPanelOptions {
|
|
22
|
+
/** The live config object the controls read from and mutate. */
|
|
23
|
+
config: unknown;
|
|
24
|
+
/** Called with the changed dot-path after each edit. */
|
|
25
|
+
onChange: (path: string) => void;
|
|
26
|
+
/** Schema to render. Defaults to REEL_FIELD_SCHEMA. */
|
|
27
|
+
schema?: Section[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Build the control panel into `root`. Returns a `refresh()` that re-syncs inputs from config. */
|
|
31
|
+
export function buildControlPanel(
|
|
32
|
+
root: HTMLElement,
|
|
33
|
+
opts: ControlPanelOptions,
|
|
34
|
+
): { refresh: () => void } {
|
|
35
|
+
const schema = opts.schema ?? REEL_FIELD_SCHEMA;
|
|
36
|
+
const updaters: (() => void)[] = [];
|
|
37
|
+
root.innerHTML = '';
|
|
38
|
+
for (const section of schema) root.appendChild(renderSection(section, opts, updaters));
|
|
39
|
+
return { refresh: () => updaters.forEach((u) => u()) };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function renderSection(
|
|
43
|
+
section: Section,
|
|
44
|
+
opts: ControlPanelOptions,
|
|
45
|
+
updaters: (() => void)[],
|
|
46
|
+
): HTMLElement {
|
|
47
|
+
const wrap = document.createElement('section');
|
|
48
|
+
wrap.className = 'panel-section';
|
|
49
|
+
const head = document.createElement('button');
|
|
50
|
+
head.className = 'section-head';
|
|
51
|
+
head.textContent = section.title;
|
|
52
|
+
const body = document.createElement('div');
|
|
53
|
+
body.className = 'section-body';
|
|
54
|
+
if (section.collapsed) body.style.display = 'none';
|
|
55
|
+
head.addEventListener('click', () => {
|
|
56
|
+
body.style.display = body.style.display === 'none' ? '' : 'none';
|
|
57
|
+
});
|
|
58
|
+
wrap.appendChild(head);
|
|
59
|
+
wrap.appendChild(body);
|
|
60
|
+
for (const c of section.controls) body.appendChild(renderControl(c, opts, updaters));
|
|
61
|
+
return wrap;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function renderControl(c: Control, opts: ControlPanelOptions, updaters: (() => void)[]): HTMLElement {
|
|
65
|
+
const row = document.createElement('label');
|
|
66
|
+
row.className = 'control';
|
|
67
|
+
const name = document.createElement('span');
|
|
68
|
+
name.className = 'control-label';
|
|
69
|
+
name.textContent = c.label;
|
|
70
|
+
row.appendChild(name);
|
|
71
|
+
|
|
72
|
+
const emit = (): void => opts.onChange(c.path);
|
|
73
|
+
|
|
74
|
+
if (c.kind === 'toggle') {
|
|
75
|
+
const input = document.createElement('input');
|
|
76
|
+
input.type = 'checkbox';
|
|
77
|
+
const sync = (): void => {
|
|
78
|
+
input.checked = !!getPath(opts.config, c.path);
|
|
79
|
+
};
|
|
80
|
+
sync();
|
|
81
|
+
input.addEventListener('change', () => {
|
|
82
|
+
setPath(opts.config, c.path, input.checked);
|
|
83
|
+
emit();
|
|
84
|
+
});
|
|
85
|
+
row.classList.add('control-toggle');
|
|
86
|
+
row.appendChild(input);
|
|
87
|
+
updaters.push(sync);
|
|
88
|
+
} else if (c.kind === 'select') {
|
|
89
|
+
const sel = document.createElement('select');
|
|
90
|
+
for (const o of c.options) {
|
|
91
|
+
const opt = document.createElement('option');
|
|
92
|
+
opt.value = o;
|
|
93
|
+
opt.textContent = o;
|
|
94
|
+
sel.appendChild(opt);
|
|
95
|
+
}
|
|
96
|
+
const sync = (): void => {
|
|
97
|
+
sel.value = String(getPath(opts.config, c.path));
|
|
98
|
+
};
|
|
99
|
+
sync();
|
|
100
|
+
sel.addEventListener('change', () => {
|
|
101
|
+
setPath(opts.config, c.path, sel.value);
|
|
102
|
+
emit();
|
|
103
|
+
});
|
|
104
|
+
row.appendChild(sel);
|
|
105
|
+
updaters.push(sync);
|
|
106
|
+
} else if (c.kind === 'range') {
|
|
107
|
+
const input = document.createElement('input');
|
|
108
|
+
input.type = 'range';
|
|
109
|
+
input.min = String(c.min);
|
|
110
|
+
input.max = String(c.max);
|
|
111
|
+
input.step = String(c.step);
|
|
112
|
+
const val = document.createElement('output');
|
|
113
|
+
val.className = 'control-value';
|
|
114
|
+
const sync = (): void => {
|
|
115
|
+
let raw = getPath(opts.config, c.path);
|
|
116
|
+
if ((raw == null || typeof raw !== 'number') && c.fallback != null)
|
|
117
|
+
raw = getPath(opts.config, c.fallback);
|
|
118
|
+
const v = Number(raw);
|
|
119
|
+
input.value = String(v);
|
|
120
|
+
val.textContent = String(v);
|
|
121
|
+
};
|
|
122
|
+
sync();
|
|
123
|
+
input.addEventListener('input', () => {
|
|
124
|
+
const v = Number(input.value);
|
|
125
|
+
setPath(opts.config, c.path, v);
|
|
126
|
+
val.textContent = String(v);
|
|
127
|
+
emit();
|
|
128
|
+
});
|
|
129
|
+
row.appendChild(input);
|
|
130
|
+
row.appendChild(val);
|
|
131
|
+
updaters.push(sync);
|
|
132
|
+
} else {
|
|
133
|
+
const input = document.createElement('input');
|
|
134
|
+
input.type = 'color';
|
|
135
|
+
const sync = (): void => {
|
|
136
|
+
input.value =
|
|
137
|
+
'#' +
|
|
138
|
+
Number(getPath(opts.config, c.path) ?? 0)
|
|
139
|
+
.toString(16)
|
|
140
|
+
.padStart(6, '0');
|
|
141
|
+
};
|
|
142
|
+
sync();
|
|
143
|
+
input.addEventListener('input', () => {
|
|
144
|
+
setPath(opts.config, c.path, parseInt(input.value.slice(1), 16));
|
|
145
|
+
emit();
|
|
146
|
+
});
|
|
147
|
+
row.appendChild(input);
|
|
148
|
+
updaters.push(sync);
|
|
149
|
+
}
|
|
150
|
+
return row;
|
|
151
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// packages/game-engine/src/slot/devtools/fieldSchema.ts
|
|
2
|
+
//
|
|
3
|
+
// Declarative description of the reel-config control panel. Each control binds to a
|
|
4
|
+
// dot-path in the ReelSystemConfig. Pure data — no pixi, no DOM — so it bundles into
|
|
5
|
+
// the self-contained panel client served by the harness.
|
|
6
|
+
//
|
|
7
|
+
// NOTE: board shape (grid.cols / grid.rows / rowsPerReel) is intentionally OMITTED.
|
|
8
|
+
// The board shape is math-tied (paylines / ways / book geometry) and must not be
|
|
9
|
+
// tuned live from the harness. Everything else — cosmetic geometry, motion,
|
|
10
|
+
// anticipation, cascade, win presentation and features — is tunable.
|
|
11
|
+
|
|
12
|
+
export type Control =
|
|
13
|
+
| { kind: 'select'; path: string; label: string; options: string[] }
|
|
14
|
+
| {
|
|
15
|
+
kind: 'range';
|
|
16
|
+
path: string;
|
|
17
|
+
label: string;
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
step: number;
|
|
21
|
+
/** When the bound value is unset (undefined / non-scalar), show this path's value instead. */
|
|
22
|
+
fallback?: string;
|
|
23
|
+
}
|
|
24
|
+
| { kind: 'toggle'; path: string; label: string }
|
|
25
|
+
| { kind: 'color'; path: string; label: string };
|
|
26
|
+
|
|
27
|
+
/** Stable section identifiers — used to toggle whole sections on/off from the plugin. */
|
|
28
|
+
export type SectionKey = 'geometry' | 'motion' | 'anticipation' | 'cascade' | 'win' | 'features';
|
|
29
|
+
|
|
30
|
+
/** All section keys, in panel order. */
|
|
31
|
+
export const REEL_SECTION_KEYS: SectionKey[] = [
|
|
32
|
+
'geometry',
|
|
33
|
+
'motion',
|
|
34
|
+
'anticipation',
|
|
35
|
+
'cascade',
|
|
36
|
+
'win',
|
|
37
|
+
'features',
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
export interface Section {
|
|
41
|
+
/** Stable key for enabling/disabling the whole section (optional for ad-hoc schemas). */
|
|
42
|
+
key?: SectionKey;
|
|
43
|
+
title: string;
|
|
44
|
+
controls: Control[];
|
|
45
|
+
collapsed?: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const EASINGS = [
|
|
49
|
+
'linear',
|
|
50
|
+
'easeOutQuad',
|
|
51
|
+
'easeOutCubic',
|
|
52
|
+
'easeOutBack',
|
|
53
|
+
'easeOutBounce',
|
|
54
|
+
'easeInBack',
|
|
55
|
+
'easeOutElastic',
|
|
56
|
+
'easeInOutSine',
|
|
57
|
+
'easeInOutQuad',
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
/** The editable reel-config fields, grouped into collapsible sections. */
|
|
61
|
+
export const REEL_FIELD_SCHEMA: Section[] = [
|
|
62
|
+
{
|
|
63
|
+
key: 'geometry',
|
|
64
|
+
title: 'Cell geometry',
|
|
65
|
+
controls: [
|
|
66
|
+
{ kind: 'range', path: 'grid.cellSize', label: 'Cell size', min: 40, max: 120, step: 1 },
|
|
67
|
+
{ kind: 'range', path: 'grid.gap', label: 'Gap', min: 0, max: 16, step: 1 },
|
|
68
|
+
{
|
|
69
|
+
kind: 'select',
|
|
70
|
+
path: 'grid.evaluation',
|
|
71
|
+
label: 'Evaluation',
|
|
72
|
+
options: ['lines', 'ways', 'anywhere', 'cluster', 'megaways', 'infinity'],
|
|
73
|
+
},
|
|
74
|
+
{ kind: 'toggle', path: 'grid.mask', label: 'Mask reels' },
|
|
75
|
+
{
|
|
76
|
+
kind: 'range',
|
|
77
|
+
path: 'grid.cellWidth',
|
|
78
|
+
label: 'Cell width',
|
|
79
|
+
min: 40,
|
|
80
|
+
max: 160,
|
|
81
|
+
step: 1,
|
|
82
|
+
fallback: 'grid.cellSize',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
kind: 'range',
|
|
86
|
+
path: 'grid.cellHeight',
|
|
87
|
+
label: 'Cell height',
|
|
88
|
+
min: 40,
|
|
89
|
+
max: 160,
|
|
90
|
+
step: 1,
|
|
91
|
+
fallback: 'grid.cellSize',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
kind: 'range',
|
|
95
|
+
path: 'grid.colGap',
|
|
96
|
+
label: 'Column gap',
|
|
97
|
+
min: 0,
|
|
98
|
+
max: 40,
|
|
99
|
+
step: 1,
|
|
100
|
+
fallback: 'grid.gap',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
kind: 'range',
|
|
104
|
+
path: 'grid.rowGap',
|
|
105
|
+
label: 'Row gap',
|
|
106
|
+
min: 0,
|
|
107
|
+
max: 40,
|
|
108
|
+
step: 1,
|
|
109
|
+
fallback: 'grid.gap',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
key: 'motion',
|
|
115
|
+
title: 'Motion',
|
|
116
|
+
controls: [
|
|
117
|
+
{ kind: 'select', path: 'motion.style', label: 'Style', options: ['swap', 'strip', 'cascade-drop'] },
|
|
118
|
+
{ kind: 'range', path: 'motion.spinUp', label: 'Spin-up (ms)', min: 100, max: 2500, step: 10 },
|
|
119
|
+
{ kind: 'range', path: 'motion.hold', label: 'Hold (ms)', min: 0, max: 800, step: 10 },
|
|
120
|
+
{ kind: 'range', path: 'motion.stopStagger', label: 'Stop stagger (ms)', min: 0, max: 400, step: 5 },
|
|
121
|
+
{ kind: 'select', path: 'motion.stopMode', label: 'Stop mode', options: ['sequential', 'sync', 'random'] },
|
|
122
|
+
{ kind: 'select', path: 'motion.stopOrder', label: 'Stop order', options: ['ltr', 'rtl'] },
|
|
123
|
+
{ kind: 'range', path: 'motion.settle.amp', label: 'Settle amp (px)', min: 0, max: 24, step: 1 },
|
|
124
|
+
{ kind: 'range', path: 'motion.settle.ms', label: 'Settle (ms)', min: 60, max: 500, step: 10 },
|
|
125
|
+
{ kind: 'select', path: 'motion.settle.easing', label: 'Settle easing', options: EASINGS },
|
|
126
|
+
{ kind: 'toggle', path: 'motion.squash.enabled', label: 'Squash on land' },
|
|
127
|
+
{ kind: 'range', path: 'motion.squash.scaleX', label: 'Squash X', min: 1, max: 1.5, step: 0.01 },
|
|
128
|
+
{ kind: 'range', path: 'motion.squash.scaleY', label: 'Squash Y', min: 0.5, max: 1, step: 0.01 },
|
|
129
|
+
{ kind: 'toggle', path: 'motion.blur.enabled', label: 'Motion blur' },
|
|
130
|
+
{ kind: 'range', path: 'motion.blur.alpha', label: 'Blur alpha', min: 0.3, max: 1, step: 0.01 },
|
|
131
|
+
{ kind: 'range', path: 'motion.blur.strength', label: 'Blur strength', min: 0, max: 16, step: 1 },
|
|
132
|
+
{ kind: 'toggle', path: 'motion.blur.streaks', label: 'Blur streaks' },
|
|
133
|
+
{ kind: 'range', path: 'motion.turboFactor', label: 'Turbo factor', min: 0.2, max: 1, step: 0.05 },
|
|
134
|
+
{ kind: 'select', path: 'motion.intensity', label: 'Intensity', options: ['full', 'reduced', 'minimal'] },
|
|
135
|
+
{ kind: 'toggle', path: 'motion.slamStop', label: 'Slam stop' },
|
|
136
|
+
{ kind: 'range', path: 'motion.symbolsPerReel', label: 'Tape length', min: 3, max: 24, step: 1 },
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
key: 'anticipation',
|
|
141
|
+
title: 'Anticipation',
|
|
142
|
+
controls: [
|
|
143
|
+
{ kind: 'toggle', path: 'anticipation.enabled', label: 'Enabled' },
|
|
144
|
+
{ kind: 'range', path: 'anticipation.threshold', label: 'Threshold (N−1)', min: 1, max: 6, step: 1 },
|
|
145
|
+
{ kind: 'range', path: 'anticipation.slowdownFactor', label: 'Slowdown', min: 0.1, max: 1, step: 0.05 },
|
|
146
|
+
{ kind: 'range', path: 'anticipation.holdMs', label: 'Hold (ms)', min: 0, max: 1200, step: 50 },
|
|
147
|
+
{ kind: 'toggle', path: 'anticipation.zoom.enabled', label: 'Reel zoom' },
|
|
148
|
+
{ kind: 'range', path: 'anticipation.zoom.scale', label: 'Zoom scale', min: 1, max: 1.6, step: 0.05 },
|
|
149
|
+
{ kind: 'range', path: 'anticipation.zoom.ms', label: 'Zoom (ms)', min: 200, max: 1200, step: 50 },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
key: 'cascade',
|
|
154
|
+
title: 'Cascade / Tumble',
|
|
155
|
+
controls: [
|
|
156
|
+
{ kind: 'toggle', path: 'cascade.enabled', label: 'Enabled' },
|
|
157
|
+
{ kind: 'toggle', path: 'cascade.gravity', label: 'Gravity (survivors slide)' },
|
|
158
|
+
{ kind: 'toggle', path: 'cascade.dimNonWinners', label: 'Dim non-winners' },
|
|
159
|
+
{ kind: 'range', path: 'cascade.dimAlpha', label: 'Dim alpha', min: 0.1, max: 1, step: 0.05 },
|
|
160
|
+
{ kind: 'range', path: 'cascade.perStepDecel', label: 'Per-step decel', min: 0, max: 0.4, step: 0.01 },
|
|
161
|
+
{ kind: 'range', path: 'cascade.perStepDecelCap', label: 'Decel cap', min: 1, max: 3, step: 0.1 },
|
|
162
|
+
{ kind: 'range', path: 'cascade.timings.remove', label: 'Remove (ms)', min: 80, max: 600, step: 10 },
|
|
163
|
+
{ kind: 'range', path: 'cascade.timings.drop', label: 'Drop (ms)', min: 80, max: 600, step: 10 },
|
|
164
|
+
{ kind: 'select', path: 'cascade.easings.drop', label: 'Drop easing', options: EASINGS },
|
|
165
|
+
{ kind: 'toggle', path: 'cascade.multiplier.enabled', label: 'Win multiplier' },
|
|
166
|
+
{ kind: 'select', path: 'cascade.multiplier.mode', label: 'Multiplier mode', options: ['add', 'mul'] },
|
|
167
|
+
{ kind: 'range', path: 'cascade.multiplier.step', label: 'Multiplier step', min: 1, max: 5, step: 1 },
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
key: 'win',
|
|
172
|
+
title: 'Win presentation',
|
|
173
|
+
controls: [
|
|
174
|
+
{ kind: 'range', path: 'win.highlightScale', label: 'Highlight scale', min: 1, max: 1.4, step: 0.01 },
|
|
175
|
+
{ kind: 'toggle', path: 'win.glow', label: 'Glow' },
|
|
176
|
+
{ kind: 'toggle', path: 'win.frameShake.enabled', label: 'Frame shake' },
|
|
177
|
+
{ kind: 'range', path: 'win.frameShake.amp', label: 'Shake amp', min: 0, max: 10, step: 0.5 },
|
|
178
|
+
],
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
key: 'features',
|
|
182
|
+
title: 'Features',
|
|
183
|
+
controls: [
|
|
184
|
+
{ kind: 'toggle', path: 'features.expandingWild.enabled', label: 'Expanding wild' },
|
|
185
|
+
{ kind: 'toggle', path: 'features.expandingWild.toFullReel', label: '· to full reel' },
|
|
186
|
+
{ kind: 'toggle', path: 'features.sticky.enabled', label: 'Sticky symbols' },
|
|
187
|
+
{ kind: 'range', path: 'features.sticky.durationSpins', label: '· duration spins', min: 0, max: 6, step: 1 },
|
|
188
|
+
{ kind: 'toggle', path: 'features.walkingWild.enabled', label: 'Walking wild' },
|
|
189
|
+
{ kind: 'select', path: 'features.walkingWild.direction', label: '· direction', options: ['left', 'right'] },
|
|
190
|
+
{ kind: 'toggle', path: 'features.randomWild.enabled', label: 'Random wild inject' },
|
|
191
|
+
{ kind: 'toggle', path: 'features.randomWild.sticky', label: '· sticky' },
|
|
192
|
+
{ kind: 'toggle', path: 'features.mystery.enabled', label: 'Mystery symbols' },
|
|
193
|
+
{ kind: 'toggle', path: 'features.transform.enabled', label: 'Transform / upgrade' },
|
|
194
|
+
{ kind: 'toggle', path: 'features.transform.upgradeOnly', label: '· upgrade only' },
|
|
195
|
+
{ kind: 'toggle', path: 'features.giant.enabled', label: 'Giant symbol' },
|
|
196
|
+
{ kind: 'range', path: 'features.giant.width', label: '· width', min: 1, max: 5, step: 1 },
|
|
197
|
+
{ kind: 'range', path: 'features.giant.height', label: '· height', min: 1, max: 5, step: 1 },
|
|
198
|
+
{ kind: 'toggle', path: 'features.split.enabled', label: 'Split (xSplit)' },
|
|
199
|
+
{ kind: 'range', path: 'features.split.factor', label: '· factor', min: 2, max: 4, step: 1 },
|
|
200
|
+
{ kind: 'toggle', path: 'features.stacked.enabled', label: 'Stacked symbols' },
|
|
201
|
+
{ kind: 'range', path: 'features.stacked.height', label: '· stack height', min: 2, max: 7, step: 1 },
|
|
202
|
+
{ kind: 'toggle', path: 'features.nudge.enabled', label: 'Nudge / xNudge' },
|
|
203
|
+
{ kind: 'toggle', path: 'features.nudge.toFullReel', label: '· xNudge fill' },
|
|
204
|
+
{ kind: 'toggle', path: 'features.multiplier.enabled', label: 'Multiplier symbols' },
|
|
205
|
+
{ kind: 'select', path: 'features.multiplier.combine', label: '· combine', options: ['additive', 'multiplicative'] },
|
|
206
|
+
{ kind: 'toggle', path: 'features.holdAndSpin.enabled', label: 'Hold & Spin' },
|
|
207
|
+
{ kind: 'range', path: 'features.holdAndSpin.respinsAwarded', label: '· respins', min: 1, max: 5, step: 1 },
|
|
208
|
+
{ kind: 'toggle', path: 'features.reelModifier.enabled', label: 'Reel modifier' },
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// packages/game-engine/src/slot/devtools/index.ts
|
|
2
|
+
//
|
|
3
|
+
// Browser-facing reel devtools: the game-side bridge plus the shared control-panel /
|
|
4
|
+
// diff builders (reused by the reel-lab playground). Pixi-free.
|
|
5
|
+
|
|
6
|
+
export { mountReelDevBridge } from './reelDevBridge';
|
|
7
|
+
export type {
|
|
8
|
+
ReelDevBridge,
|
|
9
|
+
ReelDevBridgeOptions,
|
|
10
|
+
ReelDevBridgeTarget,
|
|
11
|
+
} from './reelDevBridge';
|
|
12
|
+
|
|
13
|
+
export { buildControlPanel, getPath, setPath } from './controlPanel';
|
|
14
|
+
export type { ControlPanelOptions } from './controlPanel';
|
|
15
|
+
|
|
16
|
+
export { REEL_FIELD_SCHEMA, REEL_SECTION_KEYS } from './fieldSchema';
|
|
17
|
+
export type { Control, Section, SectionKey } from './fieldSchema';
|
|
18
|
+
|
|
19
|
+
export { configDiff, diffFromDefaults, emitReelConfigTs } from './configDiff';
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
REEL_READY,
|
|
23
|
+
REEL_APPLY,
|
|
24
|
+
REEL_REQUEST,
|
|
25
|
+
} from './protocol';
|
|
26
|
+
export type {
|
|
27
|
+
ReelDevMessage,
|
|
28
|
+
ReelReadyMessage,
|
|
29
|
+
ReelApplyMessage,
|
|
30
|
+
ReelRequestMessage,
|
|
31
|
+
} from './protocol';
|