@@ -489,17 +489,15 @@ void DrawNode::drawCardinalSpline(PointArray* config,
489
489
for (unsigned int i = 0 ; i < segments; i++)
490
490
{
491
491
float dt = (float )i / segments;
492
+ p = static_cast <ssize_t >(dt / deltaT);
492
493
493
- // border
494
- if (dt == 1 )
494
+ // Check last control point reached
495
+ if (p >= (config-> count () - 1 ) )
495
496
{
496
- p = config->count () - 1 ;
497
- lt = 1 ;
498
- }
499
- else
500
- {
501
- p = static_cast <ssize_t >(dt / deltaT);
502
- lt = (dt - deltaT * (float )p) / deltaT;
497
+ _vertices[i] = config->getControlPointAtIndex (config->count () - 1 );
498
+ segments = i + 1 ;
499
+ _vertices.resize (segments);
500
+ break ;
503
501
}
504
502
505
503
// Interpolate
@@ -508,14 +506,8 @@ void DrawNode::drawCardinalSpline(PointArray* config,
508
506
Vec2 pp2 = config->getControlPointAtIndex (p + 1 );
509
507
Vec2 pp3 = config->getControlPointAtIndex (p + 2 );
510
508
511
- Vec2 newPos = ccCardinalSplineAt (pp0, pp1, pp2, pp3, tension, lt);
512
- _vertices[i].x = newPos.x ;
513
- _vertices[i].y = newPos.y ;
514
- if (newPos == config->getControlPointAtIndex (config->count () - 1 ) && i > 0 )
515
- {
516
- segments = i + 1 ;
517
- break ;
518
- }
509
+ lt = (dt - deltaT * (float )p) / deltaT;
510
+ _vertices[i] = ccCardinalSplineAt (pp0, pp1, pp2, pp3, tension, lt);
519
511
}
520
512
521
513
_drawPoly (_vertices.data (), segments, false , color, thickness, true );
0 commit comments