//----------------------------------------------------------------------------
void PropertyInterpolationMgr::update(double dt)
{
+ if( _rt_prop )
+ dt = _rt_prop->getDoubleValue();
+
for( InterpolatorList::iterator it = _interpolators.begin();
it != _interpolators.end();
++it )
}
//----------------------------------------------------------------------------
- void PropertyInterpolationMgr::interpolate( SGPropertyNode* prop,
+ bool PropertyInterpolationMgr::interpolate( SGPropertyNode* prop,
PropertyInterpolatorRef interp )
{
+ if( !prop )
+ return false;
+
// Search for active interpolator on given property
InterpolatorList::iterator it = std::find_if
(
PredicateIsSameProp(prop)
);
+ if( !interp )
+ {
+ // Without new interpolator just remove old one
+ if( it != _interpolators.end() )
+ _interpolators.erase(it);
+ return true;
+ }
+
if( it != _interpolators.end() )
{
// Ensure no circular reference is left
}
else
_interpolators.push_front( std::make_pair(prop, interp) );
+
+ return true;
}
//----------------------------------------------------------------------------
- void PropertyInterpolationMgr::interpolate( SGPropertyNode* prop,
+ bool PropertyInterpolationMgr::interpolate( SGPropertyNode* prop,
+ const std::string& type,
+ const SGPropertyNode& target,
+ double duration,
+ const std::string& easing )
+ {
+ return interpolate
+ (
+ prop,
+ createInterpolator(type, target, duration, easing)
+ );
+ }
+
+ //----------------------------------------------------------------------------
+ bool PropertyInterpolationMgr::interpolate( SGPropertyNode* prop,
const std::string& type,
const PropertyList& values,
const double_list& deltas,
SG_LOG(SG_GENERAL, SG_WARN, "interpolate: sizes do not match");
size_t num_values = std::min(values.size(), deltas.size());
- if( !num_values )
- {
- SG_LOG(SG_GENERAL, SG_WARN, "interpolate: no values");
- return;
- }
-
PropertyInterpolatorRef first_interp, cur_interp;
for(size_t i = 0; i < num_values; ++i)
{
cur_interp = interp;
}
- interpolate(prop, first_interp);
+ return interpolate(prop, first_interp);
}
//----------------------------------------------------------------------------
_easing_functions[type] = func;
}
+ //----------------------------------------------------------------------------
+ void PropertyInterpolationMgr::setRealtimeProperty(SGPropertyNode* node)
+ {
+ _rt_prop = node;
+ }
+
} // namespace simgear