def resetPath(self, dangerous_train, line_idx, position, speed): nearest_backstep_point, current_edge = self.getTrainPosition( line_idx, position, speed * (-1)) self.train_point_idx = self.getTrainPosition(line_idx, position, speed) endpoint = self.selected_path[-1] nxgraph = self.graph.nxgraph.copy() nxgraph.remove_edge(current_edge.points[0], current_edge.points[1]) self.selected_path = nx.dijkstra_path(nxgraph, nearest_backstep_point, endpoint, "length") self.selected_path = [nearest_backstep_point] + self.selected_path additional_path_len = 0 if current_edge.points[0] == nearest_backstep_point: additional_path_len = position else: additional_path_len = current_edge.weight - position self.selected_path_len = nx.dijkstra_path_length( nxgraph, nearest_backstep_point, endpoint, "length") + additional_path_len speed = -1 * speed server_interface.ServerInterface().moveTrain(line_idx, speed, self.train_info['idx']) self.old_speed = speed return
def rideByPath(self): position = self.train_info['position'] line_idx = self.train_info['line_idx'] speed = self.train_info['speed'] nearest_point, current_position_by_edges = self.getTrainPosition( line_idx, position, speed) if (nearest_point == current_position_by_edges.points[0] and position == 0) or (nearest_point == current_position_by_edges.points[1] and position == current_position_by_edges.weight): if len(self.selected_path ) != 0 and self.selected_path[0] == nearest_point: self.selected_path.remove(nearest_point) if len(self.selected_path) == 0: town = self.database.getPlayerInfo()['town'] if town['point_idx'] != nearest_point: if self.train_info['goods'] == self.train_info[ 'goods_capacity']: self.callToReturn(self.priority) else: self.goToNearestPostOrWait() else: self.is_complited = True return nearest_edge, speed = self.getNearestEdge(nearest_point) server_interface.ServerInterface().moveTrain( nearest_edge.idx, speed, self.train_info['idx']) self.old_speed = speed return
def callToReturn(self, priority=1): self.priority = priority position = self.train_info['position'] line_idx = self.train_info['line_idx'] speed = self.train_info['speed'] nearest_point, current_position_by_edges = self.getTrainPosition( line_idx, position, speed) town = self.database.getPlayerInfo()['town'] self.getShortestPathByEndpoints([town]) next_point = self.selected_path[0] if next_point == nearest_point: self.selected_path.remove(next_point) next_point = self.selected_path[0] nearest_edge, speed = self.getNearestEdge(nearest_point) server_interface.ServerInterface().moveTrain(nearest_edge.idx, speed, self.train_info['idx']) self.old_speed = speed
def __new__(cls): if not hasattr(cls, 'instance'): cls.instance = super(ServerData, cls).__new__(cls) cls.instance.server_interface = server_interface.ServerInterface() cls.instance.fullUpdate() return cls.instance