Working on cleanup
This commit is contained in:
1 parent
579f4886d1
commit
6aff22ec53
7 files changed
+112
-595
No files matched your search
+4
-127
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user