Esempio n. 1
0
 def bit_pack_unpack(cls, decoder: BitPackDecoder,
                     metadata) -> "LocationList":
     game = metadata["reference"].game
     return cls.with_elements(
         bitpacking.decode_sorted_array_elements(decoder,
                                                 cls.areas_list(game)),
         game)
Esempio n. 2
0
def test_sorted_array_elements_round_trip(elements, array):
    generator = bitpacking.pack_sorted_array_elements(elements, array)
    b = bitpacking._pack_encode_results(list(generator))
    decoder = bitpacking.BitPackDecoder(b)

    decoded_elements = bitpacking.decode_sorted_array_elements(decoder, array)

    assert elements == decoded_elements
Esempio n. 3
0
    def bit_pack_unpack(cls, decoder: BitPackDecoder,
                        metadata) -> "DockTypeState":
        reference: DockTypeState = metadata["reference"]
        ref_change_from = sorted(
            cls._possible_change_from(reference.game,
                                      reference.dock_type_name))
        ref_change_to = sorted(
            cls._possible_change_to(reference.game, reference.dock_type_name))

        return cls(
            game=reference.game,
            dock_type_name=reference.dock_type_name,
            can_change_from=set(
                bitpacking.decode_sorted_array_elements(
                    decoder, ref_change_from)),
            can_change_to=set(
                bitpacking.decode_sorted_array_elements(
                    decoder, ref_change_to)),
        )
Esempio n. 4
0
    def bit_pack_unpack(cls, decoder: BitPackDecoder, metadata):
        randomization_mode = RandomizationMode.bit_pack_unpack(decoder, metadata)

        if bitpacking.decode_bool(decoder):
            indices = bitpacking.decode_sorted_array_elements(decoder, _ALL_INDICES)
        else:
            indices = []

        return AvailableLocationsConfiguration(
            randomization_mode=randomization_mode,
            excluded_indices=frozenset(PickupIndex(item) for item in indices),
        )
Esempio n. 5
0
    def bit_pack_unpack(cls, decoder: BitPackDecoder, metadata):
        game = metadata["reference"].game
        db = default_database.game_description_for(game)

        randomization_mode = RandomizationMode.bit_pack_unpack(decoder, metadata)

        if bitpacking.decode_bool(decoder):
            indices = bitpacking.decode_sorted_array_elements(decoder, _all_indices(db))
        else:
            indices = []

        return AvailableLocationsConfiguration(
            randomization_mode=randomization_mode,
            excluded_indices=frozenset(PickupIndex(item) for item in indices),
            game=game,
        )
Esempio n. 6
0
    def bit_pack_unpack(cls, decoder: BitPackDecoder,
                        metadata) -> "DockRandoConfiguration":
        reference: DockRandoConfiguration = metadata["reference"]

        mode = DockRandoMode.bit_pack_unpack(decoder, None)

        modified_types = bitpacking.decode_sorted_array_elements(
            decoder, sorted(reference.weakness_database.dock_types))
        types_state = copy.copy(reference.types_state)
        for dock_type in modified_types:
            types_state[dock_type] = DockTypeState.bit_pack_unpack(
                decoder, {"reference": reference.types_state[dock_type]})

        return cls(
            game=reference.game,
            mode=mode,
            types_state=types_state,
        )
    def bit_pack_unpack(cls, decoder: BitPackDecoder,
                        metadata) -> "MajorItemsConfiguration":
        reference: MajorItemsConfiguration = metadata["reference"]

        name_to_item: Dict[str, MajorItem] = {
            item.name: item
            for item in reference.items_state.keys()
        }
        modified_items = bitpacking.decode_sorted_array_elements(
            decoder, sorted(name_to_item.keys()))

        items_state = copy.copy(reference.items_state)
        for item_name in modified_items:
            item = name_to_item[item_name]
            items_state[item] = MajorItemState.bit_pack_unpack(
                decoder, item, reference=reference.items_state[item])

        # default_items
        default_items = {}
        for category in reference.default_items.keys():
            all_major = [
                major for major in reference.items_state.keys()
                if major.item_category == category
            ]
            default_items[category] = decoder.decode_element(all_major)

        # random starting items
        minimum = bitpacking.decode_big_int(decoder)
        maximum = bitpacking.decode_big_int(decoder)

        return cls(
            game=reference.game,
            items_state=items_state,
            default_items=default_items,
            minimum_random_starting_items=minimum,
            maximum_random_starting_items=maximum,
        )
Esempio n. 8
0
 def bit_pack_unpack(cls, decoder: BitPackDecoder, metadata) -> "StartingLocation":
     return cls.with_elements(bitpacking.decode_sorted_array_elements(decoder, _areas_list()))