def read_area(self, data: Dict) -> Area: name = data["name"] nodes = read_array(data["nodes"], self.read_node) nodes_by_name = {node.name: node for node in nodes} connections = {} for i, origin_data in enumerate(data["nodes"]): origin = nodes[i] connections[origin] = {} extra_requirement = None if is_resource_node( origin) and self.add_self_as_requirement_to_resources: extra_requirement = RequirementList.with_single_resource( origin.resource()) for target_name, target_requirements in origin_data[ "connections"].items(): the_set = read_requirement_set(target_requirements, self.resource_database) if extra_requirement is not None: the_set = the_set.union(RequirementSet([extra_requirement ])) if the_set != RequirementSet.impossible(): connections[origin][nodes_by_name[target_name]] = the_set return Area(name, data["asset_id"], data["default_node_index"], nodes, connections)
def _extra_requirement_for_node(game: GameDescription, node: Node) -> Optional[RequirementSet]: extra_requirement = None if is_resource_node(node): node_resource = node.resource() if node_resource in game.dangerous_resources: extra_requirement = RequirementSet( [RequirementList.with_single_resource(node_resource)]) return extra_requirement