コード例 #1
0
ファイル: data_reader.py プロジェクト: vjain05/randovania
    def read_node(self, data: Dict) -> Node:
        name: str = data["name"]
        heal: bool = data["heal"]
        node_type: int = data["node_type"]

        if node_type == 0:
            self.generic_index += 1
            return GenericNode(name, heal, self.generic_index)

        elif node_type == 1:
            return DockNode(name, heal, data["dock_index"],
                            DockConnection(data["connected_area_asset_id"], data["connected_dock_index"]),
                            self.dock_weakness_database.get_by_type_and_index(DockType(data["dock_type"]),
                                                                              data["dock_weakness_index"]))

        elif node_type == 2:
            return PickupNode(name, heal, PickupIndex(data["pickup_index"]))

        elif node_type == 3:
            instance_id = data["teleporter_instance_id"]

            destination_world_asset_id = data["destination_world_asset_id"]
            destination_area_asset_id = data["destination_area_asset_id"]

            return TeleporterNode(name, heal, instance_id,
                                  AreaLocation(destination_world_asset_id, destination_area_asset_id))

        elif node_type == 4:
            return EventNode(name, heal,
                             self.resource_database.get_by_type_and_index(ResourceType.EVENT, data["event_index"]))

        else:
            raise Exception("Unknown node type: {}".format(node_type))
コード例 #2
0
ファイル: data_reader.py プロジェクト: ThomasJRyan/randovania
    def read_node(self, data: Dict) -> Node:
        name: str = data["name"]
        self.generic_index += 1
        try:
            heal: bool = data["heal"]
            node_type: int = data["node_type"]
            location = None
            if data["coordinates"] is not None:
                location = location_from_json(data["coordinates"])

            if node_type == "generic":
                return GenericNode(name, heal, location, self.generic_index)

            elif node_type == "dock":
                return DockNode(
                    name, heal, location, self.generic_index,
                    data["dock_index"],
                    DockConnection(data["connected_area_asset_id"],
                                   data["connected_dock_index"]),
                    self.dock_weakness_database.get_by_type_and_index(
                        DockType(data["dock_type"]),
                        data["dock_weakness_index"]))

            elif node_type == "pickup":
                return PickupNode(name, heal, location, self.generic_index,
                                  PickupIndex(data["pickup_index"]),
                                  data["major_location"])

            elif node_type == "teleporter":
                instance_id = data["teleporter_instance_id"]

                destination_world_asset_id = data["destination_world_asset_id"]
                destination_area_asset_id = data["destination_area_asset_id"]

                return TeleporterNode(
                    name,
                    heal,
                    location,
                    self.generic_index,
                    instance_id,
                    AreaLocation(destination_world_asset_id,
                                 destination_area_asset_id),
                    data["scan_asset_id"],
                    data["keep_name_when_vanilla"],
                    data["editable"],
                )

            elif node_type == "event":
                return EventNode(
                    name, heal, location, self.generic_index,
                    self.resource_database.get_by_type_and_index(
                        ResourceType.EVENT, data["event_index"]))

            elif node_type == "translator_gate":
                return TranslatorGateNode(name, heal, location,
                                          self.generic_index,
                                          TranslatorGate(data["gate_index"]),
                                          self._get_scan_visor())

            elif node_type == "logbook":
                lore_type = LoreType(data["lore_type"])

                if lore_type == LoreType.LUMINOTH_LORE:
                    required_translator = self.resource_database.get_item(
                        data["extra"])
                else:
                    required_translator = None

                if lore_type in {
                        LoreType.LUMINOTH_WARRIOR, LoreType.SKY_TEMPLE_KEY_HINT
                }:
                    hint_index = data["extra"]
                else:
                    hint_index = None

                return LogbookNode(name, heal, location, self.generic_index,
                                   data["string_asset_id"],
                                   self._get_scan_visor(), lore_type,
                                   required_translator, hint_index)
            else:
                raise Exception(f"Unknown type: {node_type}")

        except Exception as e:
            raise Exception(f"In node {name}, got error: {e}")
コード例 #3
0
    def read_node(self, data: Dict) -> Node:
        name: str = data["name"]
        heal: bool = data["heal"]
        node_type: int = data["node_type"]
        self.generic_index += 1

        if node_type == 0:
            return GenericNode(name, heal, self.generic_index)

        elif node_type == 1:
            return DockNode(
                name, heal, self.generic_index, data["dock_index"],
                DockConnection(data["connected_area_asset_id"],
                               data["connected_dock_index"]),
                self.dock_weakness_database.get_by_type_and_index(
                    DockType(data["dock_type"]), data["dock_weakness_index"]))

        elif node_type == 2:
            return PickupNode(name, heal, self.generic_index,
                              PickupIndex(data["pickup_index"]),
                              data["major_location"])

        elif node_type == 3:
            instance_id = data["teleporter_instance_id"]

            destination_world_asset_id = data["destination_world_asset_id"]
            destination_area_asset_id = data["destination_area_asset_id"]

            return TeleporterNode(
                name,
                heal,
                self.generic_index,
                instance_id,
                AreaLocation(destination_world_asset_id,
                             destination_area_asset_id),
                data["keep_name_when_vanilla"],
                data["editable"],
            )

        elif node_type == 4:
            return EventNode(
                name, heal, self.generic_index,
                self.resource_database.get_by_type_and_index(
                    ResourceType.EVENT, data["event_index"]))

        elif node_type == 5:
            return TranslatorGateNode(
                name, heal, self.generic_index,
                TranslatorGate(data["gate_index"]),
                find_resource_info_with_long_name(self.resource_database.item,
                                                  "Scan Visor"))

        elif node_type == 6:
            lore_type = list(LoreType)[data["lore_type"]]

            if lore_type == LoreType.LUMINOTH_LORE:
                required_translator = self.resource_database.get_item(
                    data["extra"])
            else:
                required_translator = None

            if lore_type in {
                    LoreType.LUMINOTH_WARRIOR, LoreType.SKY_TEMPLE_KEY_HINT
            }:
                hint_index = data["extra"]
            else:
                hint_index = None

            return LogbookNode(
                name, heal, self.generic_index, data["string_asset_id"],
                find_resource_info_with_long_name(self.resource_database.item,
                                                  "Scan Visor"), lore_type,
                required_translator, hint_index)

        else:
            raise Exception("Unknown node type: {}".format(node_type))