Working on cleanup

This commit is contained in:
Vladislav Khorev committed 2026-01-18 11:29:15 +03:00
1 parent 579f4886d1
commit 6aff22ec53
7 files changed
+112 -595

No files matched your search

+4 -127
View File
@@ -587,7 +587,6 @@ namespace ZL
// Итерируемся по актуальным данным из extrapolateRemotePlayers
for (auto const& [id, remotePlayer] : latestRemotePlayers) {
//if (id == networkClient->GetClientId()) continue; // Не рисуем себя через этот цикл
if (!remotePlayer.canFetchClientStateAtTime(now))
{
@@ -612,28 +611,6 @@ namespace ZL
// 3. Поворот врага
renderer.RotateMatrix(playerState.rotation);
/*
// 1. Камера и вид игрока
renderer.TranslateMatrix({ 0, 0, -1.0f * Environment::zoom });
renderer.RotateMatrix(Environment::inverseShipMatrix);
// 2. Относительная позиция (ОЧЕНЬ ВАЖНО)
// Мы перемещаем объект в позицию (Враг - Я)
// Если враг в 44928, а я в 45000, результат будет -72 по Z.
// Поскольку камера смотрит в -Z, корабль должен быть ПЕРЕД нами.
Eigen::Vector3f relativePos = playerState.position - Environment::shipPosition;
renderer.TranslateMatrix(relativePos);
// 3. Поворот врага
renderer.RotateMatrix(playerState.rotation);
// 4. Смещение самого меша (если оно есть в drawShip, оно должно быть и тут)
// В твоем drawShip() есть: renderer.TranslateMatrix({ 0, -6.f, 0 });
renderer.TranslateMatrix({ 0, -6.f, 0 });
*/
renderer.DrawVertexRenderStruct(spaceship);
renderer.PopMatrix();
}
@@ -673,14 +650,11 @@ namespace ZL
sparkEmitter.update(static_cast<float>(delta));
planetObject.update(static_cast<float>(delta));
extrapolateRemotePlayers();
//bool sendRotation = false;
static float pingTimer = 0.0f;
pingTimer += delta;
if (pingTimer >= 1000.0f) {
std::string pingMsg = "PING:" + std::to_string(now_ms) + ":" + formPingMessageContent();
std::string pingMsg = "UPD:" + std::to_string(now_ms) + ":" + formPingMessageContent();
networkClient->Send(pingMsg);
std::cout << "Sending: " << pingMsg << std::endl;
@@ -691,8 +665,7 @@ namespace ZL
{
Environment::shipSelectedVelocity = newShipVelocity;
std::string msg = "VEL:" + std::to_string(now_ms) + ":" + std::to_string(Environment::shipSelectedVelocity);
msg = msg + ":" + formPingMessageContent();
std::string msg = "UPD:" + std::to_string(now_ms) + ":" + formPingMessageContent();
networkClient->Send(msg);
//}
}
@@ -725,22 +698,9 @@ namespace ZL
Environment::lastSentAngle = discreteAngle;
Environment::lastSentMagnitude = discreteMag;
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(Environment::lastSentAngle) + ":" + std::to_string(Environment::lastSentMagnitude);
msg = msg + ":" + formPingMessageContent();
std::string msg = "UPD:" + std::to_string(now_ms) + ":" + formPingMessageContent();
networkClient->Send(msg);
std::cout << "Sending: " << msg << std::endl;
//sendRotation = true;
/*auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch()
).count();
// Формируем сетевой пакет
// Нам нужно отправить: дискретный угол, дискретную силу и текущую матрицу/позицию для синхронизации
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(discreteAngle) + ":" + std::to_string(discreteMag);
msg = msg + ":" + formPingMessageContent();
networkClient->Send(msg);
std::cout << "Sending: " << msg << std::endl;*/
}
// 4. Логика вращения (угловое ускорение)
@@ -799,23 +759,9 @@ namespace ZL
Environment::lastSentAngle = discreteAngle;
Environment::lastSentMagnitude = discreteMag;
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(Environment::lastSentAngle) + ":" + std::to_string(Environment::lastSentMagnitude);
msg = msg + ":" + formPingMessageContent();
std::string msg = "UPD:" + std::to_string(now_ms) + ":" + formPingMessageContent();
networkClient->Send(msg);
std::cout << "Sending: " << msg << std::endl;
//sendRotation = true;
/*
auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch()
).count();
// Формируем сетевой пакет
// Нам нужно отправить: дискретный угол, дискретную силу и текущую матрицу/позицию для синхронизации
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(discreteAngle) + ":" + std::to_string(discreteMag);
msg = msg + ":" + formPingMessageContent();
networkClient->Send(msg);
std::cout << "Sending: " << msg << std::endl;*/
}
@@ -861,7 +807,6 @@ namespace ZL
}
}
//std::cout << "shipVelocity=" << Environment::shipVelocity << " delta=" << delta << std::endl;
// Движение вперед (существующая логика)
if (fabs(Environment::shipVelocity) > 0.01f)
{
@@ -870,20 +815,6 @@ namespace ZL
Environment::shipPosition = Environment::shipPosition + velocityDirectionAdjusted;
}
/*
if (sendRotation)
{
sendRotation = false;
// Формируем сетевой пакет
// Нам нужно отправить: дискретный угол, дискретную силу и текущую матрицу/позицию для синхронизации
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(Environment::lastSentAngle) + ":" + std::to_string(Environment::lastSentMagnitude);
msg = msg + ":" + formPingMessageContent();
networkClient->Send(msg);
std::cout << "Sending: " << msg << std::endl;
}
*/
for (auto& p : projectiles) {
if (p && p->isActive()) {
p->update(static_cast<float>(delta), renderer);
@@ -1166,59 +1097,6 @@ namespace ZL
}
}
void Game::extrapolateRemotePlayers() {
/*auto now = std::chrono::system_clock::now();
//Apply server delay:
now -= std::chrono::milliseconds(CLIENT_DELAY);
latestRemotePlayers = networkClient->getRemotePlayers();
for (auto& [id, rp] : latestRemotePlayers) {
}*/
/*
*
auto now = std::chrono::system_clock::now();
//Apply server delay:
now -= std::chrono::milliseconds(CLIENT_DELAY);
latestRemotePlayers = networkClient->getRemotePlayers();
for (auto& [id, rp] : latestRemotePlayers) {
// 1. Рассчитываем, сколько времени прошло с момента получения последнего пакета (в секундах)
auto deltaMs = std::chrono::duration_cast<std::chrono::milliseconds>(
now - rp.lastUpdateServerTime
).count();
//float age_s = std::chrono::duration<float>(now - rp.lastUpdateServerTime).count();
// Ограничим экстраполяцию (например, не более 2 секунд),
// чтобы в случае лага корабли не улетали в бесконечность
if (deltaMs < 0) deltaMs = 0;
if (deltaMs > 2000) deltaMs = 2000;
// 2. Сбрасываем физическое состояние rp.state в значения из последнего пакета
// (Это важно: мы всегда экстраполируем от последнего достоверного серверного состояния)
// В WebSocketClient::updateRemotePlayer нужно убедиться, что rp.state обновляется данными из пакета.
// 3. Вызываем физику, чтобы "догнать" реальное время
// Мы передаем age_s как один большой шаг симуляции
rp.simulate_physics(deltaMs);
rp.lastUpdateServerTime = now;
// Теперь rp.state.position и rp.state.rotation содержат актуальные
// предсказанные данные для рендеринга в текущем кадре.
}
networkClient->updateRemotePlayers(latestRemotePlayers);
*/
}
std::string Game::formPingMessageContent()
{
Eigen::Quaternionf q(Environment::shipMatrix);
@@ -1238,7 +1116,6 @@ namespace ZL
+ std::to_string(Environment::lastSentMagnitude) + ":" // Используем те же static переменные из блока ROT
+ std::to_string(Environment::lastSentAngle);
return pingMsg;
}