示例#1
0
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
示例#2
0
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
示例#3
0
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)
示例#4
0
    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)
示例#5
0
    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
示例#6
0
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