def test_items_for_ammo_two_item_diverging_values(): # Setup item_a = 1 item_b = 2 total_pickup = 10 maximum = 200 included_ammo_for_item = {item_a: 0, item_b: 100} previous_pickup_for_item = {} ammo = Ammo("My Ammo", maximum=maximum, items=(item_a, item_b), broad_category=ItemCategory.BEAM_RELATED) state = AmmoState(0, total_pickup) maximum_ammo = {item_a: maximum, item_b: maximum} # Run ammo_per_pickup = randovania.generator.item_pool.ammo.items_for_ammo(ammo, state, included_ammo_for_item, previous_pickup_for_item, maximum_ammo) # Assert assert previous_pickup_for_item == { item_a: ammo, item_b: ammo, } assert ammo_per_pickup == [[20, 10]] * total_pickup
def test_items_for_ammo_two_item(per_pickup: int, total_pickup: int, included: int): # Setup item_a = 1 item_b = 2 included_ammo_for_item = {item_a: included, item_b: included} previous_pickup_for_item = {} maximum = per_pickup * total_pickup + included ammo = Ammo("My Ammo", model_name="Model", maximum=maximum, items=(item_a, item_b), broad_category=ItemCategory.BEAM_RELATED) state = AmmoState(0, total_pickup) maximum_ammo = {item_a: maximum, item_b: maximum} # Run ammo_per_pickup = randovania.generator.item_pool.ammo.items_for_ammo( ammo, state, included_ammo_for_item, previous_pickup_for_item, maximum_ammo) # Assert assert previous_pickup_for_item == { item_a: ammo, item_b: ammo, } assert ammo_per_pickup == [[per_pickup, per_pickup]] * total_pickup
def test_items_for_ammo_one_item_non_divisible(): # Setup item_a = 1 maximum = 11 total_pickup = 5 included_ammo_for_item = {item_a: 0} previous_pickup_for_item = {} ammo = Ammo("My Ammo", model_name="Model", maximum=maximum, items=(item_a, ), broad_category=ItemCategory.BEAM_RELATED) state = AmmoState(0, total_pickup) maximum_ammo = {item_a: maximum} # Run ammo_per_pickup = randovania.generator.item_pool.ammo.items_for_ammo( ammo, state, included_ammo_for_item, previous_pickup_for_item, maximum_ammo) # Assert assert previous_pickup_for_item == {item_a: ammo} assert ammo_per_pickup == [[3]] + [[2]] * (total_pickup - 1)
def change_split(self, has_split: bool): with self._editor as editor: ammo_configuration = editor.ammo_configuration current_total = sum( ammo_configuration.items_state[ammo].pickup_count for ammo in (self.unified_ammo, *self.split_ammo) ) if has_split: split_state = AmmoState(pickup_count=current_total // len(self.split_ammo)) unified_state = AmmoState() else: split_state = AmmoState() unified_state = AmmoState(pickup_count=current_total) new_states = {self.unified_ammo: unified_state} for ammo in self.split_ammo: new_states[ammo] = split_state editor.ammo_configuration = ammo_configuration.replace_states(new_states)
def _change_split_ammo(self, has_split: bool): with self._editor as options: ammo_configuration = options.ammo_configuration current_total = sum( ammo_configuration.items_state[ammo].pickup_count for ammo in (self._dark_ammo_item, self._light_ammo_item, self._beam_ammo_item)) if has_split: dark_ammo_state = AmmoState(pickup_count=current_total // 2) light_ammo_state = AmmoState(pickup_count=current_total // 2) beam_ammo_state = AmmoState() else: dark_ammo_state = AmmoState() light_ammo_state = AmmoState() beam_ammo_state = AmmoState(pickup_count=current_total) ammo_configuration = ammo_configuration.replace_states({ self._dark_ammo_item: dark_ammo_state, self._light_ammo_item: light_ammo_state, self._beam_ammo_item: beam_ammo_state, }) options.ammo_configuration = ammo_configuration
def test_items_for_ammo_one_item(per_pickup: int, total_pickup: int, included: int): # Setup item_a = 1 included_ammo_for_item = {item_a: included} previous_pickup_for_item = {} maximum = per_pickup * total_pickup + included ammo = Ammo("My Ammo", maximum=maximum, items=(item_a, )) state = AmmoState(0, total_pickup) maximum_ammo = {item_a: maximum} # Run ammo_per_pickup = randovania.generator.item_pool.ammo.items_for_ammo( ammo, state, included_ammo_for_item, previous_pickup_for_item, maximum_ammo) # Assert assert previous_pickup_for_item == {item_a: ammo} assert ammo_per_pickup == [[per_pickup]] * total_pickup