コード例 #1
0
ファイル: pickup_list.py プロジェクト: dyceron/randovania
def pickups_to_solve_list(pickup_pool: List[PickupEntry],
                          requirement_list: RequirementList, state: State):
    pickups = []

    resources = copy.copy(state.resources)
    pickups_for_this = list(pickup_pool)

    for individual in sorted(requirement_list.values()):
        if individual.satisfied(resources, state.energy):
            continue

        # FIXME: this picks Dark Beam to provide Dark Ammo

        # Create another copy of the list so we can remove elements while iterating
        for pickup in list(pickups_for_this):
            new_resources = resource_info.convert_resource_gain_to_current_resources(
                pickup.resource_gain(resources))
            pickup_progression = resource_info.convert_resource_gain_to_current_resources(
                pickup.progression)
            if new_resources.get(individual.resource,
                                 0) + pickup_progression.get(
                                     individual.resource, 0) > 0:
                pickups.append(pickup)
                pickups_for_this.remove(pickup)
                resource_info.add_resources_into_another(
                    resources, new_resources)

            if individual.satisfied(resources, state.energy):
                break

        if not individual.satisfied(resources, state.energy):
            return None

    return pickups
コード例 #2
0
 def _replace(alternative: RequirementList) -> RequirementList:
     if alternative.get(resource) is not None:
         return RequirementList.without_misc_resources(
             database=database,
             items=[
                 (individual if individual.resource != database.difficulty_resource
                  else IndividualRequirement(database.difficulty_resource, new_difficulty, False))
                 for individual in alternative.values()
             ]
         )
     else:
         return alternative
コード例 #3
0
def _has_trick(alternative: RequirementList) -> bool:
    return any(individual.resource.resource_type == ResourceType.TRICK
               for individual in alternative.values())
コード例 #4
0
ファイル: data_writer.py プロジェクト: juliabenton/randovania
def write_requirement_list(requirement_list: RequirementList) -> list:
    return [
        write_individual_requirement(individual)
        for individual in sorted(requirement_list.values())
    ]