def action(self, bot: Bot): if self.done: return logging.info("%s returning to goal", bot.name) bot.return_to_goal() bot.kills = 0 self.done = True logging.info("%s returned to goal", bot.name)
def start_bot(self, idx): def rx_loop(): while not self.halt: message = bot.rx() self.messages.put(message) def turret_loop(): while not self.halt: if bot.turret_strategy: bot.turret_strategy.action(bot) time.sleep(1 / 16) def movement_loop(): while not self.halt: if bot.movement_strategy: bot.movement_strategy.action(bot) time.sleep(1 / 16) gs = ServerComms(self.host, self.port) bot = Bot(gs, f'{self.team}:{idx}', self.tracker) # TODO swap strategies as needed self.bots.append(bot) rx_thread = threading.Thread(target=rx_loop, daemon=True) rx_thread.start() turret_thread = threading.Thread(target=turret_loop, daemon=True) turret_thread.start() movement_loop()
def action(self, bot: Bot): # Assume the controller gives us a target (box) that we need to keep an eye on # and a do not take boxes that are deemed more important to use rather than waste target = bot.target # this is an ammo box or health box if not target: return target_coords = bot.tracker.positions[target].pos # Go to standoff distance moved = False while bot.distance_to_object(target_coords) >= self.standoff: target_distance = bot.distance_to_object(target_coords) target_angle = bot.angle_to_object(target_coords) bot.game_server.sendMessage(ServerMessageTypes.TURNTOHEADING, {"Amount": target_angle}) bot.game_server.sendMessage(ServerMessageTypes.MOVEFORWARDDISTANCE, {"Amount": target_distance}) moved = True time.sleep(0.1) if moved: bot.game_server.sendMessage(ServerMessageTypes.STOPALL) target_coords = bot.tracker.positions[target].pos target_angle = (bot.angle_to_object(target_coords) + 80) % 360 bot.game_server.sendMessage(ServerMessageTypes.TURNTOHEADING, {"Amount": target_angle}) bot.game_server.sendMessage(ServerMessageTypes.MOVEFORWARDDISTANCE, {"Amount": 10})
def get_label(obj): return Bot.find(obj).name
def query_factory(): return [r.id for r in Bot.findall()]
def get_botname(botid: str) -> str: from common.bot import Bot return Bot.find(botid).name if Bot.find( botid) is not None else '[已删除]' + botid
def on_form_prefill(self, form, id): form.botid.data = Bot.find(form.botid.data).name form.target.data = get_target_display(form.target.data)
def on_model_change(self, form, model, is_created): if is_created: model.target = form.target.data.split('|')[1] else: model.botid = Bot.find_by_name(model.botid).id model.target = recover_target_value(model.target)
def bot_get_label(obj): from common.bot import Bot return Bot.find(obj).name