Shuffling sectors is improved slightly
Changing many logging statements to debug only
This commit is contained in:
@@ -577,7 +577,7 @@ def is_proposal_valid(proposal, buckets, candidates):
|
|||||||
global search_iterations
|
global search_iterations
|
||||||
search_iterations = search_iterations + 1
|
search_iterations = search_iterations + 1
|
||||||
if search_iterations % 100 == 0:
|
if search_iterations % 100 == 0:
|
||||||
logger.info('Iteration %s', search_iterations)
|
logger.debug('Iteration %s', search_iterations)
|
||||||
# check that proposal is complete
|
# check that proposal is complete
|
||||||
for i in range(len(proposal)):
|
for i in range(len(proposal)):
|
||||||
if proposal[i] is -1:
|
if proposal[i] is -1:
|
||||||
@@ -591,6 +591,14 @@ def is_proposal_valid(proposal, buckets, candidates):
|
|||||||
valid = is_polarity_neutral(test)
|
valid = is_polarity_neutral(test)
|
||||||
if not valid:
|
if not valid:
|
||||||
return False
|
return False
|
||||||
|
for sector in test:
|
||||||
|
other_sectors = list(test)
|
||||||
|
other_sectors.remove(sector)
|
||||||
|
sector_mag = sector.magnitude()
|
||||||
|
other_mag = sum_vector(other_sectors, lambda x: x.magnitude())
|
||||||
|
for i in range(len(sector_mag)):
|
||||||
|
if sector_mag[i] > 0 and other_mag[i] == 0:
|
||||||
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
@@ -942,13 +950,13 @@ def shuffle_dungeon_no_repeats_new(world, player, available_sectors, entrance_re
|
|||||||
continue
|
continue
|
||||||
sector.outstanding_doors.remove(door)
|
sector.outstanding_doors.remove(door)
|
||||||
# door_connected = False
|
# door_connected = False
|
||||||
logger.info('Linking %s', door.name)
|
logger.debug('Linking %s', door.name)
|
||||||
# Find an available region that has a compatible door
|
# Find an available region that has a compatible door
|
||||||
reachable_doors = [d.door for d in state.unattached_doors]
|
reachable_doors = [d.door for d in state.unattached_doors]
|
||||||
compatibles = find_all_compatible_door_in_sectors_ex(door, available_sectors, reachable_doors)
|
compatibles = find_all_compatible_door_in_sectors_ex(door, available_sectors, reachable_doors)
|
||||||
while len(compatibles) > 0:
|
while len(compatibles) > 0:
|
||||||
connect_sector, connect_door = compatibles.pop()
|
connect_sector, connect_door = compatibles.pop()
|
||||||
logger.info(' Found possible new sector via %s', connect_door.name)
|
logger.debug(' Found possible new sector via %s', connect_door.name)
|
||||||
# Check if valid
|
# Check if valid
|
||||||
if is_valid(door, connect_door, sector, connect_sector, available_sectors, reachable_doors, state, world, player):
|
if is_valid(door, connect_door, sector, connect_sector, available_sectors, reachable_doors, state, world, player):
|
||||||
# Apply connection and add the new region's doors to the available list
|
# Apply connection and add the new region's doors to the available list
|
||||||
@@ -963,7 +971,7 @@ def shuffle_dungeon_no_repeats_new(world, player, available_sectors, entrance_re
|
|||||||
connect_region = world.get_entrance(door.dest.name, player).parent_region
|
connect_region = world.get_entrance(door.dest.name, player).parent_region
|
||||||
state = extend_reachable_state([connect_region], state, world, player)
|
state = extend_reachable_state([connect_region], state, world, player)
|
||||||
break # skips else block below
|
break # skips else block below
|
||||||
logger.info(' Not Linking %s to %s', door.name, connect_door.name)
|
logger.debug(' Not Linking %s to %s', door.name, connect_door.name)
|
||||||
if len(compatibles) == 0: # time to try again
|
if len(compatibles) == 0: # time to try again
|
||||||
if len(state.unattached_doors) <= 1:
|
if len(state.unattached_doors) <= 1:
|
||||||
raise Exception('Rejected last option due to dead end... infinite loop ensues')
|
raise Exception('Rejected last option due to dead end... infinite loop ensues')
|
||||||
@@ -972,7 +980,7 @@ def shuffle_dungeon_no_repeats_new(world, player, available_sectors, entrance_re
|
|||||||
compatibles = find_all_compatible_door_in_list(door, reachable_doors)
|
compatibles = find_all_compatible_door_in_list(door, reachable_doors)
|
||||||
while len(compatibles) > 0:
|
while len(compatibles) > 0:
|
||||||
connect_door = compatibles.pop()
|
connect_door = compatibles.pop()
|
||||||
logger.info(' Adding loop via %s', connect_door.name)
|
logger.debug(' Adding loop via %s', connect_door.name)
|
||||||
connect_sector = find_sector_for_door(connect_door, available_sectors)
|
connect_sector = find_sector_for_door(connect_door, available_sectors)
|
||||||
# Check if valid
|
# Check if valid
|
||||||
if is_loop_valid(door, connect_door, sector, connect_sector, available_sectors):
|
if is_loop_valid(door, connect_door, sector, connect_sector, available_sectors):
|
||||||
@@ -987,7 +995,7 @@ def shuffle_dungeon_no_repeats_new(world, player, available_sectors, entrance_re
|
|||||||
sector.regions.extend(connect_sector.regions)
|
sector.regions.extend(connect_sector.regions)
|
||||||
break # skips else block with exception
|
break # skips else block with exception
|
||||||
else:
|
else:
|
||||||
logger.info(' Not Linking %s to %s', door.name, connect_door.name)
|
logger.debug(' Not Linking %s to %s', door.name, connect_door.name)
|
||||||
sector.outstanding_doors.insert(0, door)
|
sector.outstanding_doors.insert(0, door)
|
||||||
if len(state.unattached_doors) <= 2:
|
if len(state.unattached_doors) <= 2:
|
||||||
raise Exception('Rejected last option due to likely improper loops...')
|
raise Exception('Rejected last option due to likely improper loops...')
|
||||||
@@ -1469,7 +1477,7 @@ def reassign_key_doors(current_doors, proposal, world, player):
|
|||||||
change_door_to_small_key(d1, world, player)
|
change_door_to_small_key(d1, world, player)
|
||||||
change_door_to_small_key(d2, world, player)
|
change_door_to_small_key(d2, world, player)
|
||||||
world.spoiler.set_door_type(d1.name+' <-> '+d2.name, 'Key Door', player)
|
world.spoiler.set_door_type(d1.name+' <-> '+d2.name, 'Key Door', player)
|
||||||
logger.info('Key Door: %s', d1.name+' <-> '+d2.name)
|
logger.debug('Key Door: %s', d1.name+' <-> '+d2.name)
|
||||||
else:
|
else:
|
||||||
d = obj
|
d = obj
|
||||||
if d.type is DoorType.Interior:
|
if d.type is DoorType.Interior:
|
||||||
@@ -1480,7 +1488,7 @@ def reassign_key_doors(current_doors, proposal, world, player):
|
|||||||
elif d.type is DoorType.Normal:
|
elif d.type is DoorType.Normal:
|
||||||
change_door_to_small_key(d, world, player)
|
change_door_to_small_key(d, world, player)
|
||||||
world.spoiler.set_door_type(d.name, 'Key Door', player)
|
world.spoiler.set_door_type(d.name, 'Key Door', player)
|
||||||
logger.info('Key Door: %s', d.name)
|
logger.debug('Key Door: %s', d.name)
|
||||||
|
|
||||||
|
|
||||||
def change_door_to_small_key(d, world, player):
|
def change_door_to_small_key(d, world, player):
|
||||||
|
|||||||
6
Rules.py
6
Rules.py
@@ -1709,7 +1709,7 @@ def generate_key_logic(dungeon_name, small_key_name, world, player):
|
|||||||
state.visit_region(region, current_kr)
|
state.visit_region(region, current_kr)
|
||||||
state.add_all_doors_check_key_region(region, current_kr, world, player)
|
state.add_all_doors_check_key_region(region, current_kr, world, player)
|
||||||
# Search into the dungeon
|
# Search into the dungeon
|
||||||
logger.debug('Begin key region search. %s', small_key_name)
|
# logger.debug('Begin key region search. %s', small_key_name)
|
||||||
while len(state.avail_doors) > 0:
|
while len(state.avail_doors) > 0:
|
||||||
# Open as many non-key doors as possible before opening a key door.
|
# Open as many non-key doors as possible before opening a key door.
|
||||||
# This guarantees that we're only exploring one key region at a time.
|
# This guarantees that we're only exploring one key region at a time.
|
||||||
@@ -1730,7 +1730,7 @@ def generate_key_logic(dungeon_name, small_key_name, world, player):
|
|||||||
state.opened_doors.append(door)
|
state.opened_doors.append(door)
|
||||||
if door.dest.smallKey:
|
if door.dest.smallKey:
|
||||||
state.opened_doors.append(door.dest)
|
state.opened_doors.append(door.dest)
|
||||||
logger.debug('%s: New KR %s', door.name, current_kr)
|
# logger.debug('%s: New KR %s', door.name, current_kr)
|
||||||
# Account for the new region
|
# Account for the new region
|
||||||
state.visit_region(connect_region, local_kr)
|
state.visit_region(connect_region, local_kr)
|
||||||
state.add_all_doors_check_key_region(connect_region, local_kr, world, player)
|
state.add_all_doors_check_key_region(connect_region, local_kr, world, player)
|
||||||
@@ -1775,7 +1775,7 @@ def generate_key_logic(dungeon_name, small_key_name, world, player):
|
|||||||
kr_keys[kr] = keys
|
kr_keys[kr] = keys
|
||||||
# Generate logic
|
# Generate logic
|
||||||
for door in logic_doors:
|
for door in logic_doors:
|
||||||
logger.info(' %s in kr %s needs %s keys', door.name, kr, keys)
|
logger.debug(' %s in kr %s needs %s keys', door.name, kr, keys)
|
||||||
add_rule(world.get_entrance(door.name, player), create_key_rule(small_key_name, player, keys))
|
add_rule(world.get_entrance(door.name, player), create_key_rule(small_key_name, player, keys))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user