Coop с AI/базой (соло-старт), реванш, чистые URL, доработки клиента
Сервер (Game.hpp/cpp): - coop-режим: AI-противники (волна 8, до 3 одновременно), простое преследование базы с рандомизацией, база с укрытием из кирпича. - Комната стартует соло (1 игрок), второй может подключиться позже. - Fix: хитбокс пули по базе брал радиус танка вместо пули. - Fix: AI при столкновении со стеной теперь сразу перерешает направление, а не долбит в одну точку до 3с — без этого база падала за секунды. Клиент: - Танк: гусеницы, башня, заметный ствол (было — незаметный нубик). - Рендер базы (укрытие/флаг), AI-танки — отдельным оттенком зелёного. - Экран победы/поражения — крупный glitch-текст на весь оверлей вместо строки текста; кнопки "играть ещё" (без reload) и "в лобби". - Блок кнопок управления (D-pad + огонь) справа от игрового поля. - Лобби: coop стартует по кнопке "готов" в одиночку. nginx: try_files с fallback на .html — чистые URL (/projects, /game) без расширения, старые /projects.html и т.п. продолжают работать.
This commit is contained in:
@@ -52,14 +52,12 @@ function renderLobbyView() {
|
||||
function renderRoomView() {
|
||||
const full = currentRoom.players.length >= 2;
|
||||
let statusLine = '';
|
||||
let readyBtn = '';
|
||||
if (currentRoom.mode !== 'pvp') {
|
||||
statusLine = '<p class="lobby-error">coop ещё не реализован (этап 5)</p>';
|
||||
} else if (!full) {
|
||||
let readyBtn = '<button data-action="ready">готов</button>';
|
||||
if (currentRoom.mode === 'pvp' && !full) {
|
||||
statusLine = '<p class="lobby-error">жду второго игрока (1/2) — открой комнату во второй вкладке/другим человеком</p>';
|
||||
readyBtn = '<button data-action="ready" disabled>готов</button>';
|
||||
} else {
|
||||
readyBtn = '<button data-action="ready">готов</button>';
|
||||
} else if (currentRoom.mode === 'coop' && !full) {
|
||||
statusLine = '<p class="lobby-error">можно начать соло, второй игрок сможет подключиться позже</p>';
|
||||
}
|
||||
container.innerHTML = `
|
||||
<div class="lobby-panel">
|
||||
@@ -83,6 +81,19 @@ function render() {
|
||||
}
|
||||
}
|
||||
|
||||
// Вызывается из battle.js по кнопкам экрана победы/поражения.
|
||||
export function returnToLobbyContainer() {
|
||||
document.getElementById('battlecity-canvas-container').style.display = 'none';
|
||||
container.style.display = '';
|
||||
render();
|
||||
}
|
||||
|
||||
export function leaveRoomAndReturn() {
|
||||
currentRoom = null;
|
||||
net.leaveRoom();
|
||||
returnToLobbyContainer();
|
||||
}
|
||||
|
||||
container?.addEventListener('click', (e) => {
|
||||
const btn = e.target.closest('[data-action]');
|
||||
if (!btn) return;
|
||||
|
||||
Reference in New Issue
Block a user