Exemplo n.º 1
0
 public override void clearState()
 {
     lastLapTyreTemps = new TyreTemps();
     thisLapTyreTemps = new TyreTemps();
     lastStatus = TyreTempStatus.COLD;
     hasPlayedMessage = false;
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
 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);
         }
     }
 }
Exemplo n.º 5
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
 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;
 }