def test_position_is_valid_to_go(self):
     nature = MissionType.POSITION
     positions = [(1 * TILE_SIZE, 0 * TILE_SIZE),
                  (3 * TILE_SIZE, 2 * TILE_SIZE)]
     mission = Mission(True, nature, positions, 'Test mission', 0, 0)
     self.assertTrue(mission.pos_is_valid(positions[0]))
     self.assertTrue(mission.pos_is_valid(positions[1]))
     self.assertFalse(mission.pos_is_valid(random_position()))
    def test_update_state_position_objective(self):
        nature = rd.choice([MissionType.POSITION, MissionType.TOUCH_POSITION])
        position = [random_position()]
        players = [random_player_entity(), random_player_entity()]
        mission = Mission(True, nature, position, 'Test mission', 2)

        self.assertTrue(mission.update_state(players[0]))
        self.assertFalse(mission.ended)
        self.assertEqual(players[0], mission.succeeded_chars[0])

        self.assertTrue(mission.update_state(players[1]))
        self.assertTrue(mission.ended)
        self.assertEqual(players, mission.succeeded_chars)
    def test_position_is_valid_to_touch(self):
        nature = MissionType.TOUCH_POSITION
        positions = [(1 * TILE_SIZE, 0 * TILE_SIZE),
                     (3 * TILE_SIZE, 2 * TILE_SIZE)]
        mission = Mission(True, nature, positions, 'Test mission', 0, 0)
        self.assertFalse(mission.pos_is_valid(positions[0]))
        self.assertFalse(mission.pos_is_valid(positions[1]))

        first_position = positions[0]
        self.assertTrue(
            mission.pos_is_valid(
                (first_position[0] + TILE_SIZE, first_position[1])))
        self.assertTrue(
            mission.pos_is_valid(
                (first_position[0], first_position[1] + TILE_SIZE)))
        self.assertTrue(
            mission.pos_is_valid(
                (first_position[0] - TILE_SIZE, first_position[1])))
        self.assertTrue(
            mission.pos_is_valid(
                (first_position[0], first_position[1] - TILE_SIZE)))

        second_position = positions[1]
        self.assertTrue(
            mission.pos_is_valid(
                (second_position[0] + TILE_SIZE, second_position[1])))
    def test_update_state_objective_with_turn_limit(self):
        nature = MissionType.TURN_LIMIT
        turn_limit = rd.randint(1, 10)
        mission = Mission(True,
                          nature, [],
                          'Test mission',
                          0,
                          turn_limit=turn_limit)

        self.assertTrue(mission.update_state(turns=0))
        self.assertTrue(mission.ended)
        self.assertTrue(mission.update_state(turns=turn_limit))
        self.assertTrue(mission.ended)
        self.assertTrue(mission.update_state(turns=turn_limit + 1))
        self.assertFalse(mission.ended)
Esempio n. 5
0
def load_mission(mission_xml, is_main, nb_players, gap_x, gap_y):
    nature = MissionType[mission_xml.find('type').text]
    desc = mission_xml.find('description').text.strip()
    positions = []
    if nature is MissionType.POSITION or nature is MissionType.TOUCH_POSITION:
        for coords in mission_xml.findall('position'):
            x = int(coords.find('x').text) * TILE_SIZE + gap_x
            y = int(coords.find('y').text) * TILE_SIZE + gap_y
            positions.append((x, y))
    min_players = mission_xml.find('nb_players')
    if min_players is not None:
        min_players = int(min_players.text.strip())
    else:
        min_players = nb_players
    if is_main:
        gold_reward = 0
        items_reward = []
    else:
        # If mission is not main, a reward is associated
        gold_reward = mission_xml.find('reward/gold')
        if gold_reward is not None:
            gold_reward = int(gold_reward.text.strip())
        items_reward = mission_xml.findall('reward/item')
        if items_reward is not None:
            items_reward = [parse_item_file(item) for item in items_reward]
    turn_limit = mission_xml.find('turns')
    if turn_limit is not None:
        turn_limit = int(turn_limit.text.strip())
    return Mission(is_main, nature, positions, desc, min_players, turn_limit,
                   gold_reward, items_reward)
    def test_update_state_kill_everybody_objective(self):
        nature = MissionType.KILL_EVERYBODY
        mission = Mission(True, nature, [], 'Test mission', 0)
        foes = random_entities(Foe)
        entities = {'foes': foes}

        self.assertTrue(mission.update_state(entities=entities))
        self.assertFalse(mission.ended)

        foes.pop()

        self.assertTrue(mission.update_state(entities=entities))
        self.assertFalse(mission.ended)

        while len(foes) != 0:
            foes.pop()

        self.assertTrue(mission.update_state(entities=entities))
        self.assertTrue(mission.ended)
 def test_init_mision(self):
     is_main = True
     nature = MissionType.POSITION
     positions = [(1 * TILE_SIZE, 2 * TILE_SIZE),
                  (3 * TILE_SIZE, 4 * TILE_SIZE)]
     description = 'Test main mission'
     nb_players = 2
     turn_limit = 10
     gold_reward = 200
     items_reward = [random_item()]
     mission = Mission(is_main, nature, positions, description, nb_players,
                       turn_limit, gold_reward, items_reward)
     self.assertEqual(is_main, mission.main)
     self.assertEqual(nature, mission.type)
     self.assertEqual(positions, mission.positions)
     self.assertEqual(description, mission.desc)
     self.assertFalse(mission.ended)
     self.assertEqual(turn_limit, mission.turn_limit)
     self.assertEqual(gold_reward, mission.gold)
     self.assertEqual(items_reward, mission.items)
     self.assertEqual(nb_players, mission.min_chars)
     self.assertEqual(0, len(mission.succeeded_chars))