def set_route(self, sp, ep):

        from TimeLord import TimeLord
        t = TimeLord()

        """
        If sp has room for a new car, set given nodes as start and end points
        and teleport to start.
        """
        assert sp is not None and ep is not None, "route start and/or end point not set"

        if sp.has_room():
            self._start = sp
            self._end = ep

           # print("  Agent %s: teleporting to start point %s (from %s)" % (self._name, sp, self._position))
            if self._position:
                self._position.remove_car(self)
            self._position = self._start
            self._start.add_car(self, False)
            self._determine_path()
            self._travel_start_time = t.get_timestamp()
            self._waiting_times[self._travel_start_time] = []

            return True

        return False
    def _move_car_to_street(self):
        """
        Moves the next car from the main stack to the street stack it wants to go to next.
        """
        from Grid import MovementEvent, GRID_EVENT as GE
        t = TimeLord()
        time= t.get_timestamp()
        if len(self._car_stack) > 0:
            car = self._car_stack[0]
            next_dir, next_stop = car.get_next_dir(), car.get_next_stop()

            #print("car %s" % car)
            #print("next stop: %s (%i), route: %s" % (next_stop, next_dir, car._path))
            
            if next_stop is None:
                #print("Route done.")
                return False

            street_stack = self._streets[next_dir]

            # print("room for car on street? %s" % (len(street_stack) < self._max_cars_on_street))
            if len(street_stack) < self._max_cars_on_street:
                street_stack.append(car)
                self._car_stack.pop(0)
                #print('moving')
                car.handle_movement_event(MovementEvent(GE.STREET_ARRIVED, time, self))
                return True
            else:
                car.handle_movement_event(MovementEvent(GE.STREET_REJECTED, time, self))
                self._add_center_jam(time)
                return False
        else:
            return True
Example #3
0
    def _move_car_to_street(self):
        """
        Moves the next car from the main stack to the street stack it wants to go to next.
        """
        from Grid import MovementEvent, GRID_EVENT as GE
        t = TimeLord()
        time = t.get_timestamp()
        if len(self._car_stack) > 0:
            car = self._car_stack[0]
            next_dir, next_stop = car.get_next_dir(), car.get_next_stop()

            #print("car %s" % car)
            #print("next stop: %s (%i), route: %s" % (next_stop, next_dir, car._path))

            if next_stop is None:
                #print("Route done.")
                return False

            street_stack = self._streets[next_dir]

            # print("room for car on street? %s" % (len(street_stack) < self._max_cars_on_street))
            if len(street_stack) < self._max_cars_on_street:
                street_stack.append(car)
                self._car_stack.pop(0)
                #print('moving')
                car.handle_movement_event(
                    MovementEvent(GE.STREET_ARRIVED, time, self))
                return True
            else:
                car.handle_movement_event(
                    MovementEvent(GE.STREET_REJECTED, time, self))
                self._add_center_jam(time)
                return False
        else:
            return True
    def set_route(self, sp, ep):

        from TimeLord import TimeLord
        t = TimeLord()
        """
        If sp has room for a new car, set given nodes as start and end points
        and teleport to start.
        """
        assert sp is not None and ep is not None, "route start and/or end point not set"

        if sp.has_room():
            self._start = sp
            self._end = ep

            # print("  Agent %s: teleporting to start point %s (from %s)" % (self._name, sp, self._position))
            if self._position:
                self._position.remove_car(self)
            self._position = self._start
            self._start.add_car(self, False)
            self._determine_path()
            self._travel_start_time = t.get_timestamp()
            self._waiting_times[self._travel_start_time] = []

            return True

        return False