private IEnumerator ChangeAIPaths(float time, UnityStandardAssets.Utility.WaypointCircuit wc, CarAIControl ai) { yield return(new WaitForSeconds(time)); ai.switchCircuit(wc, 0); }
void Awake () { Initialize<States> (); carController = UserCar.GetComponent<CarController> (); carController.MaxSpeed = 15f; carAI = UserCar.GetComponent<CarAIControl> (); sensitiveSensorResponseHandler = UserCar.GetComponent<SensitiveSensorResponseHandler> (); trashCanSensorResponseHandler = UserCar.GetComponent<TrashcanSensorResponseHandler> (); crazyAI = CrazyIntersectionAI.GetComponent<CarAIControl> (); crazyCarController = CrazyIntersectionAI.GetComponent<CarController> (); hudController = UserCar.GetComponentInChildren<HUDController> (); audioController = UserCar.GetComponentInChildren<HUDAudioController> (); ambientAudioSource = GameObject.FindWithTag (VRAVEStrings.Ambient_Audio).GetComponent<AudioSource>(); ambientAudioSource.mute = true; hudAsyncController = UserCar.GetComponentInChildren<HUDAsyncController> (); mirror = GameObject.FindWithTag (VRAVEStrings.Mirror); audioController.audioModel = GameObject.FindObjectOfType<ReactionTimeAudioModel> (); // configure HUD models hudController.models = new HUDModel[2]; hudController.durations = new float[2]; hudController.models[0] = new HUDVRAVE_Default(); hudController.model = hudController.models[0]; // configure ASYNC controller hudAsyncController.Configure(audioController, hudController); unsuspectingCarAI = UnsuspectingAI.GetComponent<CarAIControl> (); foreach (GameObject o2 in triggers) { o2.SetActive(false); } resetIntersectionScenario (); //resetTrashCanScenario(); //ChangeState (States.TrashcanBriefing); ChangeState (States.IntersectionBriefing); //ChangeState(States.AIDrivingToTrashcanBriefing); cameraFade.StartAlphaFade (Color.black, true, 3f, () => { audioController.playAudio (3); StartCoroutine (PostIntersectionScenarioBriefingHUDChange()); }); }
void Awake() { Initialize <States> (); carController = UserCar.GetComponent <CarController> (); carController.MaxSpeed = 15f; carAI = UserCar.GetComponent <CarAIControl> (); sensitiveSensorResponseHandler = UserCar.GetComponent <SensitiveSensorResponseHandler> (); trashCanSensorResponseHandler = UserCar.GetComponent <TrashcanSensorResponseHandler> (); crazyAI = CrazyIntersectionAI.GetComponent <CarAIControl> (); crazyCarController = CrazyIntersectionAI.GetComponent <CarController> (); hudController = UserCar.GetComponentInChildren <HUDController> (); audioController = UserCar.GetComponentInChildren <HUDAudioController> (); ambientAudioSource = GameObject.FindWithTag(VRAVEStrings.Ambient_Audio).GetComponent <AudioSource>(); ambientAudioSource.mute = true; hudAsyncController = UserCar.GetComponentInChildren <HUDAsyncController> (); mirror = GameObject.FindWithTag(VRAVEStrings.Mirror); audioController.audioModel = GameObject.FindObjectOfType <ReactionTimeAudioModel> (); // configure HUD models hudController.models = new HUDModel[2]; hudController.durations = new float[2]; hudController.models[0] = new HUDVRAVE_Default(); hudController.model = hudController.models[0]; // configure ASYNC controller hudAsyncController.Configure(audioController, hudController); unsuspectingCarAI = UnsuspectingAI.GetComponent <CarAIControl> (); foreach (GameObject o2 in triggers) { o2.SetActive(false); } resetIntersectionScenario(); //resetTrashCanScenario(); //ChangeState (States.TrashcanBriefing); ChangeState(States.IntersectionBriefing); //ChangeState(States.AIDrivingToTrashcanBriefing); cameraFade.StartAlphaFade(Color.black, true, 3f, () => { audioController.playAudio(3); StartCoroutine(PostIntersectionScenarioBriefingHUDChange()); }); }
void Awake() { cameraFade.StartAlphaFade (Color.black, true, 2f); Initialize<States>(); userCarController = UserCar.GetComponent<CarController>(); userCarController.MaxSpeed = 20f; userCarAI = UserCar.GetComponent<CarAIControl>(); userCarAI.enabled = false; UserCar.GetComponent<CarUserControl>().enabled = false; AIVehicleCarController = AIVehicle.GetComponent<CarController>(); AIVehicleCarController.MaxSpeed = 15; AIVehicleAI = AIVehicle.GetComponent<CarAIControl>(); AIVehicleAI.enabled = false; (AIVehicle.GetComponent("Halo") as Behaviour).enabled = false; hudController = UserCar.GetComponentInChildren<HUDController>(); hudAsyncController = UserCar.GetComponentInChildren<HUDAsyncController>(); audioController = UserCar.GetComponentInChildren<HUDAudioController>(); ambientAudioSource = GameObject.FindWithTag (VRAVEStrings.Ambient_Audio).GetComponent<AudioSource>(); lanePassingHandler = UserCar.GetComponent<LanePassingSensorResponseHandler>(); lanePassingHandler.Enable = false; followHandler = UserCar.GetComponent<FollowingSensorResponseHandler>(); // configure HUD models hudController.models = new HUDModel[2]; hudController.durations = new float[2]; hudController.models[0] = new HUDVRAVE_Default(); hudController.model = hudController.models[0]; // configure ASYNC controller hudAsyncController.Configure(audioController, hudController); //configure audio audioController.audioModel = GameObject.FindObjectOfType<LanePassingAudioModel>(); ambientAudioSource.mute = true; userMode = true; UserCar.SetActive(true); AIVehicle.SetActive(true); mirror = GameObject.FindWithTag(VRAVEStrings.Mirror); ChangeState(States.InitState); }
void Awake() { cameraFade.StartAlphaFade(Color.black, true, 2f); Initialize <States>(); userCarController = UserCar.GetComponent <CarController>(); userCarController.MaxSpeed = 20f; userCarAI = UserCar.GetComponent <CarAIControl>(); userCarAI.enabled = false; UserCar.GetComponent <CarUserControl>().enabled = false; AIVehicleCarController = AIVehicle.GetComponent <CarController>(); AIVehicleCarController.MaxSpeed = 15; AIVehicleAI = AIVehicle.GetComponent <CarAIControl>(); AIVehicleAI.enabled = false; (AIVehicle.GetComponent("Halo") as Behaviour).enabled = false; hudController = UserCar.GetComponentInChildren <HUDController>(); hudAsyncController = UserCar.GetComponentInChildren <HUDAsyncController>(); audioController = UserCar.GetComponentInChildren <HUDAudioController>(); ambientAudioSource = GameObject.FindWithTag(VRAVEStrings.Ambient_Audio).GetComponent <AudioSource>(); lanePassingHandler = UserCar.GetComponent <LanePassingSensorResponseHandler>(); lanePassingHandler.Enable = false; followHandler = UserCar.GetComponent <FollowingSensorResponseHandler>(); // configure HUD models hudController.models = new HUDModel[2]; hudController.durations = new float[2]; hudController.models[0] = new HUDVRAVE_Default(); hudController.model = hudController.models[0]; // configure ASYNC controller hudAsyncController.Configure(audioController, hudController); //configure audio audioController.audioModel = GameObject.FindObjectOfType <LanePassingAudioModel>(); ambientAudioSource.mute = true; userMode = true; UserCar.SetActive(true); AIVehicle.SetActive(true); mirror = GameObject.FindWithTag(VRAVEStrings.Mirror); ChangeState(States.InitState); }
public override void handle (CarAIControl controller, Dictionary<int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } foreach (VRAVEObstacle vo in obstacles.Values) { if (vo.obstacleTag.Equals(VRAVEStrings.Crazy_AI_Car)) { controller.Driving = false; return; } } }
public override void handle(CarAIControl controller, Dictionary <int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } else { if (passingCheck(obstacles)) { Enable = false; controller.IsPassing = true; } } }
public override void handle(CarAIControl controller, Dictionary<int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } else { if (passingCheck(obstacles)) { Enable = false; controller.IsPassing = true; } } }
public override void handle(CarAIControl controller, Dictionary <int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } foreach (VRAVEObstacle vo in obstacles.Values) { if (vo.obstacleTag.Equals(VRAVEStrings.Crazy_AI_Car)) { controller.Driving = false; return; } } }
// check sensors 8 - 17, ignore otherwise // get the distance to the trash can and angle to the trash can // if angle is +, steer left // if angle is -, steer right ? // compute steer amount as fn of distance, angle, and base steer amount (10 degrees?) public override void handle(CarAIControl controller, Dictionary <int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } controller.IsAvoidingObstacle = false; VRAVEObstacle obs; for (int i = scanningRange_Left; i <= scanningRange_Right; ++i) { if (obstacles.TryGetValue(i, out obs)) { if (obs.obstacleTag.Equals(VRAVEStrings.Obstacle)) { // found trash can controller.IsAvoidingObstacle = true; //float distance = obs.Distance; // calculate the local-relative position of the target, to steer away from Vector3 localTarget = transform.InverseTransformPoint(obs.obstacle.point); // work out the local angle towards the target float targetAngle = Mathf.Atan2(localTarget.x, localTarget.z) * Mathf.Rad2Deg; if (targetAngle <= 0) { targetAngle = -90 + targetAngle; } else { targetAngle = 90 - targetAngle; } controller.ObstacleAvoidanceSteerAmount = -targetAngle * 2f; return; } } } }
// check sensors 8 - 17, ignore otherwise // get the distance to the trash can and angle to the trash can // if angle is +, steer left // if angle is -, steer right ? // compute steer amount as fn of distance, angle, and base steer amount (10 degrees?) public override void handle (CarAIControl controller, Dictionary<int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } controller.IsAvoidingObstacle = false; VRAVEObstacle obs; for (int i = scanningRange_Left; i <= scanningRange_Right; ++i) { if (obstacles.TryGetValue(i, out obs)) { if (obs.obstacleTag.Equals (VRAVEStrings.Obstacle)) { // found trash can controller.IsAvoidingObstacle = true; //float distance = obs.Distance; // calculate the local-relative position of the target, to steer away from Vector3 localTarget = transform.InverseTransformPoint (obs.obstacle.point); // work out the local angle towards the target float targetAngle = Mathf.Atan2 (localTarget.x, localTarget.z) * Mathf.Rad2Deg; if (targetAngle <= 0) targetAngle = -90 + targetAngle; else targetAngle = 90 - targetAngle; controller.ObstacleAvoidanceSteerAmount = -targetAngle * 2f; return; } } } }
public override void handle(CarAIControl controller, Dictionary <int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } else { if (obstacles.ContainsKey(9) && obstacles[9].obstacleTag.Equals(VRAVEStrings.Obstacle) && (obstacles[9].Distance <= 25)) { //Don't turn Enable = false; controller.TooClose = false; controller.TooFar = false; controller.AccelMultiplier = 0f; //GetComponentInParent<CarController>().MaxSpeed = AISpeed; return; } else if (obstacles.ContainsKey(7) && obstacles[7].obstacleTag.Equals(VRAVEStrings.AI_Car)) { CarController userCarController = GetComponentInParent <CarController>(); float AISpeed = obstacles[7].obstacle.collider.GetComponentInParent <CarController>().MaxSpeed; float differential = obstacles[7].Distance - followDistance; Debug.Log("Distance: " + obstacles[7].Distance + " Differential: " + differential); if (Mathf.Abs(differential) > 5f) { if (differential > 0f) //too far away { //userCarController.MaxSpeed = 1.2f * AISpeed; controller.AccelMultiplier = (1.0f + Mathf.Abs(controller.AccelMultiplier)) * 1.05f; controller.TooFar = true; Debug.Log("Too far : " + controller.AccelMultiplier); } else if (differential < 0f) //(differential < 0) //too close { //userCarController.MaxSpeed = 1.2f * AISpeed; controller.AccelMultiplier = -1.0f + -1f * Mathf.Abs(controller.AccelMultiplier) * (1.0f / 1.05f); //controller.AccelMultiplier = 0; controller.TooClose = true; Debug.Log("Too close : " + controller.AccelMultiplier); } } else if (Math.Abs(differential) > 1f) { if (differential > 0f) //too far away { userCarController.MaxSpeed = 1.5f * AISpeed; //controller.AccelMultiplier = controller.AccelMultiplier / 2; controller.TooFar = true; Debug.Log("Too far : " + controller.AccelMultiplier); } else if (differential < 0f) //(differential < 0) //too close { userCarController.MaxSpeed = 1.5f * AISpeed; //controller.AccelMultiplier = controller.AccelMultiplier / 2; controller.TooClose = true; Debug.Log("Too close : " + controller.AccelMultiplier); } } else { //In the correct following range. Do nothing. controller.TooClose = false; controller.TooFar = false; GetComponentInParent <CarController>().MaxSpeed = AISpeed; //obstacles[7].obstacle.collider.GetComponentInParent<CarController>().MaxSpeed = AISpeed; } } } }
// Defines how a vehicle should react to an obstacle hit // // In most cases, you will want to disable the sensor response handler at the end of handle() public abstract void handle (CarAIControl controller, Dictionary<int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition);
private IEnumerator ChangeAIPaths (float time, UnityStandardAssets.Utility.WaypointCircuit wc, CarAIControl ai, Action postPathChange) { yield return new WaitForSeconds (time); ai.switchCircuit(wc, 0); if (postPathChange != null) { postPathChange (); } }
private IEnumerator ChangeAIPaths (float time, UnityStandardAssets.Utility.WaypointCircuit wc, CarAIControl ai) { yield return new WaitForSeconds (time); ai.switchCircuit(wc, 0); }
public override void handle(CarAIControl controller, Dictionary<int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition) { if (!Enable) { return; } else { if(obstacles.ContainsKey(9) && obstacles[9].obstacleTag.Equals(VRAVEStrings.Obstacle) && (obstacles[9].Distance <= 25)) { //Don't turn Enable = false; controller.TooClose = false; controller.TooFar = false; controller.AccelMultiplier = 0f; //GetComponentInParent<CarController>().MaxSpeed = AISpeed; return; } else if (obstacles.ContainsKey(7) && obstacles[7].obstacleTag.Equals(VRAVEStrings.AI_Car)) { CarController userCarController = GetComponentInParent<CarController>(); float AISpeed = obstacles[7].obstacle.collider.GetComponentInParent<CarController>().MaxSpeed; float differential = obstacles[7].Distance - followDistance; Debug.Log("Distance: " + obstacles[7].Distance + " Differential: " + differential); if (Mathf.Abs(differential) > 5f) { if (differential > 0f) //too far away { //userCarController.MaxSpeed = 1.2f * AISpeed; controller.AccelMultiplier = (1.0f + Mathf.Abs(controller.AccelMultiplier)) * 1.05f; controller.TooFar = true; Debug.Log("Too far : " + controller.AccelMultiplier); } else if (differential < 0f) //(differential < 0) //too close { //userCarController.MaxSpeed = 1.2f * AISpeed; controller.AccelMultiplier = -1.0f + -1f * Mathf.Abs(controller.AccelMultiplier) * (1.0f/1.05f); //controller.AccelMultiplier = 0; controller.TooClose = true; Debug.Log("Too close : " + controller.AccelMultiplier); } } else if (Math.Abs(differential) > 1f) { if (differential > 0f) //too far away { userCarController.MaxSpeed = 1.5f * AISpeed; //controller.AccelMultiplier = controller.AccelMultiplier / 2; controller.TooFar = true; Debug.Log("Too far : " + controller.AccelMultiplier); } else if (differential < 0f) //(differential < 0) //too close { userCarController.MaxSpeed = 1.5f * AISpeed; //controller.AccelMultiplier = controller.AccelMultiplier / 2; controller.TooClose = true; Debug.Log("Too close : " + controller.AccelMultiplier); } } else { //In the correct following range. Do nothing. controller.TooClose = false; controller.TooFar = false; GetComponentInParent<CarController>().MaxSpeed = AISpeed; //obstacles[7].obstacle.collider.GetComponentInParent<CarController>().MaxSpeed = AISpeed; } } } }
// Defines how a vehicle should react to an obstacle hit // // In most cases, you will want to disable the sensor response handler at the end of handle() public abstract void handle(CarAIControl controller, Dictionary <int, VRAVEObstacle> obstacles, float currentSpeed, CarAIControl.BrakeCondition brakeCondition);