def find_best_waypoint_route(routes: List[List[Position]], position: Position): best = (position.calculate_distance_from(routes[0][0]), 0) for i, route in enumerate(routes): distance = position.calculate_distance_from(route[0]) if distance < best[0]: best = (distance, i) return best[1]
def record(self, record_data: Dict[str, str]): self.waypoints = {'format': record_data['wp_format'], 'waypoints': []} signal.signal(signal.SIGINT, lambda *args: self.screen.stop_capturing()) signal.signal(signal.SIGTERM, lambda *args: self.screen.stop_capturing()) try: for screen in self.screen.capture(): data = self.extractor.extract_data_from_screen(screen) self._data_sanitizer.sanitize_data(data) current_position = Position(data.player_position[0], data.player_position[1]) if not self.waypoints['waypoints']: self.waypoints['waypoints'].append(data.player_position) else: last_recorded_coordinates = self.waypoints['waypoints'][ len(self.waypoints['waypoints']) - 1] last_recorded_position = Position( last_recorded_coordinates[0], last_recorded_coordinates[1]) if current_position.calculate_distance_from( last_recorded_position ) >= GlobalConfig.config.core.difference_between_two_waypoints: Logger.info('Recording position: ' + str(data.player_position)) self.waypoints['waypoints'].append( data.player_position) finally: Logger.info('Saving file to: {}'.format( record_data.get('waypoint', 'NO PATH'))) file = Path(record_data['waypoint']) if file.is_file(): self._save_if_file_exist(record_data) else: self._save_if_file_not_exist(record_data)