Exemple #1
0
    def change_status_to_ground(self):
        """
        Самолет не занят
        :return:
        """

        self.flight_status = self.GROUND
        self.save()
        logger.log(u'%s change status to %s' % (self, self.GROUND))
Exemple #2
0
 def change_status_to_flight(self):
     """
     change status from TAKEOFF to FLIGHT
     :return:
     """
     if self.flight_status != self.TAKEOFF:
         raise FromTakeoffToFlightError()
     self.flight_status = self.FLIGHT
     self.save()
     logger.log(u'%s change status to %s' % (self, self.FLIGHT))
Exemple #3
0
    def change_status_to_takeoff(self):
        """
        change status from PREPARE to TAKEOFF
        :return:
        """
        if self.flight_status != self.PREPARE:
            raise FromPrepareToTakeoffError()

        self.current_port_id = None
        self.flight_status = self.TAKEOFF
        self.last_moving = game_now()
        self.save()
        logger.log(u'%s change status to %s' % (self, self.TAKEOFF))
Exemple #4
0
    def change_status_to_landing(self):
        """
        change status from FLIGHT to LANDING
        :return:
        """
        if self.flight_status not in [self.TAKEOFF, self.FLIGHT]:
            raise FromTakeoffToFlightError()

        # change status
        self.flight_status = self.LANDING
        self.save()

        # and save start landing time
        self.current_schedule_item.start_landing_time = game_now()
        self.current_schedule_item.save()
        logger.log(u'%s change status to %s' % (self, self.LANDING))
Exemple #5
0
    def is_flight_complete(self):
        """
        current flight complete ?
        :return: True/False
        """

        # сколько времени прошло со времени последнего обновления?
        time_delta = self.get_timedelta()[0]  # в часах

        # сколько мы пролетели бы за это время?
        km_for_time_delta = round(self.modification.speed * time_delta, 2)

        # а сколько осталось?
        km_for_finish = self - self.current_schedule_item.finish_port

        # если мы прошли бы больше, чем нужно - просто завершить полет
        if km_for_time_delta > km_for_finish:
            logger.log(u'%s complete.' % self)
            self.complete_flight()
            return True
        return False
Exemple #6
0
    def move(self, latitude=None, longitude=None, altitude=None):
        """
        move plane at some coordinates
        :return:
        """

        if (not latitude) and (not longitude) and (not altitude):
            return

        hours, minutes, seconds = self.get_realy_timedelta()
        history_data = {
            'plane_id': self.pk,
            'schedule_id': self.schedule_id,
            'schedule_item_id': self.current_schedule_item_id,
            'from_latitude': self.latitude,
            'from_longitude': self.longitude,
            'from_altitude': self.altitude,
            'to_latitude': latitude,
            'to_longitude': longitude,
            'to_altitude': altitude,
            'interval': seconds,
        }
        MovingHistory.objects.create(**history_data)

        if isinstance(latitude, int) or isinstance(latitude, float):
            self.latitude = round(latitude, 2)
        if isinstance(longitude, int) or isinstance(longitude, float):
            self.longitude = round(longitude, 2)
        if isinstance(altitude, int) or isinstance(altitude, float):
            self.altitude = round(altitude, 2)
        self.last_moving = game_now()
        self.last_moving_date = datetime.datetime.now()
        logger.log('%s move to (%s, %s, %s)' % (
            self,
            self.latitude,
            self.longitude,
            self.altitude
        ))
        self.save()
Exemple #7
0
    def change_status_to_prepare(self):
        """
        change status from GROUND to PREPARE
        :return:
        """
        if self.flight_status != self.GROUND:
            raise FromGroundToPrepareError()

        # мы однозначно должны понимать, что приготовились к полету откуда-то и куда-то конкретно
        schedule_item = self.get_next_schedule_item()
        if not isinstance(schedule_item, ScheduleItem):
            raise FromGroundToPrepareError(_(u'Для самолета не назначен маршрут'))

        start_port = schedule_item.start_port
        self.latitude = start_port.latitude
        self.longitude = start_port.longitude
        self.altitude = start_port.altitude
        self.current_port_id = start_port.pk
        self.current_schedule_item_id = schedule_item.id
        self.flight_status = self.PREPARE
        self.save()
        logger.log(u'%s change status to %s' % (self, self.PREPARE))