@@ -428,9 +428,11 @@ void USplineAnimationComponent::AnimateAlongSpline(const float Progress) const
428428
429429void USplineAnimationComponent::MoveAlongSpline (const float Progress) const
430430{
431+ // TODO: To use distance offset properly, it's better to calculate distance using CurrentDistance % Length
431432 const float Position = GetPositionAtSpline (CurrentPointIndex, NextPointIndex, Progress);
433+ const float Distance = FMath::Fmod (Position + SplineOffset, SplineComponent->GetSplineLength ());
432434 const FVector NewLocation{
433- SplineComponent->GetLocationAtDistanceAlongSpline (Position + SplineOffset , ESplineCoordinateSpace::World)
435+ SplineComponent->GetLocationAtDistanceAlongSpline (Distance , ESplineCoordinateSpace::World)
434436 };
435437
436438 GetOwner ()->SetActorLocation (NewLocation + LocationOffset);
@@ -442,8 +444,9 @@ void USplineAnimationComponent::RotateAlongSpline(const float Progress) const
442444 {
443445 const FRotator CurrentRotation{GetOwner ()->GetActorRotation ()};
444446 const float Position = GetPositionAtSpline (CurrentPointIndex, NextPointIndex, Progress);
447+ const float Distance = FMath::Fmod (Position + SplineOffset, SplineComponent->GetSplineLength ());
445448 const FRotator RotationAlongSpline{
446- SplineComponent->GetRotationAtDistanceAlongSpline (Position , ESplineCoordinateSpace::World)
449+ SplineComponent->GetRotationAtDistanceAlongSpline (Distance , ESplineCoordinateSpace::World)
447450 };
448451
449452 const float NewRoll = InheritRotation.bX ? RotationAlongSpline.Roll : CurrentRotation.Roll ;
@@ -460,7 +463,8 @@ void USplineAnimationComponent::ScaleAlongSpline(const float Progress) const
460463 {
461464 const FVector CurrentScale{GetOwner ()->GetActorScale3D ()};
462465 const float Position = GetPositionAtSpline (CurrentPointIndex, NextPointIndex, Progress);
463- const FVector ScaleAlongSpline{SplineComponent->GetScaleAtDistanceAlongSpline (Position)};
466+ const float Distance = FMath::Fmod (Position + SplineOffset, SplineComponent->GetSplineLength ());
467+ const FVector ScaleAlongSpline{SplineComponent->GetScaleAtDistanceAlongSpline (Distance)};
464468
465469 const float NewScaleX = InheritScale.bX ? ScaleAlongSpline.X : CurrentScale.X ;
466470 const float NewScaleY = InheritScale.bY ? ScaleAlongSpline.Y : CurrentScale.Y ;
0 commit comments