예제 #1
0
        public void Update(CrossRoad cr)
        {
            ExecuteQuery(
                String.Format(
                    "UPDATE `CrossRoad` SET `Name` = \"{1}\", `IsLights` = {2}, `LinesVertical`= {3}, `LinesHorisontal` = {4}, " +
                    "`LinesRing` = {5}, `PriorityType` = {6}, `LightsTime` = {7} WHERE `ID` = {0};",
                    cr.ID, cr.Name, (cr.IsLights) ? "1" : "0", cr.LinesVertical, cr.LinesHorisontal, cr.LinesRing, (int)cr.PriorityType, cr.LightsTime));

            //распределение машин
            ExecuteQuery(
                String.Format(
                    "UPDATE `CrossRoadLaw` SET `IDLaw` = {0}, `Parametr1` = {1}, `Parametr2` = {2} " +
                    "WHERE `IDCrossRoad` = {3} AND `LawOfWhat` = 1;",
                    (int)cr.DistribustionCars.Type, Convert.ToString(cr.DistribustionCars.Parametr1).Replace(',', '.'), Convert.ToString(cr.DistribustionCars.Parametr2).Replace(',', '.'), cr.ID));

            //распределение пешеходов
            ExecuteQuery(
                String.Format(
                    "UPDATE `CrossRoadLaw` SET `IDLaw` = {0}, `Parametr1` = {1}, `Parametr2` = {2} " +
                    "WHERE `IDCrossRoad` = {3} AND `LawOfWhat` = 2;",
                    (int)cr.DistributionHumans.Type, Convert.ToString(cr.DistributionHumans.Parametr1).Replace(',', '.'), Convert.ToString(cr.DistributionHumans.Parametr2).Replace(',', '.'), cr.ID));
        }
예제 #2
0
 public FormCrossRoadAdd(CrossRoad obj) : this()
 {
     CrossRoad     = obj;
     Text          = "Изменение перекрестка";
     buttonOk.Text = "Изменить";
 }
예제 #3
0
 public override List <Waypoint> CreateWaypoints(Vector2 comingfrom, Vector2 goingto)
 {
     //reuse the 4 way
     return(CrossRoad.CreateCrossroadWaypoint(comingfrom, goingto, this));
 }
예제 #4
0
 public void DeleteCrossRoad(CrossRoad cr)
 {
     crossRoadDao.Delete(cr);
     CrossRoads.Remove(cr);
 }
예제 #5
0
 public void EditCrossRoad(CrossRoad cr)
 {
     crossRoadDao.Update(cr);
 }
예제 #6
0
 public void AddCrossroad(CrossRoad cr)
 {
     CrossRoads.Add(crossRoadDao.Insert(cr));
 }
예제 #7
0
    private GameObject DetectRoadAhead()
    {
        GameObject objectFound   = null;
        Vector3    roadDectector = transform.forward * DETECTION_DISTANCE;
        Vector3    fromDetector  = transform.position + new Vector3(0, 2.8f, 3);

        roadDectector.y -= 0.7f;;

        RaycastHit hit;
        Ray        drivingRay = new Ray(transform.position + new Vector3(0, 2f, 0), roadDectector);

        Debug.DrawRay(transform.position + new Vector3(0, 2f, 0), roadDectector * 8, Color.yellow);

        if (Physics.Raycast(drivingRay, out hit, 20, roadDetectorLayer)) // TODO chequear solo el suelo
        {
            objectFound = hit.transform.gameObject;

            if (objectFound.GetComponent <CrossRoad>() != null)
            {
                if (!executingCoroutine) // TO-DO check to move this to function level somehow
                {
                    CrossRoad crossRoad = objectFound.GetComponent <CrossRoad>();
                    logger.Log(transform.name + "Found a crossroad, taking decisions.");

                    if (crossRoad.IsRoadOccupied(gameObject.GetInstanceID()))
                    {
                        // Coroutine to wait and mark as turning
                        logger.Log("Stopping at road cross a vehicle is crossing");
                        StartCoroutine(WaitAtCrossRoad(crossRoad));
                    }
                    else
                    {
                        // Choose to go straight, left or right
                        CrossRoad.DIRECTION_FROM        directionFrom      = GetMyDirectionFrom();
                        List <CrossRoad.DIRECTION_FROM> possibleDirections = crossRoad.GetPossibleDirections(directionFrom);
                        int randomChoose = UnityEngine.Random.Range(0, possibleDirections.Count);
                        CrossRoad.DIRECTION_FROM directionTo = possibleDirections[randomChoose];
                        TURN turn = GetTurn(directionFrom, directionTo);
                        switch (turn)
                        {
                        case TURN.STRAIGHT:
                            // Go straight
                            logger.Log("Continuing straight");
                            StartCoroutine(CrossStraight(crossRoad));
                            break;

                        case TURN.LEFT:
                            // Turn left
                            logger.Log("Lets go left");
                            StartCoroutine(GoLeft(crossRoad));
                            break;

                        case TURN.RIGHT:
                            // Turn right
                            logger.Log("Lets go right");
                            StartCoroutine(GoRight(crossRoad));
                            break;

                        case TURN.BACK:
                            // Turn back: THIS IS NOT ALLOWED AS CROSS TAKES OUT THE ORIGIN
                            logger.Log("Found a wall doing a 180 turn.");
                            StartCoroutine(MakeUTurnOnCross(crossRoad));
                            break;

                        default:
                            // Go straight
                            logger.Log("[Default] Continuing straight");
                            StartCoroutine(CrossStraight(crossRoad));
                            break;
                        }
                    }
                }
            }

            if (objectFound.CompareTag("Wall"))
            {
                if (!executingCoroutine)
                {
                    logger.Log("Found a wall doing a 180 turn.");
                    StartCoroutine(TurnBack());
                }
            }
        }

        return(objectFound);
    }
예제 #8
0
 public Road(CrossRoad cr1, CrossRoad cr2)
 {
     this.cr1 = cr1;
     this.cr2 = cr2;
 }