float Deg2Rad(float deg) {
return deg * 3.14159265358979323846 / 180;
}
void misc::FixMovement(CUserCmd* cmd, float yaw)
{
float oldYaw = yaw + (yaw < 0.0f ? 360.0f : 0.0f);
float newYaw = cmd->viewangles.yaw + (cmd->viewangles.yaw < 0.0f ? 360.0f : 0.0f);
float yawDelta = newYaw < oldYaw ? fabsf(newYaw - oldYaw) : 360.0f - fabsf(newYaw - oldYaw);
yawDelta = 360.0f - yawDelta;
const float forwardmove = cmd->forwardmove;
const float sidemove = cmd->sidemove;
cmd->forwardmove = std::cos(Deg2Rad(yawDelta)) * forwardmove + std::cos(Deg2Rad(yawDelta + 90.0f)) * sidemove;
cmd->sidemove = std::sin(Deg2Rad(yawDelta)) * forwardmove + std::sin(Deg2Rad(yawDelta + 90.0f)) * sidemove;
}