public override void clearState() { lastLapTyreTemps = new TyreTemps(); thisLapTyreTemps = new TyreTemps(); lastStatus = TyreTempStatus.COLD; hasPlayedMessage = false; }
protected override void triggerInternal(Shared lastState, Shared currentState) { if (CommonData.isNewLap && CommonData.isSessionRunning) { if (currentState.CompletedLaps > 1) { if (lastLapTyreTemps == null) { clearState(); updateTyreTemps(currentState, lastLapTyreTemps); } lastLapTyreTemps.display(); // completed 2 laps, so now we have some comparison data TyreTempStatus tempStatus = lastLapTyreTemps.getStatus(); if (tempStatus != lastStatus || !hasPlayedMessage) { hasPlayedMessage = true; switch (tempStatus) { case TyreTempStatus.GOOD: audioPlayer.queueClip(folderGoodTemps, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_ALL_ROUND: audioPlayer.queueClip(folderHotAllRound, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_FRONTS: audioPlayer.queueClip(folderHotFronts, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_REARS: audioPlayer.queueClip(folderHotRears, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_LEFTS: audioPlayer.queueClip(folderHotLefts, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_RIGHTS: audioPlayer.queueClip(folderHotRights, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_LEFT_FRONT: audioPlayer.queueClip(folderHotLeftFront, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_LEFT_REAR: audioPlayer.queueClip(folderHotLeftRear, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_RIGHT_FRONT: audioPlayer.queueClip(folderHotRightFront, tyreTempMessageDelay, this); break; case TyreTempStatus.HOT_RIGHT_REAR: audioPlayer.queueClip(folderHotRightRear, tyreTempMessageDelay, this); break; case TyreTempStatus.COLD: Console.WriteLine("tyres are cold"); break; } lastStatus = tempStatus; } } lastLapTyreTemps = thisLapTyreTemps; thisLapTyreTemps = new TyreTemps(); } if (thisLapTyreTemps == null) { Console.WriteLine("resetting tyre temps data"); clearState(); } updateTyreTemps(currentState, thisLapTyreTemps); }
private void updateTyreTemps(Shared data, TyreTemps tyreTemps) { tyreTemps.addSample((data.TireTemp.FrontLeft_Left + data.TireTemp.FrontLeft_Center + data.TireTemp.FrontLeft_Right) / 3, (data.TireTemp.FrontRight_Left + data.TireTemp.FrontRight_Center + data.TireTemp.FrontRight_Right) / 3, (data.TireTemp.RearLeft_Left + data.TireTemp.RearLeft_Center + data.TireTemp.RearLeft_Right) / 3, (data.TireTemp.RearRight_Left + data.TireTemp.RearRight_Center + data.TireTemp.RearRight_Right) / 3); }
private void checkTemps(TyreTemps tyreTempsToCheck) { // only give a message if we've completed more than the minimum laps here if (tyreTempsToCheck != null) { tyreTempsToCheck.displayAverages(); TyreTempStatus tempsStatus = tyreTempsToCheck.getAverageTempStatus(); if (tempsStatus != lastReportedStatus) { String messageFolder = getMessage(tempsStatus); if (messageFolder != null) { Console.WriteLine("Reporting tyre temp status: " + tempsStatus); audioPlayer.queueClip(messageFolder, tyreTempMessageDelay, this); } lastReportedStatus = tempsStatus; } else { Console.WriteLine("No tyre temp status change: " + tempsStatus); } } }
protected override void triggerInternal(Shared lastState, Shared currentState) { if (CommonData.isSessionRunning) { if (currentState.TireWearActive == 1) { leftFrontWear = (newTyreWearValue - currentState.CarDamage.TireFrontLeft) / maxTyreWearBeforeKnackered; rightFrontWear = (newTyreWearValue - currentState.CarDamage.TireFrontRight) / maxTyreWearBeforeKnackered; leftRearWear = (newTyreWearValue - currentState.CarDamage.TireRearLeft) / maxTyreWearBeforeKnackered; rightRearWear = (newTyreWearValue - currentState.CarDamage.TireRearRight) / maxTyreWearBeforeKnackered; if (CommonData.isPittingInRace && !CommonData.leaderHasFinishedRace) { if (enableTyreWearWarnings && !reportedTyreWearForCurrentPitEntry) { playTyreWearMessages(true, true); reportedTyreWearForCurrentPitEntry = true; } } else { reportedTyreWearForCurrentPitEntry = false; } if (CommonData.isNewLap && !CommonData.isPittingInRace && enableTyreWearWarnings && !CommonData.leaderHasFinishedRace) { playTyreWearMessages(true, false); } if (!CommonData.isPittingInRace && !reportedEstimatedTimeLeft && enableTyreWearWarnings && !CommonData.leaderHasFinishedRace) { reportEstimatedTyreLife(currentState); } // if the tyre wear has actually decreased, reset the 'reportdEstimatedTyreWear flag - assume this means the tyres have been changed if (currentState.CarDamage.TireFrontLeft > lastState.CarDamage.TireFrontLeft || currentState.CarDamage.TireFrontRight > lastState.CarDamage.TireFrontRight || currentState.CarDamage.TireRearLeft > lastState.CarDamage.TireRearLeft || currentState.CarDamage.TireRearRight > lastState.CarDamage.TireRearRight) { reportedEstimatedTimeLeft = true; } } if (CommonData.isNewLap) { lastLapTyreTemps = thisLapTyreTemps; // this might still be null thisLapTyreTemps = new TyreTemps(); updateTyreTemps(currentState, thisLapTyreTemps); if (!CommonData.isPittingInRace && enableTyreTempWarnings && !checkedTempsAtSector3 && currentState.CompletedLaps >= lapsIntoSessionBeforeTempMessage && !CommonData.leaderHasFinishedRace) { checkTemps(lastLapTyreTemps); } checkedTempsAtSector3 = false; } else { if (thisLapTyreTemps == null) { thisLapTyreTemps = new TyreTemps(); } updateTyreTemps(currentState, thisLapTyreTemps); if (enableTyreTempWarnings && checkAtSector > 0 && CommonData.isNewSector && CommonData.currentLapSector == checkAtSector) { checkedTempsAtSector3 = true; if (!CommonData.isPittingInRace && currentState.CompletedLaps >= lapsIntoSessionBeforeTempMessage && !CommonData.leaderHasFinishedRace) { checkTemps(thisLapTyreTemps); } } } } }
public override void clearState() { lastLapTyreTemps = null; thisLapTyreTemps = null; lastReportedStatus = TyreTempStatus.NO_DATA; lastReportedKnackeredTyreStatus = TyreWearStatus.NOT_TRIGGERED; lastReportedWornTyreStatus = TyreWearStatus.NOT_TRIGGERED; checkedTempsAtSector3 = false; leftFrontWear = 0; rightFrontWear = 0; leftRearWear = 0; rightRearWear = 0; reportedTyreWearForCurrentPitEntry = false; reportedEstimatedTimeLeft = false; }