예제 #1
0
    public static Road CreateParkingSpot(int x, int y, float zRotation)
    {
        InitializePrefabs();
        GameObject road = (GameObject)SpoofInstantiate(parkingSpotPrefab);

        road.transform.position = new Vector3(x, y, 0);
        road.transform.Rotate(0, 0, zRotation);
        ParkingSpotRoad r = road.AddComponent <ParkingSpotRoad>();

        r.xPos           = x;
        r.yPos           = y;
        r.neighbourRoads = new List <Road>();
        //Register end as parking spot!
        if (worldInstance == null)
        {
            worldInstance = GameObject.FindObjectOfType <World>();
        }

        //Debug.Log("Adding parking spots. " + road.GetComponentsInChildren<ParkingSpace>().Length);
        worldInstance.parkingSpots.AddRange(road.GetComponentsInChildren <ParkingSpace>());
        foreach (ParkingSpace p in road.GetComponentsInChildren <ParkingSpace>())
        {
            p.road = r;
        }
        return(r);
    }
예제 #2
0
    public static Road CreateParkingSpotRight(int x, int y)
    {
        ParkingSpotRoad r = (ParkingSpotRoad)CreateParkingSpot(x, y, 270);

        r.transform.position += new Vector3(+0.35f, 0, 0);
        r.right = true;
        return(r);
    }
예제 #3
0
    public static Road CreateParkingSpotLeft(int x, int y)
    {
        ParkingSpotRoad r = (ParkingSpotRoad)CreateParkingSpot(x, y, 90);

        r.transform.position += new Vector3(-0.35f, 0, 0);
        r.left = true;
        return(r);
    }
예제 #4
0
    public static Road CreateParkingSpotDown(int x, int y)
    {
        ParkingSpotRoad r = (ParkingSpotRoad)CreateParkingSpot(x, y, 180);

        r.transform.position += new Vector3(0, -0.35f, 0);
        r.down = true;
        return(r);
    }
예제 #5
0
    public static Road CreateParkingSpotUp(int x, int y)
    {
        ParkingSpotRoad r = (ParkingSpotRoad)CreateParkingSpot(x, y, 0);

        r.transform.position += new Vector3(0, +0.35f, 0);
        r.up = true;
        return(r);
    }
예제 #6
0
    public static Car CreateCar(ParkingSpotRoad parking)
    {
        GameObject car = CreateNewCar();
        Car        c   = (Car)car.GetComponent <Car>();

        PlaceCarOnRoad(c, parking);
        ParkingSpace p = parking.ParkCar(c);

        c.plan.parkedAt = p;
        c.Park(p);
        //rotate car
        Vector2 lookto = parking.neighbourRoads[0].AsVector() - parking.AsVector();

        FaceCarInDirection(c, lookto);
        car.transform.position = new Vector3(p.transform.position.x, p.transform.position.y, 0);
        return(c);
    }
예제 #7
0
    //last few waypoints may have specific behavior
    private void BehaveLastWaypoints(LinkedList <Waypoint> points)
    {
        int count = points.Count;

        switch (ActiveTrip.type)
        {
        case Trip.TripType.Park: {
            ParkingSpotRoad p       = (ParkingSpotRoad)points.Last.Value.onRoad;
            ParkingSpace    parking = p.GetEmptySpace();
            if (parking == null)
            {
                Debug.LogError("Unhandled exception: parking full.");
                return;
            }
            Waypoint last = points.Last.Value;
            last.Set(parking.transform.position.ToVector2());
            break;
        }

        case Trip.TripType.Charge: {
            PowerStationRoad p = (PowerStationRoad)points.Last.Value.onRoad;
            if (count < 2)
            {
                //Set static collision avoidance
                controlledCar.SetCollisionAvoidance(Car.CollisionAvoidance.staticc);
                if (p.GetEmptyPoweredStation() == null)
                {
                    controlledCar.GoToState(Car.CarState.waiting);
                    StartCoroutine(PollForStation(p));
                }
            }
            if (count <= 1)
            {
                Debug.Log("Disabling collision avoidance");
                //set dynamic collision avoidance
                controlledCar.SetCollisionAvoidance(Car.CollisionAvoidance.disabled);
            }
            break;
        }
        }
    }
예제 #8
0
    //Reads and creates the destinations from the json node given
    private List <Trip> ReadDestinations(JSONNode car)
    {
        JSONArray       destinations = car["trips"].AsArray;
        List <Trip>     trips        = new List <Trip>();
        ParkingSpotRoad lastDest     = FindParkingRoad(car["x"].AsInt, car["y"].AsInt);

        for (int i = 0; i < destinations.Count; ++i)
        {
            JSONNode        thisdest = destinations[i];
            ParkingSpotRoad p        = FindParkingRoad(thisdest["x"].AsInt, thisdest["y"].AsInt);

            Trip trip = new Trip();
            trip.start     = lastDest;
            trip.end       = p;
            trip.type      = Trip.TripType.Park;
            trip.departure = new TimeClass(DateTime.ParseExact(thisdest["departure"], "HHmm", CultureInfo.InvariantCulture));
            trips.Add(trip);

            lastDest = p;
        }
        return(trips);
    }
예제 #9
0
 void Awake()
 {
     road = gameObject.GetComponentInParent <Road>() as ParkingSpotRoad;
     //Debug.Log(road);
 }