def test_stair_linking(self): """ Test that stairs can be linked """ level1 = Level([20, 20], self.floor_rock, self.wall_empty) level2 = Level([20, 20], self.floor_rock, self.wall_empty) stairs1 = Portal((None, None), None) #TODO: beak link stairs1.icon = 200 level1.add_portal(stairs1, (10, 10)) stairs2 = Portal((None, None), None) level2.add_portal(stairs2, (5, 5), stairs1) assert(stairs1.level == level1) assert(stairs1.location == (10, 10)) assert(stairs1.other_end == stairs2) assert(stairs2.level == level2) assert(stairs2.location == (5, 5)) assert(stairs2.other_end == stairs1) assert(stairs1 in level1.portals) assert(stairs2 in level2.portals)
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