//Wait for the car to stop before we generate a new path
    //or it might have passed the start position of the path when the path has been generated
    IEnumerator WaitForCarToStop()
    {
        //Get the car's current speed
        VehicleDataController carDataController = SimController.current.GetActiveCarData();

        //Will continue looping until the car has a lower speed then 5 km/h
        while (Mathf.Abs(carDataController.GetSpeed_kmph()) > 5f)
        {
            yield return(null);
        }

        //Now we need to check again if the target position is possible because we might have moved the mouse while the car was braking
        if (HasMouseCarValidPosition())
        {
            //Move the marker car to the end of the path so we know know where the path should end and at which heading
            Car carMouse = new Car(SimController.current.GetCarMouse(), SimController.current.GetActiveCarData());

            Transform carShowingEndPos = SimController.current.GetCarShowingEndPosTrans();

            carShowingEndPos.position = carMouse.carData.GetCenterPos(carMouse.rearWheelPos, carMouse.HeadingInRadians);
            carShowingEndPos.rotation = Quaternion.Euler(new Vector3(0f, carMouse.HeadingInDegrees, 0f));

            carShowingEndPos.gameObject.SetActive(true);


            //The car has stopped and the target is a valid positon, so try to generate a path
            StartCoroutine(GeneratePath(carMouse));

            yield break;
        }
        else
        {
            Debug.Log("The car cant move to this position");
        }
    }
        public void VehicleStatusChecker_Test()
        {
            try
            {
                var serviceProvider = new ServiceCollection()
                                      .AddSingleton <IVehicleBAL, VehicleBAL>()
                                      .AddSingleton <IVehicleRepository, VehicleRepository>()
                                      .BuildServiceProvider();

                VehicleDataController vehicleDataController = new VehicleDataController(null, serviceProvider.GetService <IVehicleBAL>());

                vehicleDataController.VehicleStatusUpdate(1, true);

                System.Threading.Thread.Sleep(65000);

                Vehicle x_Vehicle = vehicleDataController.VehiclesById(1);
                if (x_Vehicle.Status == false)
                {
                    Assert.IsAssignableFrom <Vehicle>(x_Vehicle);
                }
                else
                {
                    Assert.True(false);
                }
            }
            catch (Exception ex)
            {
                Assert.True(false);
            }
        }
    //Get data such as speed, length, etc belonging to the self-driving car
    public VehicleDataController GetActiveCarData()
    {
        Transform activeCar = GetSelfDrivingCarTrans();

        VehicleDataController carData = activeCar.GetComponent <VehicleController>().GetCarData();

        return(carData);
    }
        public void Vehicles_Filter4_Test()
        {
            try
            {
                var serviceProvider = new ServiceCollection()
                                      .AddSingleton <IVehicleBAL, VehicleBAL>()
                                      .AddSingleton <IVehicleRepository, VehicleRepository>()
                                      .BuildServiceProvider();

                VehicleDataController vehicleDataController = new VehicleDataController(null, serviceProvider.GetService <IVehicleBAL>());
                var list = vehicleDataController.Vehicles(1, true);
                Assert.IsAssignableFrom <List <Vehicle> >(list);
            }
            catch (Exception ex)
            {
                Assert.True(false);
            }
        }
        public void VehicleStatusUpdate_Test()
        {
            try
            {
                var serviceProvider = new ServiceCollection()
                                      .AddSingleton <IVehicleBAL, VehicleBAL>()
                                      .AddSingleton <IVehicleRepository, VehicleRepository>()
                                      .BuildServiceProvider();

                VehicleDataController vehicleDataController = new VehicleDataController(null, serviceProvider.GetService <IVehicleBAL>());
                bool is_success = vehicleDataController.VehicleStatusUpdate(1, true);
                Assert.True(is_success);
            }
            catch (Exception ex)
            {
                Assert.True(false);
            }
        }
    //Add a square showing the car's position if it has moved
    private void AddSquare()
    {
        Transform carTrans = SimController.current.GetSelfDrivingCarTrans();

        VehicleDataController carDataController = carTrans.GetComponent <VehicleDataController>();

        //How far has the car driven since last saved position?
        float distSqr = (lastPos - carTrans.position).sqrMagnitude;

        //How far should the car drive before we add a rectangle
        float dist = 2f;

        if (distSqr > dist * dist)
        {
            //Find the corner coordinates of the car at this position
            Vector3 F = carDataController.RearWheelPos(carTrans) + carTrans.forward * carDataController.carData.distancePivotToFront;
            Vector3 B = carDataController.RearWheelPos(carTrans) + carTrans.forward * carDataController.carData.distancePivotToRear;

            Vector3 center = (F + B) * 0.5f;

            float carWidth  = carDataController.carData.carWidth;
            float carLength = carDataController.carData.CarLength;

            float heading = carTrans.eulerAngles.y * Mathf.Deg2Rad;

            Rectangle rect = CarData.GetCornerPositions(center, heading, carWidth, carLength);

            //Set the height of the rectangle
            rect.FL.y = DisplayController.oldPosHeight;
            rect.FR.y = DisplayController.oldPosHeight;
            rect.BL.y = DisplayController.oldPosHeight;
            rect.BR.y = DisplayController.oldPosHeight;

            //Save this position
            oldCarPositions.Add(rect);

            lastPos = carTrans.position;
        }
    }
Example #7
0
    //
    // Update speed
    //

    //Dont need to update speed every frame
    private IEnumerator UpdateSpeedText()
    {
        while (true)
        {
            if (SimController.current != null)
            {
                //Get the speed in km/h
                VehicleDataController dataController = SimController.current.GetActiveCarData();

                float speed = dataController.GetSpeed_kmph();

                //float speed = 0f;

                //Round
                int speedInt = Mathf.RoundToInt(speed);

                //Display the speed
                speedText.text = speedInt + " km/h";
            }

            yield return(new WaitForSeconds(0.5f));
        }
    }