Инфа о том как сделать сетевую игру, какие менюшки должны быть и как это всё должно работать по сети
- отображение соединений с серваком и клиентами при бродкасте
- отображение факта нажатия на кнопку у сетевых игроков - все в таблице и подсвечивается кто что нажал
- включить фоновую рассылку инфы о сервере
- показать интерфейс настройки сервера
- при готовности привязаться к клиентам и начать с ними игру
- искать рассылки сервера в фоновом режиме
- показать интерфейс чтобы выйти
- если будут найдены рассылки, законектиться к серверу и показать лобби для клиента
- пытаться законнектиться в фоновом режиме, если получится, перейти в лобби для клиента
- показать кнопку на отмену или замену адреса
- кнопка на голосование о готовности
- кнопка чата
- кнопки на выход
- другие кнопки соответствующие клиенту или серверу (это всё одна и та же сцена, но с разной выдачей кнопок)
- если клиент подключился после сбоя, то его сразу отправляю в игру и он ожидает синхронизации
- записывать в стек нажатых кнопок свои кнопки и предсказанные кнопки других игроков
- пытаться получить фоном кнопки других игроков и команды
- если кнопки не совпали, откатиться назад до правильных кнопок и в ускоренном виде с правильными кнопками игроков обновить игру до текущего состояния
- если не удался ролбэк или история кнопок не совпала с принятыми пакетами, то разослать сигнал синхронизации. Сервер будет высылать данные игры для синхронизации
- неправильные пакеты надо игнорить
- если инфа о кнопках в определённых фреймах не была получена, то выслать сигнал серверу на получение кнопок этого фрейма
- если клиент отрубился от сервера, его игрок удаляется, а в предсказаниях кнопок жмётся бездействие
- если игрок вылетел, серверу предложится ожидать переподключение игрока. Если адрес игрока совпадёт, то его можно подключить заново и начать синхронизацию игры.
- в реплей пишется всё, даже инфа о вылетах и какие игроки играли. В меню запуска реплеев игра сама определит сетевая ли это была игра
- начать синхронизацию игры
- можно выгнать игрока
- писать в чат
- завершить игру
- писать в чат
- завершить игру
- все объекты игры
- текущий номер фрейма
- текущие нажатые клавиши
- текущая сцена
- позиция уровня
- текущая задача уровня
- текущий глобальный эффект/задача
- контрольная сумма данных текущего ролбека
- вся игра должна уметь сохранять и загружать любое своё состояние
- текущие данные сида рандома xoroshiro
-
Server broadcast
- его смотрит клиент, когда ищет сервер или заходит в лобби по адресу- short name: char32[max_nick]
- num connected players: u16
- game ver: bytes
-
Client connect
-
Ping
- при его получении меняют флаг ресенд и возвращают. Принявшая сторона вычисляет пинг- receive time: double
- resend me: bool
-
Need sync
- есть таймаут игрового кадра, при котором не учитывается этот пакет, если же проверка проходится, начинается синхронизация по tcp- game frame
-
Buttons
- этим перекидываются игроки- game frame
- buttons struct
-
pause
- запрос паузы. После возврата в игру запускается синхронизация. В паузе инпуты кнопок не отправляются- game frame
-
Chat msg
- на размер текста лимит 8К символов- game frame
- text len: u32
- chars: u32
-
Player leave
- игрок отключается сам- tag only
- Если не знаете какой IP поставить себе, ставьте 0 или тот что у вас в Radmin/Hamachi
- Для подключение в другому игроку введите его белый IP или IP из Radmin/Hamachi
- Если хотите подключиться к самому себе, то настройте свой IP как 127.0.0.2, а IP сервера как 127.0.0.1