);
/** Большая кнопка ribbon. Принимает либо iconName (имя для Icon из Icon.jsx)
* либо icon (готовый JSX, для legacy/особых случаев). */
const RibbonBtn = ({ iconName, icon, label, active, disabled, danger, onClick, title }) => (
);
/** Большая кнопка с акцентным фоном — для Play/Stop в правом углу ленты.
* Принимает iconName (имя для Icon) или icon (готовый JSX). */
const BigBtn = ({ iconName, icon, label, gradient, onClick, title, disabled, glow }) => (
);
const TopRibbon = (props) => {
const {
activeTab, onTabChange,
gizmoMode, onGizmoModeChange,
snap, onSnapChange,
activeTool, onToolChange,
isPlaying, onPlayToggle, onSetSpawn,
hasSelection,
onDuplicate, onAlignToFloor, onDelete,
onClearScene,
onViewPreset,
// === Этап 3: Создание моделей ===
onCreateVoxelModel,
onCreateSmoothModel,
// Открыть Toolbox на нужной вкладке: стандартные / мои / сообщество.
onOpenStandardModels,
onOpenMyModels,
onOpenCommunityModels,
} = props;
return (
{/* === Вкладки === */}
{TABS.map(t => (
))}
{/* === Лента содержимого вкладки === */}
{activeTab === 'home' && (
<>
{/* Подсвечиваем только если activeTool='select' (инструмент создания не активен) */}
onGizmoModeChange('select')}
title="Выбрать без манипулятора"
/>
onGizmoModeChange('move')}
title="Стрелки X/Y/Z для перемещения"
/>
onGizmoModeChange('rotate')}
title="Кольца X/Y/Z для поворота"
/>
onGizmoModeChange('scale')}
title="Кубики X/Y/Z для масштабирования"
/>
Шаг
{SNAP_OPTIONS.map(o => (
))}
onToolChange('block')}
/>
onToolChange('primitive')}
title="Параметрическая фигура (куб/сфера/...)"
/>
onToolChange('gui')}
title="2D-интерфейс игры — перетащи элемент на экран"
/>
onToolChange('terrain')}
title="Создание и редактирование ландшафта (как Terrain в Roblox Studio)"
/>
onToolChange('gen')}
title="Процедурная генерация ландшафта по параметрам noise"
/>
>
)}
{activeTab === 'model' && (
<>
{/* Редактор моделей: создание своих моделей.
Воксельная — кубики 0.25м как Minecraft/MagicaVoxel.
(Гладкий редактор пока не реализован — кнопка убрана.) */}
>
)}
{activeTab === 'test' && (
<>
{/* «Окружение» (время суток / амбиент / музыка) и
«Скин игрока» переехали в иерархию объектов сцены:
🌞 Освещение / 🎵 Звук / 👤 Игрок. */}
>
)}
{activeTab === 'view' && (
<>
onViewPreset('top')}
/>
onViewPreset('front')}
/>
onViewPreset('side')}
/>
onViewPreset('iso')}
/>