From 5f3abba27c7e3de3d5577d413e2e56fc148d1832 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Thu, 17 Sep 2026 10:17:24 +0000 Subject: [PATCH] feat(ui): Minimalist top navigation bar with Drawer slider, Pause & Speed controls --- BUG_REPORTS.md | 7 ++++--- game/css/style.css | 44 +++++++++++++++++---------------------- game/index.html | 52 ++++++++++++++++++++++++++-------------------- game/js/game.js | 39 ++++++++++++++++++++++++++++++++-- reports/bugs.json | 9 ++++++++ 5 files changed, 98 insertions(+), 53 deletions(-) diff --git a/BUG_REPORTS.md b/BUG_REPORTS.md index 4a3c747..39aac23 100644 --- a/BUG_REPORTS.md +++ b/BUG_REPORTS.md @@ -3,14 +3,15 @@ > Данный файл обновляется автоматически при поступлении новых баг-репортов из игры. > При каждом обновлении и новой итерации разработки ассистент анализирует этот список. -**Всего репортов:** 12 | **Последнее обновление:** 2026-09-16 11:20:33 +**Всего репортов:** 13 | **Последнее обновление:** 2026-09-17 09:57:15 | ID | Дата | Автор | Категория | Статус | Описание | Ответ / Фикс | |:---:|:---:|:---|:---:|:---:|:---|:---| +| 13 | 2026-09-17 09:57 | Klitr | 🎨 UI | 🔴 Новый | Здоровье зомби не видно за границей игрового поля | — | | 12 | 2026-09-16 11:20 | Admin | 🔴 Баг | ✅ Исправлено | Боулинг не работает, баг как и у Рогалика | Исправлено в v2.5: устранен ReferenceError в zombie.draw, налажен спавн и рикошет шаров боулинга. | | 11 | 2026-09-16 11:19 | Admin | 🔴 Баг | ✅ Исправлено | "Я Зомби" Аналогичная проблема как и в режиме Зомбосс | Исправлено в v2.5: таймер заставки и состояние волны теперь корректно обновляются без раннего выхода из цикла. | -| 10 | 2026-09-16 11:19 | Admin | 🔴 Баг | ✅ Исправлено | Режим Зомбос не работает, не проходит начальная заставка... игра не начинается | Исправлено в v2.5: убран ранний return из WaveSystem.update, блокировавший отсчет заставки и запуск битвы с боссом. | -| 9 | 2026-09-16 11:18 | Admin | 🔴 Баг | ✅ Исправлено | Достижения не засчитываются, нужно их сохранять | Исправлено в v2.5: исправлено затирание данных в PvZAuth.saveUserData (теперь выполняется merge), добавлен fallback в localStorage для гостей, подключены триггеры nut_wall и ice_age. | +| 10 | 2026-09-16 11:19 | Admin | 🔴 Баг | ✅ Исправлено | Режим Зомбос не работает, не проходит начальная заставка... игра не начинается | Исправлено в v2.5: убран ранний return из WaveSystem.update, блокировавший отсчет начальной заставки и запуск битвы с боссом. | +| 9 | 2026-09-16 11:18 | Admin | 🔴 Баг | ✅ Исправлено | Достижения не засчитываются, нужно их сохранять | Исправлено в v2.5: исправлено затирание объекта данных в PvZAuth.saveUserData (теперь выполняется merge), добавлен fallback в localStorage для гостей, подключены триггеры nut_wall и ice_age. | | 8 | 2026-09-16 11:18 | Admin | 🔴 Баг | ✅ Исправлено | Рогалик. Режим имеет такой же баг как и режим выживания. | Исправлено в v2.5: устранен вылет при отрисовке зомби; исправлена ссылка на allCards при драфте семян; корректная инициализация колоды этажа. | | 7 | 2026-09-16 11:08 | Admin | 🔴 Баг | ✅ Исправлено | Дзен сад не работает, улитка бегает и начинает крутится на месте (зависает) растения ничего не дают, фича не работает | Исправлено в v2.5: (1) устранено бесконечное дрожание направления улитки за счет пошагового приближения; (2) сбор монет на полу; (3) инструмент 'лейка' активен по умолчанию; (4) фоновое созревание и начисление монет. | | 6 | 2026-09-16 11:07 | Admin | 🔴 Баг | ✅ Исправлено | Не происходит смена режима, после выхода в главное меню, надо перезагружать страницу. Баг. | Исправлено в v2.5: переключение режимов в меню теперь синхронно обновляет currentMode, закрывает все фоновые модалы, сбрасывает колоды и музыку, инициализируя корректный уровень для выбранного режима. | diff --git a/game/css/style.css b/game/css/style.css index 0133cf0..a951743 100644 --- a/game/css/style.css +++ b/game/css/style.css @@ -28,19 +28,19 @@ body { max-width: 98vw; } -/* Clean Flexbox Top Navigation Bar (Adaptive & Responsive) */ +/* Minimalist Clean Top Navigation Bar */ .top-nav-bar { width: 100%; background: linear-gradient(to bottom, #3e2723, #2a160c); border: 3px solid #5d4037; border-bottom: 2px solid #231209; border-radius: 10px 10px 0 0; - padding: 4px 8px; + padding: 4px 10px; display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: center; - gap: 4px; + gap: 8px; box-shadow: 0 4px 10px rgba(0,0,0,0.5); z-index: 10; box-sizing: border-box; @@ -50,23 +50,27 @@ body { display: flex; align-items: center; flex-wrap: nowrap; - gap: 4px; + gap: 6px; } -.desktop-nav-links { - display: flex; - align-items: center; - gap: 4px; +.btn-menu-main { + background: linear-gradient(135deg, #e65100, #bf360c) !important; + color: #fff !important; + border-color: #ffb74d !important; + font-size: 12px !important; + padding: 5px 12px !important; + box-shadow: 0 2px 6px rgba(230, 81, 0, 0.4) !important; } -.btn-drawer-toggle { - display: none; - background: #ff8f00; - color: #fff; - border-color: #ffd54f; +.btn-menu-main:hover { + background: linear-gradient(135deg, #f57c00, #d84315) !important; + border-color: #ffe082 !important; + transform: translateY(-1px); } -.btn-drawer-toggle:hover { - background: #ffa000; + +.btn-icon-nav { + padding: 4px 10px; + font-size: 11px; } .nav-btn { @@ -93,16 +97,6 @@ body { transform: translateY(1px); } -.btn-bug-nav { - border-color: #4fc3f7; - color: #e1f5fe; -} - -.btn-bug-nav:hover { - background: #0277bd; - border-color: #81d4fa; -} - /* User Profile Badge */ .profile-badge { display: flex; diff --git a/game/index.html b/game/index.html index 10410bd..3e2dbf9 100644 --- a/game/index.html +++ b/game/index.html @@ -16,44 +16,48 @@
- +
- + diff --git a/game/js/game.js b/game/js/game.js index bc9d0b3..e2994b4 100644 --- a/game/js/game.js +++ b/game/js/game.js @@ -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' }, diff --git a/reports/bugs.json b/reports/bugs.json index 2bb086d..c0757dc 100644 --- a/reports/bugs.json +++ b/reports/bugs.json @@ -106,5 +106,14 @@ "status": "исправлено", "timestamp": "2026-09-16 11:20", "adminReply": "Исправлено в v2.5: устранен ReferenceError в zombie.draw, налажен спавн и рикошет шаров боулинга." + }, + { + "id": 13, + "author": "Klitr", + "category": "visual", + "text": "Здоровье зомби не видно за границей игрового поля", + "status": "новый", + "timestamp": "2026-09-17 09:57", + "adminReply": null } ] \ No newline at end of file