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

Method GetSegmentValue

trinity/Curves/Tr2FollowCurve.cpp:73–108  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

71}
72
73Vector3 Tr2FollowCurve::GetSegmentValue( float time, ITr2FollowCurveKey& k0, ITr2FollowCurveKey& k1 ) const
74{
75 switch( k0.GetInterpolationType() )
76 {
77 case Tr2FollowCurveKeyInterpolation::CONSTANT:
78 return time == k1.GetTime() ? k1.GetValue() : k0.GetValue();
79 case Tr2FollowCurveKeyInterpolation::LINEAR:
80 if( k1.GetTime() == k0.GetTime() )
81 {
82 return k1.GetValue();
83 }
84 return k0.GetValue() + ( k1.GetValue() - k0.GetValue() ) * ( time - k0.GetTime() ) / ( k1.GetTime() - k0.GetTime() );
85 case Tr2FollowCurveKeyInterpolation::HERMITE: {
86 float length = k1.GetTime() - k0.GetTime();
87 if( length == 0 )
88 {
89 return k1.GetValue();
90 }
91 Vector3 inTangent = k0.GetRightTangent() * length;
92 Vector3 outTangent = k1.GetLeftTangent() * length;
93
94 float s = ( time - k0.GetTime() ) / length;
95 float s2 = s * s;
96 float s3 = s2 * s;
97
98 float c2 = -2.0f * s3 + 3.0f * s2;
99 float c1 = 1.0f - c2;
100 float c4 = s3 - s2;
101 float c3 = s + c4 - s2;
102
103 return k0.GetValue() * c1 + k1.GetValue() * c2 + inTangent * c3 + outTangent * c4;
104 }
105 default:
106 return Vector3( 0, 0, 0 );
107 }
108}
109
110Vector3* Tr2FollowCurve::Update( Vector3* in, Be::Time time )
111{

Callers

nothing calls this directly

Calls 6

GetInterpolationTypeMethod · 0.80
GetRightTangentMethod · 0.80
GetLeftTangentMethod · 0.80
Vector3Class · 0.50
GetTimeMethod · 0.45
GetValueMethod · 0.45

Tested by

no test coverage detected