示例#1
0
		public void initHumanCar(IRDSCarControllerAI aCar) {
			if(carCamera==null) {
				carCamera = GameObject.Find ("Main_Camera").GetComponent<IRDSCarCamera> ();;

				if(GameObject.Find("RaceStartCamera")!=null) {				
					carCamera.GetComponent<Camera>().enabled = false;
					raceStartCamera = GameObject.Find ("RaceStartCamera").GetComponent<Camera>();;
				}
			
			}
			RacingAI thisCarsAI = aCar.GetComponent<RacingAI>();
			thisCarsAI.aiInput = aCar.GetComponent<IRDSCarControllInput>();
			racingAIs.Add(thisCarsAI);
			if(selectedCar==null) {
				selectedCar = thisCarsAI;
				selectedCar.aiInput = selectedCar.GetComponent<IRDSCarControllInput>();
				selectedCar.aiCar.onRaceStart += onStartedRace;
				carCamera.changeTarget(selectedCar.aiInput.GetInstanceID());
			}
			if(racingAIs.Count==2) {
				changeCar();
			}
			if(carInterface==null) {
				carInterface = GameObject.Find("IndividualRaceInterface").GetComponent<IndividualCarInterfaceManager>();
			}
			carInterface.targetAI = selectedCar;
  
			

		}
示例#2
0
		public SectorTimeTriplet (IRDSCarControllerAI aCar,RacingAI aCustomAI)
		{
			car = aCar;
			customAI = aCustomAI;
			lapNumber = aCar.GetLap();
			time = aCar.GetCurrentLapTime();
			timeString = aCar.GetCurrentLapTimeString();
			totalTime = aCar.GetCurrentTotalRaceTime();
		}
示例#3
0
	void Start () 
    {

		text = GetComponent<TextMesh>();
		AI = transform.root.GetComponent<IRDSCarControllerAI>();
	    thisTransform = transform;
		if (useMainCamera)
        	cam = Camera.main;
    	else
        	cam = cameraToUse;
    	camTransform = cam.transform;
		if (AI != null)
			text.text = AI.GetDriverName();
		if (!enableForPlayerCar && IRDSStatistics.GetCurrentCar() && IRDSStatistics.GetCurrentCar() == AI){
			GetComponent<Renderer>().enabled = false;
		}
	}
示例#4
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;
	}
示例#5
0
		public void applyPartToCar(IRDSDrivetrain aDriveTrain,IRDSCarControllerAI aAI,RacingAI aRacingAI) {

			for(int i = 0;i<activeLevel;i++) {
				aDriveTrain.SetTurboPSI(aDriveTrain.GetTurboAirPresure()+researchRow._effectonturbopsi);
				float hpToKW = 745.699872f;
				aDriveTrain.SetMaxPower(aDriveTrain.GetOriginalPower()+researchRow._effectonhp*hpToKW);
				aDriveTrain.SetMaxTorque(aDriveTrain.GetMaxTorque()+researchRow._effectontorque);
				aRacingAI.nitrosRemaining += (byte) researchRow._effectonnitrocapacity;
				aDriveTrain.ShiftSpeed += researchRow._effectonshiftspeed;

				if(aDriveTrain.ShiftSpeed<0) {
					aDriveTrain.ShiftSpeed = 0.01f;
				}

				IRDSAerodynamicResistance ar = aDriveTrain.gameObject.GetComponent<IRDSAerodynamicResistance>();
				Vector3 coefficients = ar.GetCoefficients();
				coefficients.z -= researchRow._bodyaerodragreduce;
				if(coefficients.z<0.001f) {
					coefficients.z = 0.001f;
				}
				ar.SetCoefficients(coefficients);

				aAI.SetHumanError(aAI.GetHumanError()-researchRow._humanerrorreductor);
				aRacingAI.engineTempMonitor.engineBlowupTemp += researchRow._coolingmaxtempeffect;
				aRacingAI.engineTempMonitor.baseCooling += researchRow._coolingbaseeffect;
				if(float.IsNaN(aRacingAI.engineTempMonitor.baseCooling)||float.IsNaN(aRacingAI.engineTempMonitor.engineBlowupTemp)) {
					Debug.Log ("STOP!");
				}
		/*		IRDSWheel[] wheels = aRacingAI.wheels;
				for(int c = 0;c<wheels.Length;c++) {
					wheels[c].SetGrip(wheels[c].GetGrip()+researchRow._tirecoefficientofgripchange);
					
				}*/

				aRacingAI.nitroFerocity += researchRow._effectonnitrodurability;
				aRacingAI.nitroFuel += researchRow._effectonnitrofuel;
 			}

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

		}
示例#7
0
		public void applyResearchToCar(IRDSDrivetrain aDriveTrain,IRDSCarControllerAI aAI,RacingAI aRacingAI) {
			for(int i = 0;i<this.rndParts.Count;i++) {
				rndParts[i].applyPartToCar(aDriveTrain,aAI,aRacingAI);
			}
		}
示例#8
0
		public void initLibraryValues(IRDSDrivetrain aDriveTrain,IRDSCarControllerAI aAI,RacingAI aRacingAI) {
			float hpToKW = 745.699872f;
			aDriveTrain.SetMaxPower(carHP*hpToKW);
			aDriveTrain.SetPowerRPM(this.carLibRecord.carHPRPM);
	
			aDriveTrain.SetMaxTorque(this.carTorque);
			aDriveTrain.SetTorqueRPM(this.carLibRecord.carTorqueRPM);
			aDriveTrain.ShiftSpeed = this.shiftSpeed;
			aAI.spdLimit = (float) this.carMaxSpeed; 
			aRacingAI.nitrosRemaining = (byte) this.nitroCapacity;
		//	aDriveTrain.SetEngineOrientation(Vector3.up);
 
		}  
示例#9
0
	// Use this for initialization
	void Start () {
		car = GetComponent<IRDSCarControllerAI>();
		car.onRaceEnd  = OnRaceEnd;
	}