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)
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
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)), )
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), )
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, )
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, )
def bit_pack_unpack(cls, decoder: BitPackDecoder, metadata) -> "StartingLocation": return cls.with_elements(bitpacking.decode_sorted_array_elements(decoder, _areas_list()))