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))
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))
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))
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))
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
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()
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))