Exemple #1
0
	public void initCar() {
		
		GameObject g = this.gameObject;
		aiCar = g.GetComponent<IRDSCarControllerAI>();
		aiDriveTrain = g.GetComponent<IRDSDrivetrain>();
		if(g==null||aiDriveTrain==null) {
			return;
		}
		
		aiDriveTrain.useNitro = true;
		aiDriveTrain.nitroBoostDurability = 5;
		aiDriveTrain.nitroFuel = 0;
		aiInput = g.GetComponent<IRDSCarControllInput>();
		
		if(aiInput!=null&&aiInput.GetCarDamage()!=null) {
			aero = g.GetComponent<IRDSAerodynamicResistance>();
			wings = g.GetComponentsInChildren<IRDSWing>();
			
			frontWingDownforce = wings[0].GetLiftCoefficient();
			rearWingDownforce = wings[1].GetLiftCoefficient();
			
			this.wheelInfo = new WheelInfo[wheels.Length];
			for(int i = 0;i<wheelInfo.Length;i++) {
				wheelInfo[i] = new WheelInfo(wheels[i],this.carRef,i<2);
			}
			driverName = this.aiCar.GetDriverName();
			//wings[0].SetLiftCoefficient(-0.3f);
			//wings[1].SetLiftCoefficient(-0.8f);
			originalSpeedCorner = aiCar.GetCorneringSpeedFactor();
			inNitroZone = false;
			this.aiInput.GetCarDamage().SetRepairDelta(0f);
			
			this.originalPower = this.aiDriveTrain.GetMaxPower();
			this.originalTorque = this.aiDriveTrain.GetMaxTorque();
		
			  
		}
		return;
	}
		public void initDriveTrainVals(IRDSDrivetrain aDriveTrain,IRDSCarControllInput aInput) {
			aiDriveTrain = aDriveTrain;
			aiInput = aInput;
			_maxRPM = aDriveTrain.revLimiterRPM;

		}
		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;
		
				}
			}

		}
Exemple #4
0
	// Use this for initialization
	void Start () {
		carInput = GetComponent<IRDSCarControllInput>();
		if (!carInput.GetCarPilot())
			this.enabled = false;
	}