Propagate ROT and VEL

This commit is contained in:
Vladislav Khorev committed 2026-01-17 11:05:04 +03:00
1 parent ff95163bcd
commit fbc420e894
3 files changed
+76 -31

No files matched your search

+15 -29
View File
@@ -768,8 +768,21 @@ namespace ZL
}
else {
// Если джойстик не зажат — сбрасываем дискретные значения и плавно замедляем вращение
Environment::lastSentAngle = -1;
Environment::lastSentMagnitude = 0.0f;
int discreteAngle = -1;
float discreteMag = 0.0f;
if (discreteAngle != Environment::lastSentAngle || discreteMag != Environment::lastSentMagnitude) {
Environment::lastSentAngle = discreteAngle;
Environment::lastSentMagnitude = discreteMag;
auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now().time_since_epoch()
).count();
// Формируем сетевой пакет
// Нам нужно отправить: дискретный угол, дискретную силу и текущую матрицу/позицию для синхронизации
std::string msg = "ROT:" + std::to_string(now_ms) + ":" + std::to_string(discreteAngle) + ":" + std::to_string(discreteMag);
networkClient->Send(msg);
}
float currentSpeed = Environment::currentAngularVelocity.norm();
@@ -802,33 +815,6 @@ namespace ZL
Environment::shipPosition = Environment::shipPosition + velocityDirectionAdjusted;
}
/*
if (Environment::tapDownHold) {
float diffx = Environment::tapDownCurrentPos(0) - Environment::tapDownStartPos(0);
float diffy = Environment::tapDownCurrentPos(1) - Environment::tapDownStartPos(1);
if (abs(diffy) > 5.0 || abs(diffx) > 5.0) //threshold
{
float rotationPower = sqrtf(diffx * diffx + diffy * diffy);
float deltaAlpha = rotationPower * delta * static_cast<float>(M_PI) / 500000.f;
Eigen::Vector3f rotationDirection(diffy, diffx, 0.0f);
rotationDirection.normalize(); // Eigen-way нормализация
// Создаем кватернион через AngleAxis
// Конструктор принимает (угол_в_радианах, ось_вращения)
Eigen::Quaternionf rotateQuat(Eigen::AngleAxisf(deltaAlpha, rotationDirection));
Matrix3f rotateMat = rotateQuat.toRotationMatrix();
Environment::shipMatrix = Environment::shipMatrix * rotateMat;
Environment::inverseShipMatrix = Environment::shipMatrix.inverse();
}
}*/
for (auto& p : projectiles) {
if (p && p->isActive()) {
p->update(static_cast<float>(delta), renderer);