@@ -1921,84 +1921,84 @@ public float GetAngleofAttackmRad()
19211921 ///
19221922 public float GetTrackSwitchTrigger ( float elapsedClockSeconds )
19231923 {
1924-
1925- // Timer to hold trigger on for a period of time
1926- if ( carOnSwitchTriggered )
1927- {
1928- switchTriggerDelayedS -= elapsedClockSeconds ;
1929- if ( switchTriggerDelayedS < 0 )
1930- switchTriggerDelayedS = 0 ;
1931- }
1932-
1933- if ( IsOverSwitch && ! carOnSwitchTriggered )
1934- {
1935- carOnSwitchTriggered = true ;
1936- return 1 ; // Set trigger for car on switch
1937- }
1938- else if ( ! IsOverSwitch && switchTriggerDelayedS == 0 && carOnSwitchTriggered )
1939- {
1940- carOnSwitchTriggered = false ;
1941- switchTriggerDelayedS = 0.1f ;
1942- return 0 ; // Reset trigger when off
1943- }
1944- else if ( carOnSwitchTriggered && switchTriggerDelayedS > 0 )
1945- {
1946- return 1 ; // ensure trigger stays on until time out
1947- }
1948-
1949- return 0 ; // default if no result found
1924+
1925+ // Timer to hold trigger on for a period of time
1926+ if ( carOnSwitchTriggered )
1927+ {
1928+ switchTriggerDelayedS -= elapsedClockSeconds ;
1929+ if ( switchTriggerDelayedS < 0 )
1930+ switchTriggerDelayedS = 0 ;
19501931 }
19511932
1933+ if ( IsOverSwitch && ! carOnSwitchTriggered )
1934+ {
1935+ carOnSwitchTriggered = true ;
1936+ return 1 ; // Set trigger for car on switch
1937+ }
1938+ else if ( ! IsOverSwitch && switchTriggerDelayedS == 0 && carOnSwitchTriggered )
1939+ {
1940+ carOnSwitchTriggered = false ;
1941+ switchTriggerDelayedS = 0.1f ;
1942+ return 0 ; // Reset trigger when off
1943+ }
1944+ else if ( carOnSwitchTriggered && switchTriggerDelayedS > 0 )
1945+ {
1946+ return 1 ; // ensure trigger stays on until time out
1947+ }
1948+
1949+ return 0 ; // default if no result found
1950+ }
1951+
19521952 /// <summary>
19531953 /// Get the track joint trigger for a car as it goes over a joint
19541954 /// </summary>
19551955 /// <returns>1 = track joint, 0 = no track joint</returns>
19561956 ///
19571957 public float GetTrackJointPosition ( float elapsedClockSeconds )
19581958 {
1959- if ( ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM == 0 )
1959+ if ( ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM == 0 )
1960+ {
1961+ return 0 ; // Rail joints have not been selected
1962+ }
1963+ else
1964+ {
1965+ // Calculate remaining distance beween track joints
1966+ realTimeTrackJointDistanceM -= AbsSpeedMpS * elapsedClockSeconds ;
1967+ if ( realTimeTrackJointDistanceM < 0 )
1968+ realTimeTrackJointDistanceM = 0 ;
1969+ if ( realTimeTrackJointDistanceM == 0 )
1970+ {
1971+ jointTrigger = 1 ;
1972+ carOnJointTriggered = true ;
1973+ jointTriggerDelayedS -= elapsedClockSeconds ;
1974+ if ( jointTriggerDelayedS < 0 )
1975+ jointTriggerDelayedS = 0 ;
1976+ }
1977+ else
1978+ {
1979+ jointTrigger = 0 ;
1980+ }
1981+ if ( jointTrigger == 1 && jointTriggerDelayedS == 0 )
1982+ {
1983+ jointTriggerDelayedS = 0.1f ; // Ensure enough delay to trigger sound
1984+ jointTrigger = 0 ;
1985+ // To ensure that track joints are never closer then 1 sec apart set to speedmps when distance traveled in 1 sec is greater then the joint distance.
1986+ if ( AbsSpeedMpS > ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM )
19601987 {
1961- return 0 ; // Rail joints have not been selected
1988+ realTimeTrackJointDistanceM = AbsSpeedMpS ;
1989+ jointSpeedMpS = AbsSpeedMpS ;
19621990 }
1963- else
1991+ else
19641992 {
1965- // Calculate remaining distance beween track joints
1966- realTimeTrackJointDistanceM -= AbsSpeedMpS * elapsedClockSeconds ;
1967- if ( realTimeTrackJointDistanceM < 0 )
1968- realTimeTrackJointDistanceM = 0 ;
1969- if ( realTimeTrackJointDistanceM == 0 )
1970- {
1971- jointTrigger = 1 ;
1972- carOnJointTriggered = true ;
1973- jointTriggerDelayedS -= elapsedClockSeconds ;
1974- if ( jointTriggerDelayedS < 0 )
1975- jointTriggerDelayedS = 0 ;
1976- }
1977- else
1978- {
1979- jointTrigger = 0 ;
1980- }
1981- if ( jointTrigger == 1 && jointTriggerDelayedS == 0 )
1982- {
1983- jointTriggerDelayedS = 0.1f ; // Ensure enough delay to trigger sound
1984- jointTrigger = 0 ;
1985- // To ensure that track joints are never closer then 1 sec apart set to speedmps when distance traveled in 1 sec is greater then the joint distance.
1986- if ( AbsSpeedMpS > ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM )
1987- {
1988- realTimeTrackJointDistanceM = AbsSpeedMpS ;
1989- jointSpeedMpS = AbsSpeedMpS ;
1990- }
1991- else
1992- {
1993- realTimeTrackJointDistanceM = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ; // Reset for next pass
1994- jointSpeedMpS = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ;
1995- }
1996- carOnJointTriggered = false ;
1997- }
1998-
1999- return jointTrigger ;
1993+ realTimeTrackJointDistanceM = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ; // Reset for next pass
1994+ jointSpeedMpS = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ;
20001995 }
2001- }
1996+ carOnJointTriggered = false ;
1997+ }
1998+
1999+ return jointTrigger ;
2000+ }
2001+ }
20022002
20032003
20042004/// <summary>
@@ -2903,7 +2903,7 @@ public void SetUpWheels()
29032903 }
29042904 }
29052905 // Using WheelAxles.Count test to control WheelAxlesLoaded flag.
2906- if ( WheelAxles . Count > 2 )
2906+ if ( WheelAxles . Count >= 2 ) // Some cars only have two axles.
29072907 {
29082908 WheelAxles . Sort ( WheelAxles [ 0 ] ) ;
29092909 WheelAxlesLoaded = true ;
0 commit comments