orbit/data/actionbar.json

71 lines
2.9 KiB
JSON

{
"_comment": "COMMAND DECK — the cyberpunk bar across the bottom of the screen (rendered by js/ui/ActionBar.js). Six evenly spaced slots: `buttons` is the ORDERED list — give a slot an `id` (the action it will fire) + `label` + `accent`, or leave both `null` for a reserved slot. Buttons currently fire `onAction` (see GameScene); the behavior behind them comes next. Everything visual is procedural (no image assets) and tunable here: layout in `height`/`margin`/`padding`/`button`, palette in `colors`, CRT scanlines in `scanline`, motion in `animation` (boot flicker, the rail comet, the glitch bursts, the RGB pull-apart).",
"enabled": true,
"height": 56,
"margin": { "left": 20, "right": 20, "bottom": 12 },
"padding": 16,
"button": {
"widthFactor": 0.72,
"maxWidth": 190,
"notch": 10,
"fontSize": 14,
"letterSpacing": 2.5
},
"buttons": [
{ "id": "research", "label": "Research", "accent": "#00e5ff" },
{ "id": "build", "label": "Build", "accent": "#ffc94d" },
{ "id": "ship", "label": "Ship", "accent": "#7ce8a4" },
{ "id": null, "label": null },
{ "id": null, "label": null },
{ "id": "menu", "label": "Menu", "accent": "#ff2d6f" }
],
"surface": {
"_comment": "Deck layout for the surface (SurfaceScene): `research` is replaced by `shop` (no-op for now) and `takeoff` sits to the left of `menu`. SurfaceScene passes this list to ActionBar via its `buttons` option; everything else (height, colors, animation) is shared with the flight deck.",
"buttons": [
{ "id": "shop", "label": "Shop", "accent": "#00e5ff" },
{ "id": "build", "label": "Build", "accent": "#ffc94d" },
{ "id": "ship", "label": "Ship", "accent": "#7ce8a4" },
{ "id": null, "label": null },
{ "id": "takeoff", "label": "Take Off", "accent": "#7ce8a4" },
{ "id": "menu", "label": "Menu", "accent": "#ff2d6f" }
]
},
"colors": {
"panelTop": "#101c36",
"panelBottom": "#04070e",
"slotBg": "#0b1322",
"slotBorder": "#22405f",
"rail": "#00e5ff",
"railBottom": "#ff2d6f",
"text": "#eaf6ff",
"reserved": "#3d4c74",
"hatch": "#78b4ff"
},
"scanline": {
"_comment": "CRT scanlines over the bar + buttons — the menu's recipe (one dark row per pitch rows). Defaults follow theme.overlay.scanline; override here for the deck only.",
"pitch": 3,
"alpha": 0.14
},
"animation": {
"bootStagger": 70,
"rgb": {
"_comment": "RGB pull-apart on labels/panel (the menu title's GlitchText technique): idleOffset px of constant chromatic fringe, burstOffset extra px at full burst, idleAlpha/burstAlpha ghost strength.",
"idleOffset": 1.8,
"burstOffset": 6,
"idleAlpha": 0.4,
"burstAlpha": 0.55
},
"comet": {
"enabled": true,
"everyMs": [3600, 7800],
"durationMs": 950
},
"glitch": {
"enabled": true,
"intervalMs": [3500, 9000],
"durationMs": [240, 480],
"slices": [3, 6]
}
}
}