public void Update(IRDSDrivetrain aDriveTrain,IRDSCarControllerAI aCarController,IRDSCarControllInput aInput,RacingAI aAI) {
			// First, we add the heat from the current RPM
			if(aDriveTrain==null) {
				return;  
			}

			float currentRPM = aDriveTrain.GetRPM();
			float originalMinRPM = aDriveTrain.GetOriginalMinRPM();
			if(!float.IsNaN(currentRPM)) {
				float tempToAdd = (((float) Math.Pow(currentRPM/(aDriveTrain.revLimiterRPM-originalMinRPM),5))/15f)/2;
				currentTemperature += tempToAdd;
				// Just for montioring in Unity IDE
				lastHeat = tempToAdd;
				lastRPMPercent = aDriveTrain.GetRPM()/aDriveTrain.revLimiterRPM;

			}
			// Is the cars cooler "on" (yes if temperature is above perfect temperature)?
			if(currentTemperature>perfectTemperature) {
				// The faster we're going, the more cooling, car coolers + we get the base cooling amount
				float currentSpeed = aInput.GetCarSpeed();

				if(currentSpeed>maxCoolingSpeed) {
					currentSpeed = maxCoolingSpeed;
				}
				float tempToTake = (((float) Math.Pow(currentSpeed/maxCoolingSpeed,4))/8f+this.baseCooling)/2;
				currentTemperature -= tempToTake;
				lastCool = tempToTake;
			}
			percentTempRange= (currentTemperature-perfectTemperature)/(engineBlowupTemp-perfectTemperature);

			if(percentTempRange>maxTempPercent) {
				// Just for monitoring in Unity IDE
				maxTempPercent = percentTempRange;
			}
			if(hasFailed) {
				return;
			}
			if(percentTempRange<0.70f) {
				if(aAI.engineFailure!=EEngineFailureStage.Normal) {
					aAI.engineFailure = EEngineFailureStage.Normal;
					aAI.setEngineFailureStage();
					this.isTooHot = false;
					this.isOverheating = false;
					this.isGettingHot = false;
				}
			} else if(percentTempRange<0.85f) {
				if(aAI.engineFailure!=EEngineFailureStage.Hot) {
					aAI.engineFailure = EEngineFailureStage.Hot;
					aAI.setEngineFailureStage();
					
					this.isGettingHot = true;
					
					this.isTooHot = false;
					this.isOverheating = false;
				}
			} else if(percentTempRange<1f) {
				if(aAI.engineFailure!=EEngineFailureStage.VeryHot) {
					aAI.engineFailure = EEngineFailureStage.VeryHot;
					aAI.setEngineFailureStage();
					
					this.isGettingHot = false;
					
					this.isTooHot = false;
					this.isOverheating = true;
				}
			} else {
				if(aAI.engineFailure!=EEngineFailureStage.Failed) {
					hasFailed = true;
					aAI.engineFailure = EEngineFailureStage.Failed;
					aAI.setEngineFailureStage();
					
					this.isGettingHot = false;
					
					this.isTooHot = true;
					this.isOverheating = true;
		
				}
			}

		}