@@ -50,7 +50,7 @@ export function getDistanceFromProgress(car: Car, trackProgress: number): number
5050
5151 while ( subpositionIterator . _remainingProgress > 0 && iteratorSegment )
5252 {
53- Log . debug ( "Remaining progress :" , subpositionIterator . _remainingProgress , ", total:" , subpositionIterator . _totalDistance ) ;
53+ Log . debug ( "getDistanceFromProgress(): remaining :" , subpositionIterator . _remainingProgress , ", total:" , subpositionIterator . _totalDistance ) ;
5454
5555 const trackPieceLength = trackDistances . _progressLength ;
5656
@@ -59,7 +59,7 @@ export function getDistanceFromProgress(car: Car, trackProgress: number): number
5959 // Quick add whole segment.
6060 subpositionIterator . _totalDistance += trackDistances . _totalDistance ;
6161 subpositionIterator . _remainingProgress -= trackPieceLength ;
62- Log . debug ( "total +=" , trackDistances . _totalDistance , "=" , subpositionIterator . _totalDistance , "(whole segment)" ) ;
62+ Log . debug ( "getDistanceFromProgress(): total +=" , trackDistances . _totalDistance , "=" , subpositionIterator . _totalDistance ) ;
6363 }
6464 else
6565 {
@@ -80,15 +80,21 @@ export function getDistanceFromProgress(car: Car, trackProgress: number): number
8080
8181 const nextTrackPosition = iterator . position ;
8282 const nextTrackDistance = getTrackDistances ( iteratorSegment , subposition , nextTrackPosition . direction ) ;
83+ const segmentDistance = subpositionIterator . _getDistanceBetweenSegments ( trackPosition , trackDistances , nextTrackPosition , nextTrackDistance ) ;
84+
85+ if ( segmentDistance )
86+ {
87+ // If segment distance is 0, the end and start positions overlap and another step should to be taken.
88+ subpositionIterator . _totalDistance += segmentDistance ;
89+ subpositionIterator . _remainingProgress -- ;
90+ }
8391
84- subpositionIterator . _remainingProgress -- ;
85- subpositionIterator . _totalDistance += subpositionIterator . _getDistanceBetweenSegments ( trackPosition , trackDistances , nextTrackPosition , nextTrackDistance ) ;
8692 trackPosition = nextTrackPosition ;
8793 trackDistances = nextTrackDistance ;
8894 }
8995
9096 const totalDistance = subpositionIterator . _totalDistance ;
91- Log . debug ( "Move vehicle" , totalDistance , "; progress change:" , trackProgress ) ;
97+ Log . debug ( "getDistanceFromProgress(): Move vehicle" , totalDistance , ", progress change:" , trackProgress , ", final progress:" , trackDistances . _totalDistance , totalDistance > 0 ? "" : "\x1b[93m[WARNING] VEHICLE DID NOT MOVE" ) ;
9298 return ( trackProgress < 0 ) ? - totalDistance : totalDistance ;
9399}
94100
@@ -250,8 +256,13 @@ function isLocationEqual(left: CoordsXYZD, right: CoordsXYZD): boolean
250256 */
251257abstract class SubpositionIterator
252258{
259+ /** Amount of track progress that's still to be iterated. */
253260 _remainingProgress : number ;
261+
262+ /** Position of the car on the current track piece. */
254263 _distanceIndex : number ;
264+
265+ /** Total distance travelled by the iterator. */
255266 _totalDistance : number = 0 ;
256267
257268 constructor ( remainingProgress : number , currentProgress : number )
@@ -304,7 +315,7 @@ class ForwardIterator extends SubpositionIterator
304315 for ( ; distanceIdx < trackPieceLength && remainingProgress > 0 ; distanceIdx ++ )
305316 {
306317 this . _totalDistance += distances [ distanceIdx ] ;
307- Log . debug ( "total +=" , distances [ distanceIdx ] , "=" , this . _totalDistance , "(step:" , distanceIdx , ", remaining:" , remainingProgress , ")" ) ;
318+ Log . debug ( "forward(): total +=" , distances [ distanceIdx ] , "=" , this . _totalDistance , "(step:" , distanceIdx , "/" , trackPieceLength , ", remaining:" , remainingProgress , ")" ) ;
308319 remainingProgress -- ;
309320 }
310321
@@ -313,6 +324,7 @@ class ForwardIterator extends SubpositionIterator
313324 }
314325 override _jumpSegment ( trackIterator : TrackIterator ) : boolean
315326 {
327+ Log . debug ( "forward(): next segment:" , trackIterator . position , "->" , trackIterator . nextPosition ) ;
316328 return trackIterator . next ( ) ;
317329 }
318330 override _getDistanceBetweenSegments ( previousTile : CoordsXYZ , previousTrack : Readonly < TrackDistances > , nextTile : CoordsXYZ , nextTrack : Readonly < TrackDistances > ) : number
@@ -350,14 +362,15 @@ class BackwardIterator extends SubpositionIterator
350362 while ( -- distanceIdx >= 0 && remainingProgress > 0 )
351363 {
352364 this . _totalDistance += distances [ distanceIdx ] ;
353- Log . debug ( "total +=" , distances [ distanceIdx ] , "=" , this . _totalDistance , "(step:" , distanceIdx , ", remaining:" , remainingProgress , ")" ) ;
365+ Log . debug ( "backward(): total +=" , distances [ distanceIdx ] , "=" , this . _totalDistance , "(step:" , distanceIdx , "/" , trackPieceLength , ", remaining:" , remainingProgress , ")" ) ;
354366 remainingProgress -- ;
355367 }
356368 this . _remainingProgress = remainingProgress ;
357369 this . _distanceIndex = 0 ;
358370 }
359371 override _jumpSegment ( trackIterator : TrackIterator ) : boolean
360372 {
373+ Log . debug ( "backward(): previous segment:" , trackIterator . position , "->" , trackIterator . previousPosition ) ;
361374 return trackIterator . previous ( ) ;
362375 }
363376 override _getDistanceBetweenSegments ( previousTile : CoordsXYZ , previousTrack : Readonly < TrackDistances > , nextTile : CoordsXYZ , nextTrack : Readonly < TrackDistances > ) : number
0 commit comments