Fix zero-interval repeat on pick/knob animation
See: https://sourceforge.net/p/flightgear/codetickets/2241/ Note did not adjust bug in knob-animation ignoring repeatable flag (always marked repeatable) since this might break some aircraft.
This commit is contained in:
parent
751cdc32a8
commit
ca8dbb985e
@ -136,11 +136,19 @@ osg::Vec2d eventToWindowCoords(const osgGA::GUIEventAdapter& ea)
|
|||||||
|
|
||||||
virtual void update(double dt, int keyModState)
|
virtual void update(double dt, int keyModState)
|
||||||
{
|
{
|
||||||
if (!_condition || _condition->test()) {
|
SG_UNUSED(keyModState);
|
||||||
SG_UNUSED(keyModState);
|
if (_condition && !_condition->test()) {
|
||||||
if (!_repeatable)
|
return;
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
if (!_repeatable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const bool zeroInterval = (_repeatInterval <= 0.0);
|
||||||
|
if (zeroInterval) {
|
||||||
|
// fire once per frame
|
||||||
|
fireBindingList(_bindingsDown);
|
||||||
|
} else {
|
||||||
_repeatTime += dt;
|
_repeatTime += dt;
|
||||||
while (_repeatInterval < _repeatTime) {
|
while (_repeatInterval < _repeatTime) {
|
||||||
_repeatTime -= _repeatInterval;
|
_repeatTime -= _repeatInterval;
|
||||||
@ -679,11 +687,17 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_repeatTime += dt;
|
const bool zeroInterval = (_repeatInterval <= 0.0);
|
||||||
while (_repeatInterval < _repeatTime) {
|
if (zeroInterval) {
|
||||||
_repeatTime -= _repeatInterval;
|
// fire once per frame
|
||||||
fire(keyModState & osgGA::GUIEventAdapter::MODKEY_SHIFT, _direction);
|
fire(keyModState & osgGA::GUIEventAdapter::MODKEY_SHIFT, _direction);
|
||||||
} // of repeat iteration
|
} else {
|
||||||
|
_repeatTime += dt;
|
||||||
|
while (_repeatInterval < _repeatTime) {
|
||||||
|
_repeatTime -= _repeatInterval;
|
||||||
|
fire(keyModState & osgGA::GUIEventAdapter::MODKEY_SHIFT, _direction);
|
||||||
|
} // of repeat iteration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hover( const osg::Vec2d& windowPos, const Info& ) override
|
bool hover( const osg::Vec2d& windowPos, const Info& ) override
|
||||||
|
Loading…
Reference in New Issue
Block a user