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; } } }
// Use this for initialization void Start () { carInput = GetComponent<IRDSCarControllInput>(); if (!carInput.GetCarPilot()) this.enabled = false; }