private int finishPositionSort(RacingAI a1,RacingAI a2) {
		if(a1.finishPoints>a2.finishPoints) {
			return -1;
		} else if(a1.finishPoints<a2.finishPoints) {
			return 1;
		}
		return 0;
	}
Beispiel #2
0
		public ErrorState (float aHumanError,RacingAI aAI)
		{
			framesOfError = Convert.ToInt32(aHumanError*1000);
			
			corneringSpeedEffector = 1000f*UnityEngine.Random.Range(0,aHumanError);
			brakeAggressionEffector = aHumanError;
			backToLineError = -0.25f*aHumanError;
		}
		public SectorTimeTriplet (IRDSCarControllerAI aCar,RacingAI aCustomAI)
		{
			car = aCar;
			customAI = aCustomAI;
			lapNumber = aCar.GetLap();
			time = aCar.GetCurrentLapTime();
			timeString = aCar.GetCurrentLapTimeString();
			totalTime = aCar.GetCurrentTotalRaceTime();
		}
Beispiel #4
0
	// Use this for initialization


	public void addEffectToCar(RacingAI aAI,IRDSWing[] aWings) {
		IRDSCarControllerAI ai = aAI.GetComponent<IRDSCarControllerAI>();
		IRDSDrivetrain driveTrain = aAI.GetComponent<IRDSDrivetrain>();
		//IRDSCarControllInput controlInput = aAI.GetComponent<IRDSCarControllInput>();
		if(humanErrorPercent!=0f)
			ai.SetHumanError(ai.GetHumanError()*humanErrorPercent);
		ai.SetHumanError(ai.GetHumanError()+humanErrorModifier);

		
		aAI.engineWearPerFrame += engineWearAdd;
		if(corneringSpeedFactorPercent!=0f)
			ai.SetCorneringSpeedFactor(aAI.originalCorneringSpeed*corneringSpeedFactorPercent);
		if(aggressionOnBrakingPercent!=0f)
			ai.SetAggressivenessOnBrake(aAI.originalBrakingAggressiveness*aggressionOnBrakingPercent);
		ai.SetOvertakeSpeedDiference(aAI.originalOvertakeSpeedDiff+overtakeSpeedDiffModifier);
		
		if(overtakeFactorPercent!=0f)
			ai.SetOvertakeFactor(aAI.originalOvertakeFactor*overtakeFactorPercent);
		aAI.staminaDecrementer = staminaDecrementer;
		if(horsePowerMultiplier!=0f) {
			float newPower = aAI.originalPower*horsePowerMultiplier;
			if(float.IsNaN(newPower)) {
				Debug.LogError("New Power is NaN: "+aAI.originalPower+","+horsePowerMultiplier);
			} else
				driveTrain.SetMaxPower(newPower);
		}
		if(torqueMultiplier!=0f) {
			float newMaxTorque = aAI.originalTorque*torqueMultiplier;
			if(float.IsNaN(newMaxTorque)) {
				Debug.LogError("New Torque is NaN: "+aAI.originalTorque+","+torqueMultiplier);
			} else
				driveTrain.SetMaxTorque(newMaxTorque);
		}
		if(float.IsNaN(driveTrain.GetRPM())) {
			Debug.LogError("RPM is now NaN!");
		}
		if(changeUpMultiplier!=0f) {
			float newShiftRange = changeUpMultiplier;
	//		Debug.Log ("new shift range is: "+newShiftRange+" car is: "+aAI.gameObject.name);
			if(newShiftRange>0.97f) {
				newShiftRange = 0.97f;
			}
			ai.shiftUpFactor = newShiftRange;
		}



		
		/*
		aWings[0].SetLiftCoefficient(aWings[0].GetLiftCoefficient()+frontWingAddition);
		aWings[1].SetLiftCoefficient(aWings[1].GetLiftCoefficient()+rearWingAddition);*/
	}
Beispiel #5
0
		public void finish() {
			try {
			Destroy(this.btnDoOrDieEngine1.gameObject);
			Destroy(this.btnDriveNormalEngine1.gameObject);
			Destroy(this.btnTakeItEasyEngine1.gameObject);
			if(changeCars!=null) {
				Destroy(this.changeCars.gameObject);
				Destroy(this.changeCamera.gameObject);
			}
			} catch(Exception e) {
			
		} 
			selectedCar = null;
			carInterface.finish();
			
		}
		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 init(RacingAI aDriver,int aPosition) {
		driver = aDriver;
		if(positionLabel==null) {
			UILabel[] childLabels = this.GetComponentsInChildren<UILabel>();
			for(int i = 0;i<childLabels.Length;i++) {
				if(childLabels[i].gameObject.name=="FinisherPosition") {
					positionLabel = childLabels[i];
				}
				if(childLabels[i].gameObject.name=="FinisherName") {
					nameLabel = childLabels[i];
				}
				if(childLabels[i].gameObject.name=="FinisherDetail") {
					prizeInfo = childLabels[i];
				}
			}
		}
		string pos = (aPosition+1)+". ";
		this.positionLabel.text = pos;
		this.nameLabel.text = aDriver.driverName+" "+ChampionshipSeason.ACTIVE_SEASON.getTeamFromDriver(aDriver.driverRecord).teamName;
		this.prizeInfo.text = aDriver.finishTimeString;

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

		}
Beispiel #9
0
	public void HandleNewFinisher(RacingAI aRacingAI) {
		finishers.Add(aRacingAI);
		GTTeam team = ChampionshipSeason.ACTIVE_SEASON.getTeamFromDriver(aRacingAI.driverRecord);
		team.cash += ChampionshipRaceSettings.ACTIVE_RACE.prizeForPosition(finishers.size,this.maxCars);;
		aRacingAI.prizeString = ""+ChampionshipRaceSettings.ACTIVE_RACE.prizeForPosition(finishers.size,this.maxCars);
		aRacingAI.prize = ChampionshipRaceSettings.ACTIVE_RACE.prizeForPosition(finishers.size,this.maxCars);
		aRacingAI.won = finishers.size==1;
		aRacingAI.finishPoints = ChampionshipRaceSettings.ACTIVE_RACE.pointsForDriverPosition(finishers.size);
		aRacingAI.driverRecord.lastRacePoints = aRacingAI.finishPoints;
		aRacingAI.driverRecord.championshipPoints += aRacingAI.finishPoints;
		
		GTTeam owningTeam = ChampionshipSeason.ACTIVE_SEASON.getTeamFromDriver(aRacingAI.driverRecord);
		if(finishers.size==1) {
			timeUntilForcedFinish = 45;
			owningTeam.seasonWins++;
		}
		owningTeam.addPoints(aRacingAI.finishPoints,finishers.size);
		activeCarsCount--;
		if(activeCarsCount==0) {
			Debug.Log ("Race Finished!");
			this.teamController.finish();
			findAndDestroyGameObjectIfExists("PositionArea");
			findAndDestroyGameObjectIfExists("TopMiddleArea");
			findAndDestroyGameObjectIfExists("LapArea");
			findAndDestroyGameObjectIfExists("BottomArea");
			findAndDestroyGameObjectIfExists("CarBehindLabel");
			findAndDestroyGameObjectIfExists("CarInfrontLabel");
			findAndDestroyGameObjectIfExists("SimSpeedButton");
			Destroy(this.minimapObject);
			if(this.racePositions!=null)
				Destroy(this.racePositions.gameObject);

			RandomEvent r = ChampionshipSeason.ACTIVE_SEASON.leagueForTeam(ChampionshipSeason.ACTIVE_SEASON.getUsersTeam()).getRandomEventCompletingOnDay(ChampionshipSeason.ACTIVE_SEASON.secondsPast);
			if(r!=null) {
				if(r.eventType==ERandomEventType.FinishAheadOf) {
					if(pointsForTeamInRace(r.targetTeam)<pointsForTeamInRace(ChampionshipSeason.ACTIVE_SEASON.getUsersTeam())) {
						// User has won their bet
						RaceFinisherTable.betWon = r.rewardCash*2;

						DialogueLua.SetVariable("RandomEventStringMessage",r.wonAlert);
						//DialogueManager.ShowAlert(r.wonAlert);
						activateFinishersOnClose = true;
						this.doConversation("RandomEventComplete");
					} else {
						DialogueLua.SetVariable("RandomEventStringMessage",r.lostAlert);
						RaceFinisherTable.betWon = r.rewardCash*-1;
						activateFinishersOnClose = true;
						this.doConversation("RandomEventComplete");
					}
					StartCoroutine(delayToActivateFinishers());
					return;
				}
			} else {
				RaceFinisherTable.betWon = 0;
			}
			
			raceFinisherTable.activate(finishers);


		}
	}
Beispiel #10
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;
  
			

		}
Beispiel #11
0
		public void changeCar() {
			if(selectedCar == null) {
				selectedCar = racingAIs[1];
			}
			if (selectedCar.driverRecord.id==racingAIs[0].driverRecord.id) {
				carCamera.changeTarget(racingAIs[1].aiInput.GetInstanceID());
				selectedCar = racingAIs[1];
				
			} else {
				carCamera.changeTarget(racingAIs[0].aiInput.GetInstanceID());
				selectedCar = racingAIs[0];
			}
			if(currentlyViewingTween!=null) {
				currentlyViewingTween.ResetToBeginning();
				currentlyViewingTween.enabled = true;
				currentlyViewingLabel.text = "NOW VIEWING "+selectedCar.driverName.ToUpper();
				changeCameraIcon();
			} else this.initButtons(); 
			carInterface.targetAI = selectedCar;
		}
Beispiel #12
0
		public void initDriversFace(RacingAI aAI) {
			GTTeam team = ChampionshipSeason.ACTIVE_SEASON.getUsersTeam();
			int indexForThis = team.indexForDriver(aAI.driverRecord);
			string findThis = "DriverFace2";
			if(indexForThis==0) {
				findThis = "DriverFace1";
			}
			GameObject f = GameObject.Find (findThis);
			if(f!=null) {
				DriverFaceManager m = f.GetComponent<DriverFaceManager>();
				RacingAI ai = aAI;
				m.init(ai);
			}	
		}
Beispiel #13
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);
			}
		}
Beispiel #14
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);
 
		}  
Beispiel #15
0
	public void init(RacingAI aAI) {
		faceSprite.sprite2D = aAI.driverRecord.record.sprite;
		driverName.text = aAI.driverName;
		aAI.messageHolder = this;
		racingAIRef = aAI;

		this.btnEngineEasy.onClick.Add(new EventDelegate(this,"onEngineEasy"));
		this.btnEngineNormal.onClick.Add(new EventDelegate(this,"onEngineNormal"));
		this.btnEngineHard.onClick.Add(new EventDelegate(this,"onEngineHard"));
		
		this.btnTyresEasy.onClick.Add(new EventDelegate(this,"onTyresEasy"));
		this.btnTyresNormal.onClick.Add(new EventDelegate(this,"onTyresNormal"));
		this.btnTyresHard.onClick.Add(new EventDelegate(this,"onTyresHard"));


		this.btnNitro.onClick.Add (new EventDelegate(this,"onUseNitro"));

		remainingNitros.text = ""+aAI.nitrosRemaining;
	}
Beispiel #16
0
    // Use this for initialization
    void Start()
    {
        followcam   = GameObject.Find("FollowCam").GetComponent <FollowCam>();
        vehicleList = new GameObject[transform.childCount];
        for (int i = 0; i < transform.childCount; i++)
        {
            vehicleList[i] = transform.GetChild(i).gameObject;
        }

        switch (PlayerPrefs.GetInt("VehicleSelected"))
        {
        case 1:
            print("1");
            foreach (GameObject g in vehicleList)
            {
                if (!g.name.Equals("truckFinal"))
                {
                    g.tag         = "AI";
                    ai            = g.GetComponent <RacingAI>();
                    motor         = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled    = true;
                    motor.enabled = false;
                    //g.SetActive(false);
                }
                else
                {
                    g.tag            = "Player";
                    ai               = g.GetComponent <RacingAI>();
                    motor            = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled       = false;
                    motor.enabled    = true;
                    followcam.target = g.transform;
                    speedometer.car  = g;
                }
            }
            break;

        case 2:
            print("2");
            foreach (GameObject g in vehicleList)
            {
                if (!g.name.Equals("sportFinal"))
                {
                    g.tag         = "AI";
                    ai            = g.GetComponent <RacingAI>();
                    motor         = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled    = true;
                    motor.enabled = false;
                    //g.SetActive(false);
                }
                else
                {
                    g.tag            = "Player";
                    ai               = g.GetComponent <RacingAI>();
                    motor            = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled       = false;
                    motor.enabled    = true;
                    followcam.target = g.transform;
                    speedometer.car  = g;
                }
            }
            break;

        case 3:
            print("3");
            foreach (GameObject g in vehicleList)
            {
                if (!g.name.Equals("limoFinal"))
                {
                    g.tag         = "AI";
                    ai            = g.GetComponent <RacingAI>();
                    motor         = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled    = true;
                    motor.enabled = false;
                    //g.SetActive(false);
                }
                else
                {
                    g.tag            = "Player";
                    ai               = g.GetComponent <RacingAI>();
                    motor            = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled       = false;
                    motor.enabled    = true;
                    followcam.target = g.transform;
                    speedometer.car  = g;
                }
            }
            break;

        case 0:
            print("4");
            foreach (GameObject g in vehicleList)
            {
                if (!g.name.Equals("muscleFinal"))
                {
                    g.tag         = "AI";
                    ai            = g.GetComponent <RacingAI>();
                    motor         = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled    = true;
                    motor.enabled = false;
                    //g.SetActive(false);
                }
                else
                {
                    g.tag            = "Player";
                    ai               = g.GetComponent <RacingAI>();
                    motor            = g.GetComponent <MLP_HoverMotor>();
                    ai.enabled       = false;
                    motor.enabled    = true;
                    followcam.target = g.transform;
                    speedometer.car  = g;
                }
            }
            break;
        }
    }