diff --git a/src/lib/frp-engine.ts b/src/lib/frp-engine.ts index 6ede5ca1..093d9e88 100644 --- a/src/lib/frp-engine.ts +++ b/src/lib/frp-engine.ts @@ -258,6 +258,17 @@ export class FrpEngine extends FrpVehicle { ); } + /** + * Read suppression state from the brake pipe pressure. Requires a + * well-behaved air brake simulation that cuts out at 110 psi. + */ + createBrakePressureSuppressionBehavior() { + return () => { + const psi = this.rv.GetControlValue("AirBrakePipePressurePSI") as number; + return psi <= 110 - 17; + }; + } + /** * Create a behavior for the speedometer speed. */ diff --git a/src/lib/shared/multilevel.ts b/src/lib/shared/multilevel.ts index 0512e134..a3ded2e1 100644 --- a/src/lib/shared/multilevel.ts +++ b/src/lib/shared/multilevel.ts @@ -126,7 +126,11 @@ export function onInit(me: FrpEngine, version: Version) { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5 + ); const speedoDigitsMph = me.createSpeedometerDigitsMphBehavior(3); const equipmentSpeedMps = (version === Version.Marc ? 125 : 100) * c.mph.toMps; const [aduState$, aduEvents$] = adu.create({ diff --git a/src/mod/Assets/DTG/ArrowIIIPack01/RailVehicles/Electric/Scripts/ArrowIII_Engine_Script.ts b/src/mod/Assets/DTG/ArrowIIIPack01/RailVehicles/Electric/Scripts/ArrowIII_Engine_Script.ts index d118aab2..a0dadfa8 100644 --- a/src/mod/Assets/DTG/ArrowIIIPack01/RailVehicles/Electric/Scripts/ArrowIII_Engine_Script.ts +++ b/src/mod/Assets/DTG/ArrowIIIPack01/RailVehicles/Electric/Scripts/ArrowIII_Engine_Script.ts @@ -48,7 +48,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5 + ); const speedoDigitsMph = me.createSpeedometerDigitsMphBehavior(3); const [aduState$, aduEvents$] = adu.create({ e: me, diff --git a/src/mod/Assets/DTG/F40PH2Pack01/RailVehicles/Diesel/F40PH/CommonScripts/F40PH2_EngineScript.ts b/src/mod/Assets/DTG/F40PH2Pack01/RailVehicles/Diesel/F40PH/CommonScripts/F40PH2_EngineScript.ts index 9e609051..e4de8701 100644 --- a/src/mod/Assets/DTG/F40PH2Pack01/RailVehicles/Diesel/F40PH/CommonScripts/F40PH2_EngineScript.ts +++ b/src/mod/Assets/DTG/F40PH2Pack01/RailVehicles/Diesel/F40PH/CommonScripts/F40PH2_EngineScript.ts @@ -56,7 +56,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5 + ); const [aduState$, aduEvents$] = adu.create({ atc: cs.njTransitAtc, e: me, diff --git a/src/mod/Assets/DTG/GP40PHPack01/RailVehicles/Diesel/GP40PH/Scripts/GP40_EngineScript.ts b/src/mod/Assets/DTG/GP40PHPack01/RailVehicles/Diesel/GP40PH/Scripts/GP40_EngineScript.ts index baa74aef..88998feb 100644 --- a/src/mod/Assets/DTG/GP40PHPack01/RailVehicles/Diesel/GP40PH/Scripts/GP40_EngineScript.ts +++ b/src/mod/Assets/DTG/GP40PHPack01/RailVehicles/Diesel/GP40PH/Scripts/GP40_EngineScript.ts @@ -46,6 +46,9 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); + // There's no suppression detent, so we'd ordinarily incorporate brake pipe + // pressure here, but that isn't a reliable indicator due to the cut out + // being 90 psi. const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5; const speedoDigitsMph = me.createSpeedometerDigitsMphBehavior(3); const [aduState$, aduEvents$] = adu.create({ diff --git a/src/mod/Assets/DTG/Morristown/RailVehicles/Passengers/Comet/Driving Trailer/Common Scripts/Comet_IV_Engine.ts b/src/mod/Assets/DTG/Morristown/RailVehicles/Passengers/Comet/Driving Trailer/Common Scripts/Comet_IV_Engine.ts index 61be6e71..dfd42559 100644 --- a/src/mod/Assets/DTG/Morristown/RailVehicles/Passengers/Comet/Driving Trailer/Common Scripts/Comet_IV_Engine.ts +++ b/src/mod/Assets/DTG/Morristown/RailVehicles/Passengers/Comet/Driving Trailer/Common Scripts/Comet_IV_Engine.ts @@ -163,7 +163,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5 + ); const [aduState$, aduEvents$] = adu.create({ e: me, acknowledge, diff --git a/src/mod/Assets/DTG/NJT-Alp46/RailVehicles/Electric/Alp46/CommonScripts/Alp46_EngineScript.ts b/src/mod/Assets/DTG/NJT-Alp46/RailVehicles/Electric/Alp46/CommonScripts/Alp46_EngineScript.ts index f72ecc99..5098312b 100644 --- a/src/mod/Assets/DTG/NJT-Alp46/RailVehicles/Electric/Alp46/CommonScripts/Alp46_EngineScript.ts +++ b/src/mod/Assets/DTG/NJT-Alp46/RailVehicles/Electric/Alp46/CommonScripts/Alp46_EngineScript.ts @@ -39,7 +39,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5 + ); const speedoDigitsMph = me.createSpeedometerDigitsMphBehavior(3); const [aduState$, aduEvents$] = adu.create({ e: me, diff --git a/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Diesel/ALP45DP/Scripts/ALP45DP_EngineScript.ts b/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Diesel/ALP45DP/Scripts/ALP45DP_EngineScript.ts index 016687df..27055cf6 100644 --- a/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Diesel/ALP45DP/Scripts/ALP45DP_EngineScript.ts +++ b/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Diesel/ALP45DP/Scripts/ALP45DP_EngineScript.ts @@ -135,7 +135,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5 + ); const [aduState$, aduEvents$] = adu.create({ atc: cs.njTransitAtc, e: me, diff --git a/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Passengers/Comet/Driving Trailer/CommonScripts/CometCab_EngineScript.ts b/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Passengers/Comet/Driving Trailer/CommonScripts/CometCab_EngineScript.ts index 8df5bc30..ee25a4b4 100644 --- a/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Passengers/Comet/Driving Trailer/CommonScripts/CometCab_EngineScript.ts +++ b/src/mod/Assets/DTG/NorthJerseyCoast/RailVehicles/Passengers/Comet/Driving Trailer/CommonScripts/CometCab_EngineScript.ts @@ -151,7 +151,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) > 0.5 + ); const speedoDigitsMph = me.createSpeedometerDigitsMphBehavior(3); const [aduState$, aduEvents$] = adu.create({ e: me, diff --git a/src/mod/Assets/RSC/NorthEastCorridor/RailVehicles/Electric/AEM7/Default/Engine/RailVehicle_EngineScript.ts b/src/mod/Assets/RSC/NorthEastCorridor/RailVehicles/Electric/AEM7/Default/Engine/RailVehicle_EngineScript.ts index 76e1a8fe..ca558069 100644 --- a/src/mod/Assets/RSC/NorthEastCorridor/RailVehicles/Electric/AEM7/Default/Engine/RailVehicle_EngineScript.ts +++ b/src/mod/Assets/RSC/NorthEastCorridor/RailVehicles/Electric/AEM7/Default/Engine/RailVehicle_EngineScript.ts @@ -30,7 +30,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("VirtualBrake") as number) >= 0.5 + ); const [aduState$, aduEvents$] = adu.create({ atc: cs.amtrakAtc, e: me, diff --git a/src/mod/Assets/RSC/P32Pack01/RailVehicles/Passengers/Shoreliner/Driving Trailer/CommonScripts/CabCarEngineScript.ts b/src/mod/Assets/RSC/P32Pack01/RailVehicles/Passengers/Shoreliner/Driving Trailer/CommonScripts/CabCarEngineScript.ts index 87171710..d05c3003 100644 --- a/src/mod/Assets/RSC/P32Pack01/RailVehicles/Passengers/Shoreliner/Driving Trailer/CommonScripts/CabCarEngineScript.ts +++ b/src/mod/Assets/RSC/P32Pack01/RailVehicles/Passengers/Shoreliner/Driving Trailer/CommonScripts/CabCarEngineScript.ts @@ -79,7 +79,11 @@ const me = new FrpEngine(() => { // Safety systems and ADU const acknowledge = me.createAcknowledgeBehavior(); - const suppression = () => (me.rv.GetControlValue("TrainBrakeControl") as number) >= 0.4; + const suppression = frp.liftN( + (bp, lever) => bp || lever, + me.createBrakePressureSuppressionBehavior(), + () => (me.rv.GetControlValue("TrainBrakeControl") as number) >= 0.4 + ); const [aduState$, aduEvents$] = adu.create({ atc: cs.metroNorthAtc, e: me,