@@ -1924,84 +1924,84 @@ public float GetAngleofAttackmRad()
19241924 ///
19251925 public float GetTrackSwitchTrigger ( float elapsedClockSeconds )
19261926 {
1927-
1928- // Timer to hold trigger on for a period of time
1929- if ( carOnSwitchTriggered )
1930- {
1931- switchTriggerDelayedS -= elapsedClockSeconds ;
1932- if ( switchTriggerDelayedS < 0 )
1933- switchTriggerDelayedS = 0 ;
1934- }
1935-
1936- if ( IsOverSwitch && ! carOnSwitchTriggered )
1937- {
1938- carOnSwitchTriggered = true ;
1939- return 1 ; // Set trigger for car on switch
1940- }
1941- else if ( ! IsOverSwitch && switchTriggerDelayedS == 0 && carOnSwitchTriggered )
1942- {
1943- carOnSwitchTriggered = false ;
1944- switchTriggerDelayedS = 0.1f ;
1945- return 0 ; // Reset trigger when off
1946- }
1947- else if ( carOnSwitchTriggered && switchTriggerDelayedS > 0 )
1948- {
1949- return 1 ; // ensure trigger stays on until time out
1950- }
1951-
1952- return 0 ; // default if no result found
1927+
1928+ // Timer to hold trigger on for a period of time
1929+ if ( carOnSwitchTriggered )
1930+ {
1931+ switchTriggerDelayedS -= elapsedClockSeconds ;
1932+ if ( switchTriggerDelayedS < 0 )
1933+ switchTriggerDelayedS = 0 ;
19531934 }
19541935
1936+ if ( IsOverSwitch && ! carOnSwitchTriggered )
1937+ {
1938+ carOnSwitchTriggered = true ;
1939+ return 1 ; // Set trigger for car on switch
1940+ }
1941+ else if ( ! IsOverSwitch && switchTriggerDelayedS == 0 && carOnSwitchTriggered )
1942+ {
1943+ carOnSwitchTriggered = false ;
1944+ switchTriggerDelayedS = 0.1f ;
1945+ return 0 ; // Reset trigger when off
1946+ }
1947+ else if ( carOnSwitchTriggered && switchTriggerDelayedS > 0 )
1948+ {
1949+ return 1 ; // ensure trigger stays on until time out
1950+ }
1951+
1952+ return 0 ; // default if no result found
1953+ }
1954+
19551955 /// <summary>
19561956 /// Get the track joint trigger for a car as it goes over a joint
19571957 /// </summary>
19581958 /// <returns>1 = track joint, 0 = no track joint</returns>
19591959 ///
19601960 public float GetTrackJointPosition ( float elapsedClockSeconds )
19611961 {
1962- if ( ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM == 0 )
1962+ if ( ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM == 0 )
1963+ {
1964+ return 0 ; // Rail joints have not been selected
1965+ }
1966+ else
1967+ {
1968+ // Calculate remaining distance beween track joints
1969+ realTimeTrackJointDistanceM -= AbsSpeedMpS * elapsedClockSeconds ;
1970+ if ( realTimeTrackJointDistanceM < 0 )
1971+ realTimeTrackJointDistanceM = 0 ;
1972+ if ( realTimeTrackJointDistanceM == 0 )
1973+ {
1974+ jointTrigger = 1 ;
1975+ carOnJointTriggered = true ;
1976+ jointTriggerDelayedS -= elapsedClockSeconds ;
1977+ if ( jointTriggerDelayedS < 0 )
1978+ jointTriggerDelayedS = 0 ;
1979+ }
1980+ else
1981+ {
1982+ jointTrigger = 0 ;
1983+ }
1984+ if ( jointTrigger == 1 && jointTriggerDelayedS == 0 )
1985+ {
1986+ jointTriggerDelayedS = 0.1f ; // Ensure enough delay to trigger sound
1987+ jointTrigger = 0 ;
1988+ // 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.
1989+ if ( AbsSpeedMpS > ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM )
19631990 {
1964- return 0 ; // Rail joints have not been selected
1991+ realTimeTrackJointDistanceM = AbsSpeedMpS ;
1992+ jointSpeedMpS = AbsSpeedMpS ;
19651993 }
1966- else
1994+ else
19671995 {
1968- // Calculate remaining distance beween track joints
1969- realTimeTrackJointDistanceM -= AbsSpeedMpS * elapsedClockSeconds ;
1970- if ( realTimeTrackJointDistanceM < 0 )
1971- realTimeTrackJointDistanceM = 0 ;
1972- if ( realTimeTrackJointDistanceM == 0 )
1973- {
1974- jointTrigger = 1 ;
1975- carOnJointTriggered = true ;
1976- jointTriggerDelayedS -= elapsedClockSeconds ;
1977- if ( jointTriggerDelayedS < 0 )
1978- jointTriggerDelayedS = 0 ;
1979- }
1980- else
1981- {
1982- jointTrigger = 0 ;
1983- }
1984- if ( jointTrigger == 1 && jointTriggerDelayedS == 0 )
1985- {
1986- jointTriggerDelayedS = 0.1f ; // Ensure enough delay to trigger sound
1987- jointTrigger = 0 ;
1988- // 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.
1989- if ( AbsSpeedMpS > ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM )
1990- {
1991- realTimeTrackJointDistanceM = AbsSpeedMpS ;
1992- jointSpeedMpS = AbsSpeedMpS ;
1993- }
1994- else
1995- {
1996- realTimeTrackJointDistanceM = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ; // Reset for next pass
1997- jointSpeedMpS = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ;
1998- }
1999- carOnJointTriggered = false ;
2000- }
2001-
2002- return jointTrigger ;
1996+ realTimeTrackJointDistanceM = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ; // Reset for next pass
1997+ jointSpeedMpS = ( float ) Simulator . TRK . Tr_RouteFile . DistanceBetweenTrackJointsM ;
20031998 }
2004- }
1999+ carOnJointTriggered = false ;
2000+ }
2001+
2002+ return jointTrigger ;
2003+ }
2004+ }
20052005
20062006
20072007/// <summary>
@@ -2906,7 +2906,7 @@ public void SetUpWheels()
29062906 }
29072907 }
29082908 // Using WheelAxles.Count test to control WheelAxlesLoaded flag.
2909- if ( WheelAxles . Count > 2 )
2909+ if ( WheelAxles . Count >= 2 ) // Some cars only have two axles.
29102910 {
29112911 WheelAxles . Sort ( WheelAxles [ 0 ] ) ;
29122912 WheelAxlesLoaded = true ;
0 commit comments