feat(ui): Minimalist top navigation bar with Drawer slider, Pause & Speed controls

This commit is contained in:
Antigravity committed 2026-09-17 10:17:24 +00:00
1 parent 2cd343e8ef
commit 5f3abba27c
5 files changed
+98 -53

No files matched your search

+37 -2
View File
@@ -726,9 +726,10 @@ window.GameEngine = class GameEngine {
}
bindUI() {
// Mobile Drawer Handlers
// Mobile / Main Drawer Handlers
const mobileDrawer = document.getElementById('mobile-drawer');
const drawerBackdrop = document.getElementById('drawer-backdrop');
const btnMainMenuDrawer = document.getElementById('btn-main-menu-drawer');
const btnDrawerOpen = document.getElementById('btn-mobile-drawer');
const btnDrawerClose = document.getElementById('btn-drawer-close');
@@ -743,11 +744,45 @@ window.GameEngine = class GameEngine {
if (drawerBackdrop) drawerBackdrop.classList.add('hidden');
};
if (btnMainMenuDrawer) btnMainMenuDrawer.addEventListener('click', openDrawer);
if (btnDrawerOpen) btnDrawerOpen.addEventListener('click', openDrawer);
if (btnDrawerClose) btnDrawerClose.addEventListener('click', closeDrawer);
if (drawerBackdrop) drawerBackdrop.addEventListener('click', closeDrawer);
// Mobile Drawer Items delegation to corresponding modal open triggers
// Main Screen action from Drawer
const btnDrawerMain = document.getElementById('btn-drawer-main-screen');
if (btnDrawerMain) {
btnDrawerMain.addEventListener('click', () => {
closeDrawer();
this.openMainMenu();
});
}
// Theme & Music actions from Drawer
const btnDrawerTheme = document.getElementById('btn-drawer-theme');
const drawerThemeLabel = document.getElementById('drawer-theme-label');
if (btnDrawerTheme) {
btnDrawerTheme.addEventListener('click', () => {
const themeNames = { classic: 'Классика', cyberpunk: 'Киберпанк', retro8bit: 'Ретро 8-bit', winter: 'Зима' };
const keys = Object.keys(themeNames);
const nextIndex = (keys.indexOf(this.currentTheme) + 1) % keys.length;
this.applyTheme(keys[nextIndex]);
if (drawerThemeLabel) drawerThemeLabel.textContent = themeNames[this.currentTheme];
this.triggerHaptic(15);
});
}
const btnDrawerMusic = document.getElementById('btn-drawer-music');
const drawerMusicLabel = document.getElementById('drawer-music-label');
if (btnDrawerMusic) {
btnDrawerMusic.addEventListener('click', () => {
const isPlaying = window.PvZAudio ? window.PvZAudio.toggleMusic() : false;
if (drawerMusicLabel) drawerMusicLabel.textContent = isPlaying ? 'Вкл' : 'Выкл';
this.triggerHaptic(15);
});
}
// Drawer Items delegation to corresponding modal open triggers
const drawerActions = [
{ id: 'btn-drawer-campaign', target: 'btn-campaign-open' },
{ id: 'btn-drawer-workshop', target: 'btn-workshop' },