class TestItemAdder(): """ Tests for ItemAdder """ def __init__(self): """ Default constructor """ self.rng = None self.level = None self.item_generator = None self.configuration = None self.item_adder = None self.floor_rock = None self.wall_empty = None def setup(self): """ Setup the test case """ self.floor_rock = 1 self.wall_empty = 2 self.rng = Random() self.level = Level((60, 40), self.floor_rock, self.wall_empty) self.level.set_location_type((10, 10), 'room') for x_loc in range(11, 30): self.level.set_location_type((x_loc, 10), 'corridor') item_config = ItemConfigurations(Random()) item_config.add_item( ItemConfiguration(name = 'dagger', cost = 2, weight = 1, icons = [500], types = ['weapon', 'light weapon', 'melee', 'simple weapon'], rarity = 'common', weapon_configration = WeaponConfiguration( damage = 2, critical_range = 11, critical_damage = 2, damage_types = ['piercing', 'slashing'], weapon_class = 'simple'))) item_config.add_item( ItemConfiguration(name = 'red potion', cost = 150, weight = 1, icons = [100], types = ['potion'], rarity = 'rare', effect_handles = [EffectHandle( trigger = 'on drink', effect = 'cure medium wounds', parameters = None, charges = 1)])) self.item_generator = ItemGenerator(item_config) self.configuration = ItemAdderConfiguration(['crypt']) self.configuration.add_item(min_amount = 3, max_amount = 4, name = 'dagger') self.configuration.add_item(min_amount = 1, max_amount = 1, type = 'potion', location = 'room') self.item_adder = ItemAdder(self.item_generator, self.configuration, self.rng) self.item_adder.add_items(self.level) def test_adding_items(self): """ Test basic case of adding items on the level """ assert_that(self.level.items, has_length(greater_than(3))) assert_that(self.level.items, has_length(less_than(6))) assert_that(self.level, does_have_item('dagger', greater_than_or_equal_to(3))) assert_that(self.level, does_have_item('red potion', 1)) def test_adding_to_location(self): """ Test that ItemAdder will use location types passed to it """ potion = [x for x in self.level.items if x.name == 'red potion'][0] location = potion.location assert_that(located_in_room(potion))
def setup(self): """ Setup the test case """ self.floor_rock = 1 self.wall_empty = 2 self.rng = Random() self.level = Level((60, 40), self.floor_rock, self.wall_empty) self.level.set_location_type((10, 10), 'room') for x_loc in range(11, 30): self.level.set_location_type((x_loc, 10), 'corridor') item_config = ItemConfigurations(Random()) item_config.add_item( ItemConfiguration(name = 'dagger', cost = 2, weight = 1, icons = [500], types = ['weapon', 'light weapon', 'melee', 'simple weapon'], rarity = 'common', weapon_configration = WeaponConfiguration( damage = 2, critical_range = 11, critical_damage = 2, damage_types = ['piercing', 'slashing'], weapon_class = 'simple'))) item_config.add_item( ItemConfiguration(name = 'red potion', cost = 150, weight = 1, icons = [100], types = ['potion'], rarity = 'rare', effect_handles = [EffectHandle( trigger = 'on drink', effect = 'cure medium wounds', parameters = None, charges = 1)])) self.item_generator = ItemGenerator(item_config) self.configuration = ItemAdderConfiguration(['crypt']) self.configuration.add_item(min_amount = 3, max_amount = 4, name = 'dagger') self.configuration.add_item(min_amount = 1, max_amount = 1, type = 'potion', location = 'room') self.item_adder = ItemAdder(self.item_generator, self.configuration, self.rng) self.item_adder.add_items(self.level)
def init_level(rng, item_generator, creature_generator, level_size): """ Initialise upper crypt levels :returns: level configuration :rtype: LevelConfiguration """ room_generators = [SquareRoomGenerator(FLOOR_NATURAL, WALL_EMPTY, ['upper crypt']), SquareRoomGenerator(FLOOR_CONSTRUCTED, WALL_EMPTY, ['upper crypt'])] level_partitioners = [GridPartitioner(['upper crypt'], 4, 3, rng)] replacer_config = ReplacingDecoratorConfig(['upper crypt'], {FLOOR_NATURAL: FLOOR_ROCK, FLOOR_CONSTRUCTED: FLOOR_BRICK}, {WALL_NATURAL: WALL_GROUND, WALL_CONSTRUCTED: WALL_ROCK}) replacer = ReplacingDecorator(replacer_config) wallbuilder_config = WallBuilderDecoratorConfig(['upper crypt'], {WALL_NATURAL: WALL_CONSTRUCTED}, WALL_EMPTY) wallbuilder = WallBuilderDecorator(wallbuilder_config) aggregate_decorator_config = AggregateDecoratorConfig(['upper crypt'], [wallbuilder, replacer]) decorators = [AggregateDecorator(aggregate_decorator_config)] item_adder_config = ItemAdderConfiguration(['upper crypt']) item_adder_config.add_item(min_amount = 2, max_amount = 4, type = 'weapon', location = 'room') item_adder_config.add_item(min_amount = 2, max_amount = 4, type = 'potion', location = 'room') item_adder_config.add_item(min_amount = 0, max_amount = 5, type = 'food', location = 'room') item_adders = [ItemAdder(item_generator, item_adder_config, rng)] creature_adder_config = CreatureAdderConfiguration(['upper crypt']) #creature_adder_config.add_creature(min_amount = 6, # max_amount = 12, # name = 'bat') creature_adder_config.add_creature(min_amount = 4, max_amount = 8, name = 'spider') #creature_adder_config.add_creature(min_amount = 4, # max_amount = 8, # name = 'skeleton', # location = 'room') creature_adders = [CreatureAdder(creature_generator, creature_adder_config, rng)] portal_adder_configurations = [PortalAdderConfiguration( icons = (PORTAL_STAIRS_DOWN, PORTAL_STAIRS_UP), level_type = 'upper catacombs', location_type = 'room', chance = 25, new_level = 'upper crypt', unique = True)] config = (LevelConfiguration() .with_rooms(room_generators) .with_partitioners(level_partitioners) .with_decorators(decorators) .with_items(item_adders) .with_creatures(creature_adders) .with_portals(portal_adder_configurations) .with_level_size(level_size) .build()) return config