Exemple #1
0
    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)
Exemple #2
0
    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()
Exemple #3
0
    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})
Exemple #4
0
 def get_label(obj):
     return Bot.find(obj).name
Exemple #5
0
 def query_factory():
     return [r.id for r in Bot.findall()]
Exemple #6
0
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
Exemple #7
0
 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)
Exemple #8
0
 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)
Exemple #9
0
 def bot_get_label(obj):
     from common.bot import Bot
     return Bot.find(obj).name