Ejemplo n.º 1
0
class TestLevel:
    """
    Tests for Level
    """
    def __init__(self):
        """
        Default constructor
        """
        self.level = None

    def setup(self):
        """
        Setup test case
        """
        self.level = Level(size = (20, 10))

    def test_get_size(self):
        """
        Test that Level can report size
        """
        size = self.level.get_size()

        assert size == (21, 11)

    def test_get_rooms(self):
        """
        Test that level can report what areas of it are marked as being room
        """
        self.level.set_location_type((5, 5), 'room')
        self.level.set_location_type((5, 6), 'room')
        self.level.set_location_type((8, 8), 'room')
        self.level.set_location_type((9, 8), 'room')

        rooms = self.level.get_locations_by_type('room')

        assert_that(rooms, contains_inanyorder((5, 5), (5, 6),
                                               (8, 8), (9, 8)))

    def test_get_locations_by_type_does_not_report_all_locations(self):
        """
        Test that getting locations by type does not return all locations
        """
        self.level.set_location_type((5, 5), 'room')
        self.level.set_location_type((5, 6), 'room')
        self.level.set_location_type((8, 8), 'room')
        self.level.set_location_type((9, 8), 'room')

        self.level.set_location_type((6, 5), 'corridor')
        self.level.set_location_type((6, 6), 'corridor')
        self.level.set_location_type((6, 7), 'corridor')
        self.level.set_location_type((6, 8), 'corridor')

        rooms = self.level.get_locations_by_type('room')

        assert_that(rooms, contains_inanyorder((5, 5), (5, 6),
                                               (8, 8), (9, 8)))
Ejemplo n.º 2
0
    def generate_level(self, portal):
        """
        Generate level

        :param portal: portal to link to this level
        :type portal: Portal
        """
        new_level = Level(size = self.level_context.size,
                          floor_type = self.level_context.floor_type,
                          wall_type = self.level_context.wall_type,
                          empty_floor = self.level_context.empty_floor,
                          empty_wall = self.level_context.empty_wall)

        sections = self.partitioner.partition_level(new_level)

        for section in sections:
            generator = self.random_generator.choice(self.room_generators)
            generator.generate_room(section)

        self.decorator.decorate_level(new_level)

        for adder in self.portal_adders:
            adder.add_portal(new_level)

        # all this needs to be cleaned up
        if portal != None:
            rooms = new_level.get_locations_by_type('room')
            if len(rooms) > 0:
                new_portal = Portal(icons = (portal.other_end_icon, None),
                                    level_generator = None)
                location = self.random_generator.choice(rooms)
                new_level.add_portal(new_portal, location, portal)
            else:
                self.logger.warn('no location found, skipping')


        self.creature_adder.add_creatures(new_level)

        self.item_adder.add_items(new_level)

        self.logger.debug(new_level.dump_string())

        return new_level