Ensure we place all "nice" items first before placing the trash, making the filling better in cases where we exceed the itempool limit.
This commit is contained in:
		
							parent
							
								
									a7bc3cc1a3
								
							
						
					
					
						commit
						94030f469e
					
				
							
								
								
									
										24
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										24
									
								
								Main.py
								
								
								
								
							| 
						 | 
				
			
			@ -111,15 +111,19 @@ def distribute_items_cutoff(world, cutoffrate=0.33):
 | 
			
		|||
    placed_advancement_items = 0
 | 
			
		||||
 | 
			
		||||
    progress_done = False
 | 
			
		||||
    advancement_placed = False
 | 
			
		||||
 | 
			
		||||
    while itempool and fill_locations:
 | 
			
		||||
        candidate_item_to_place = None
 | 
			
		||||
        item_to_place = None
 | 
			
		||||
        for item in itempool:
 | 
			
		||||
            if progress_done:
 | 
			
		||||
            if advancement_placed:
 | 
			
		||||
                item_to_place = item
 | 
			
		||||
                break
 | 
			
		||||
            if item.advancement:
 | 
			
		||||
                if progress_done:
 | 
			
		||||
                    item_to_place = item
 | 
			
		||||
                    break
 | 
			
		||||
                candidate_item_to_place = item
 | 
			
		||||
                if world.unlocks_new_location(item):
 | 
			
		||||
                    item_to_place = item
 | 
			
		||||
| 
						 | 
				
			
			@ -128,9 +132,13 @@ def distribute_items_cutoff(world, cutoffrate=0.33):
 | 
			
		|||
 | 
			
		||||
        if item_to_place is None:
 | 
			
		||||
            # check if we can reach all locations and that is why we find no new locations to place
 | 
			
		||||
            if len(world.get_reachable_locations()) == len(world.get_locations()):
 | 
			
		||||
            if not progress_done and len(world.get_reachable_locations()) == len(world.get_locations()):
 | 
			
		||||
                progress_done = True
 | 
			
		||||
                continue
 | 
			
		||||
            # check if we have now placed all advancement items
 | 
			
		||||
            if progress_done:
 | 
			
		||||
                advancement_placed = True
 | 
			
		||||
                continue
 | 
			
		||||
            # we might be in a situation where all new locations require multiple items to reach. If that is the case, just place any advancement item we've found and continue trying
 | 
			
		||||
            if candidate_item_to_place is not None:
 | 
			
		||||
                item_to_place = candidate_item_to_place
 | 
			
		||||
| 
						 | 
				
			
			@ -173,15 +181,19 @@ def distribute_items_staleness(world):
 | 
			
		|||
    itempool = world.itempool
 | 
			
		||||
 | 
			
		||||
    progress_done = False
 | 
			
		||||
    advancement_placed = False
 | 
			
		||||
 | 
			
		||||
    while itempool and fill_locations:
 | 
			
		||||
        candidate_item_to_place = None
 | 
			
		||||
        item_to_place = None
 | 
			
		||||
        for item in itempool:
 | 
			
		||||
            if progress_done:
 | 
			
		||||
            if advancement_placed:
 | 
			
		||||
                item_to_place = item
 | 
			
		||||
                break
 | 
			
		||||
            if item.advancement:
 | 
			
		||||
                if progress_done:
 | 
			
		||||
                    item_to_place = item
 | 
			
		||||
                    break
 | 
			
		||||
                candidate_item_to_place = item
 | 
			
		||||
                if world.unlocks_new_location(item):
 | 
			
		||||
                    item_to_place = item
 | 
			
		||||
| 
						 | 
				
			
			@ -189,9 +201,13 @@ def distribute_items_staleness(world):
 | 
			
		|||
 | 
			
		||||
        if item_to_place is None:
 | 
			
		||||
            # check if we can reach all locations and that is why we find no new locations to place
 | 
			
		||||
            if len(world.get_reachable_locations()) == len(world.get_locations()):
 | 
			
		||||
            if not progress_done and len(world.get_reachable_locations()) == len(world.get_locations()):
 | 
			
		||||
                progress_done = True
 | 
			
		||||
                continue
 | 
			
		||||
            # check if we have now placed all advancement items
 | 
			
		||||
            if progress_done:
 | 
			
		||||
                advancement_placed = True
 | 
			
		||||
                continue
 | 
			
		||||
            # we might be in a situation where all new locations require multiple items to reach. If that is the case, just place any advancement item we've found and continue trying
 | 
			
		||||
            if candidate_item_to_place is not None:
 | 
			
		||||
                item_to_place = candidate_item_to_place
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue