Beispiel #1
0
        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());
			});

		}
Beispiel #3
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()
        {
			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);


        }
Beispiel #5
0
        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;
				}
			}
		}
Beispiel #7
0
 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;
                }
            }
            
        }
Beispiel #9
0
        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;
                }
            }
        }
Beispiel #10
0
        // 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;						
					}
					
				}
			}
		}
Beispiel #12
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);
		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;
                    }
                }
            }
        }
Beispiel #17
0
 // 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);