diff --git a/client/src/composables/game/useGamePorts.js b/client/src/composables/game/useGamePorts.js index 7683d9d..27056b9 100644 --- a/client/src/composables/game/useGamePorts.js +++ b/client/src/composables/game/useGamePorts.js @@ -1051,6 +1051,67 @@ export function useGamePorts() { } break + case 'notshot': + // Попытка выстрела на пустом порту - красная подсветка + logger.info(`🔴 notshot на порту ${portNumber} - пустой порт`) + ports[portNumber].highlight = 'miss' + + // Автоочистка через 1 секунду + setTimeout(() => { + if (ports[portNumber].highlight === 'miss') { + ports[portNumber].highlight = null + } + }, 1000) + break + + case 'startshot': + // Начало выстрела - желтая подсветка + logger.info(`🟡 startshot на порту ${portNumber}`) + ports[portNumber].highlight = 'shot' + + // Автоочистка через 2 секунды (если не придет shot) + setTimeout(() => { + if (ports[portNumber].highlight === 'shot') { + ports[portNumber].highlight = null + } + }, 2000) + break + + case 'shot': + // Успешный выстрел - зеленая подсветка + logger.info(`🟢 shot на порту ${portNumber}, осталось патронов: ${data.patr}`) + ports[portNumber].highlight = 'hit' + + // Обновляем патроны если пришли в data + if (data.patr !== undefined) { + ports[portNumber].patr = data.patr + } + if (data.patrOk !== undefined) { + ports[portNumber].patrOk = data.patrOk + } + + // Автоочистка через 1 секунду + setTimeout(() => { + if (ports[portNumber].highlight === 'hit') { + ports[portNumber].highlight = null + } + }, 1000) + break + + case 'shotErr': + case 'shotErrA': + // Ошибка выстрела (осечка или замыкание) - красная подсветка + logger.info(`🔴 ${data.do} на порту ${portNumber}`) + ports[portNumber].highlight = 'miss' + + // Автоочистка через 2 секунды + setTimeout(() => { + if (ports[portNumber].highlight === 'miss') { + ports[portNumber].highlight = null + } + }, 2000) + break + default: logger.warn('Обрабатываю неизвестное сообщение порта как общее обновление:', data.do) // Пытаемся обработать как общее обновление порта diff --git a/client/src/composables/useWebSocket.js b/client/src/composables/useWebSocket.js index bb7dea6..208eaf7 100644 --- a/client/src/composables/useWebSocket.js +++ b/client/src/composables/useWebSocket.js @@ -55,6 +55,8 @@ export function useWebSocket() { data.do === 'start' || data.do === 'endGame' || data.do === 'pause' || data.do === 'resume' || data.do === 'bonus' || data.do === 'deleteGamer' || data.do === 'cancelGame' || data.do === 'move' || data.do === 'moveGamer' || + data.do === 'shot' || data.do === 'startshot' || data.do === 'notshot' || + data.do === 'shotErr' || data.do === 'shotErrA' || data.do === 'sharikStartGame' || data.do === 'sharikEndGame' || data.do === 'sharikCancelGame' || data.do === 'sharikDeleteGamer') { // Передаем системные сообщения в глобальный обработчик @@ -66,6 +68,8 @@ export function useWebSocket() { if (data.do === 'start' || data.do === 'endGame' || data.do === 'pause' || data.do === 'resume' || data.do === 'bonus' || data.do === 'deleteGamer' || data.do === 'cancelGame' || data.do === 'move' || data.do === 'moveGamer' || + data.do === 'shot' || data.do === 'startshot' || data.do === 'notshot' || + data.do === 'shotErr' || data.do === 'shotErrA' || data.do === 'sharikStartGame' || data.do === 'sharikEndGame' || data.do === 'sharikCancelGame' || data.do === 'sharikDeleteGamer') { // Продолжаем выполнение для promise обработки