MCPcopy Create free account
hub / github.com/carbonengine/trinity / OnKeysChanged

Method OnKeysChanged

trinity/Curves/Tr2CurveScalar.cpp:282–347  ·  view source on GitHub ↗

--------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

280
281// --------------------------------------------------------------------------------
282void Tr2CurveScalar::OnKeysChanged()
283{
284 std::stable_sort(
285 m_keys.begin(),
286 m_keys.end(),
287 []( const Tr2CurveScalarKey& k0, const Tr2CurveScalarKey& k1 ) { return k0.m_time < k1.m_time; } );
288
289 for( size_t i = 0; i < m_keys.size(); ++i )
290 {
291 auto& k = m_keys[i];
292 switch( k.m_tangentType )
293 {
294 case Tr2CurveTangentType::AUTO_CLAMP:
295 if( i == 0 )
296 {
297 k.m_leftTangent = k.m_rightTangent = 0;
298 }
299 else if( i + 1 == m_keys.size() )
300 {
301 k.m_leftTangent = k.m_rightTangent = 0;
302 }
303 else
304 {
305 float tangent = GetAutoClamppedTangent(
306 m_keys[i - 1].m_time,
307 m_keys[i - 1].m_value,
308 k.m_time,
309 k.m_value,
310 m_keys
311 [i + 1]
312 .m_time,
313 m_keys[i + 1].m_value );
314
315 k.m_leftTangent = tangent;
316 k.m_rightTangent = tangent;
317 }
318 break;
319 case Tr2CurveTangentType::AUTO:
320 if( i == 0 )
321 {
322 k.m_leftTangent = k.m_rightTangent = 0;
323 }
324 else if( i + 1 == m_keys.size() )
325 {
326 k.m_leftTangent = k.m_rightTangent = 0;
327 }
328 else
329 {
330 float tangent = GetAutoTangent(
331 m_keys[i - 1].m_time,
332 m_keys[i - 1].m_value,
333 k.m_time,
334 k.m_value,
335 m_keys[i + 1].m_time,
336 m_keys[i + 1].m_value );
337
338 k.m_leftTangent = tangent;
339 k.m_rightTangent = tangent;

Callers 1

Calls 5

GetAutoClamppedTangentFunction · 0.85
GetAutoTangentFunction · 0.85
sizeMethod · 0.80
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected