Skip to content

Commit cd51cfe

Browse files
committed
Fix: Correct event checking when track has changed
1 parent 4a07cd5 commit cd51cfe

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

source/OpenBVE/Game/TrackManager/TrackManager.TrackFollower.cs

+18-6
Original file line numberDiff line numberDiff line change
@@ -260,26 +260,38 @@ private void CheckEvents(int ElementIndex, int Direction, double OldDelta, doubl
260260
{
261261
return;
262262
}
263+
264+
int Index = TrackIndex;
263265
if (Direction < 0)
264266
{
265-
for (int j = Tracks[TrackIndex].Elements[ElementIndex].Events.Length - 1; j >= 0; j--)
267+
for (int j = Tracks[Index].Elements[ElementIndex].Events.Length - 1; j >= 0; j--)
266268
{
267-
if (OldDelta > Tracks[TrackIndex].Elements[ElementIndex].Events[j].TrackPositionDelta & NewDelta <= Tracks[TrackIndex].Elements[ElementIndex].Events[j].TrackPositionDelta)
269+
if (Tracks[Index].Elements[ElementIndex].Events.Length == 0)
270+
{
271+
return;
272+
}
273+
if (OldDelta > Tracks[Index].Elements[ElementIndex].Events[j].TrackPositionDelta & NewDelta <= Tracks[Index].Elements[ElementIndex].Events[j].TrackPositionDelta)
268274
{
269-
Tracks[TrackIndex].Elements[ElementIndex].Events[j].TryTrigger(-1, this.TriggerType, this.Train, this.CarIndex);
275+
Tracks[Index].Elements[ElementIndex].Events[j].TryTrigger(-1, this.TriggerType, this.Train, this.CarIndex);
270276
}
271277
}
272278
}
273279
else if (Direction > 0)
274280
{
275-
for (int j = 0; j < Tracks[TrackIndex].Elements[ElementIndex].Events.Length; j++)
281+
for (int j = 0; j < Tracks[Index].Elements[ElementIndex].Events.Length; j++)
276282
{
277-
if (OldDelta < Tracks[TrackIndex].Elements[ElementIndex].Events[j].TrackPositionDelta & NewDelta >= Tracks[TrackIndex].Elements[ElementIndex].Events[j].TrackPositionDelta)
283+
if (OldDelta < Tracks[Index].Elements[ElementIndex].Events[j].TrackPositionDelta & NewDelta >= Tracks[Index].Elements[ElementIndex].Events[j].TrackPositionDelta)
278284
{
279-
Tracks[TrackIndex].Elements[ElementIndex].Events[j].TryTrigger(1, this.TriggerType, this.Train, this.CarIndex);
285+
Tracks[Index].Elements[ElementIndex].Events[j].TryTrigger(1, this.TriggerType, this.Train, this.CarIndex);
280286
}
281287
}
282288
}
289+
290+
if (Index != TrackIndex)
291+
{
292+
//We have swapped tracks, so need to check the events on the new track also
293+
CheckEvents(ElementIndex, Direction, OldDelta, NewDelta);
294+
}
283295
}
284296
}
285297
}

0 commit comments

Comments
 (0)