def connect_regions(world: MultiWorld, player: int, source: str, target: str, rule): sourceRegion = world.get_region(source, player) targetRegion = world.get_region(target, player) connection = Entrance(player,'', sourceRegion) connection.access_rule = rule sourceRegion.exits.append(connection) connection.connect(targetRegion)
def create_owg_connections(player, world, connections, default_rule): for entrance, parent_region, target_region, *rule_override in connections: parent = world.get_region(parent_region, player) target = world.get_region(target_region, player) connection = Entrance(player, entrance, parent) parent.exits.append(connection) connection.connect(target) rule = rule_override[0] if len(rule_override) > 0 else default_rule connection.access_rule = rule
def connect(self, world: MultiWorld, player: int, source: str, target: str, player_logic: WitnessPlayerLogic, panel_hex_to_solve_set=None): """ connect two regions and set the corresponding requirement """ source_region = world.get_region(source, player) target_region = world.get_region(target, player) connection = Entrance( player, source + " to " + target + " via " + str(panel_hex_to_solve_set), source_region ) connection.access_rule = self.make_lambda(panel_hex_to_solve_set, world, player, player_logic) source_region.exits.append(connection) connection.connect(target_region)
def generate_region( self, parent: Region, size: int, access_rule: CollectionRule = lambda state: True) -> Region: region_tag = "_region" + str(len(self.regions)) region_name = "player" + str(self.id) + region_tag region = Region("player" + str(self.id) + region_tag, RegionType.Generic, "Region Hint", self.id, self.world) self.locations += generate_locations(size, self.id, None, region, region_tag) entrance = Entrance(self.id, region_name + "_entrance", parent) parent.exits.append(entrance) entrance.connect(region) entrance.access_rule = access_rule self.regions.append(region) self.world.regions.append(region) return region
def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): sourceRegion = world.get_region(source, player) targetRegion = world.get_region(target, player) if target not in used_names: used_names[target] = 1 name = target else: used_names[target] += 1 name = target + (' ' * used_names[target]) connection = Entrance(player, name, sourceRegion) if rule: connection.access_rule = rule sourceRegion.exits.append(connection) connection.connect(targetRegion)