speed up local item fill, by sorting by world once instead of up to twice per player
This commit is contained in:
parent
113efa8f02
commit
37cf2e1ac4
28
Fill.py
28
Fill.py
|
@ -142,22 +142,30 @@ def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None
|
|||
|
||||
if any(localprioitempool.values() or
|
||||
localrestitempool.values()): # we need to make sure some fills are limited to certain worlds
|
||||
local_locations = {player: [] for player in world.player_ids}
|
||||
for location in fill_locations:
|
||||
local_locations[location.player].append(location)
|
||||
for locations in local_locations.values():
|
||||
world.random.shuffle(locations)
|
||||
|
||||
for player, items in localprioitempool.items(): # items already shuffled
|
||||
local_locations = [location for location in fill_locations if location.player == player]
|
||||
if not local_locations:
|
||||
continue
|
||||
world.random.shuffle(local_locations)
|
||||
player_local_locations = local_locations[player]
|
||||
for item_to_place in items:
|
||||
spot_to_fill = local_locations.pop()
|
||||
if not player_local_locations:
|
||||
logging.warning(f"Ran out of local locations for player {player}, "
|
||||
f"cannot place {item_to_place}.")
|
||||
break
|
||||
spot_to_fill = player_local_locations.pop()
|
||||
world.push_item(spot_to_fill, item_to_place, False)
|
||||
fill_locations.remove(spot_to_fill)
|
||||
for player, items in localrestitempool.items(): # items already shuffled
|
||||
local_locations = [location for location in fill_locations if location.player == player]
|
||||
if not local_locations:
|
||||
continue
|
||||
world.random.shuffle(local_locations)
|
||||
player_local_locations = local_locations[player]
|
||||
for item_to_place in items:
|
||||
spot_to_fill = local_locations.pop()
|
||||
if not player_local_locations:
|
||||
logging.warning(f"Ran out of local locations for player {player}, "
|
||||
f"cannot place {item_to_place}.")
|
||||
break
|
||||
spot_to_fill = player_local_locations.pop()
|
||||
world.push_item(spot_to_fill, item_to_place, False)
|
||||
fill_locations.remove(spot_to_fill)
|
||||
|
||||
|
|
Loading…
Reference in New Issue