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)))
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