From dcf3df68f2933af4f79cee84c3caf121dba79676 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 18 Jul 2019 10:58:41 -0700 Subject: [PATCH] avoid NaN input for MyAvatar's scripted motor --- interface/src/avatar/MyAvatar.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index acb199bb97..c492b84c2e 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2751,19 +2751,23 @@ QString MyAvatar::getScriptedMotorMode() const { } void MyAvatar::setScriptedMotorVelocity(const glm::vec3& velocity) { - float MAX_SCRIPTED_MOTOR_SPEED = 500.0f; - _scriptedMotorVelocity = velocity; - float speed = glm::length(_scriptedMotorVelocity); - if (speed > MAX_SCRIPTED_MOTOR_SPEED) { - _scriptedMotorVelocity *= MAX_SCRIPTED_MOTOR_SPEED / speed; + float newSpeed = glm::length(velocity); + if (!glm::isnan(newSpeed)) { + _scriptedMotorVelocity = velocity; + constexpr float MAX_SCRIPTED_MOTOR_SPEED = 500.0f; + if (newSpeed > MAX_SCRIPTED_MOTOR_SPEED) { + _scriptedMotorVelocity *= MAX_SCRIPTED_MOTOR_SPEED / newSpeed; + } } } void MyAvatar::setScriptedMotorTimescale(float timescale) { - // we clamp the timescale on the large side (instead of just the low side) to prevent - // obnoxiously large values from introducing NaN into avatar's velocity - _scriptedMotorTimescale = glm::clamp(timescale, MIN_SCRIPTED_MOTOR_TIMESCALE, - DEFAULT_SCRIPTED_MOTOR_TIMESCALE); + if (!glm::isnan(timescale)) { + // we clamp the timescale on the large side (instead of just the low side) to prevent + // obnoxiously large values from introducing NaN into avatar's velocity + _scriptedMotorTimescale = glm::clamp(timescale, MIN_SCRIPTED_MOTOR_TIMESCALE, + DEFAULT_SCRIPTED_MOTOR_TIMESCALE); + } } void MyAvatar::setScriptedMotorFrame(QString frame) {