Exemplo n.º 1
0
 def _search_standard_module(standard_modules: json,
                             standard_string: str) -> Optional[str]:
     standard_modules = next(iter(standard_modules.values())
                             )  # only 1 object containing a list per file
     module_class, module_grade = Ship._extract_class_and_grade(
         standard_string)
     for standard_module in standard_modules:
         if standard_module["class"] == module_class and standard_module[
                 "rating"] == module_grade:
             return standard_module["symbol"]
     return None
Exemplo n.º 2
0
    def create_from_json(json_ships: json, standard_modules: Dict[str, json],
                         ship_name_to_symbol: Dict[str, str]) -> Ship:
        """
        Create a ship object from coriolis data
        :param json_ships: The json object of the file, e.g. adder.json
        :param standard_modules: Default fitted modules as defined in coriolis-data/modules/standard/*
        :param ship_name_to_symbol: Dictionary containing the ship name as key and the internal identifier (symbol) as value
        :return: a Ship
        """
        json_ship = next(iter(json_ships.values()))  # only 1 ship per file
        ship = Ship()
        ship.name = json_ship["properties"]["name"]
        ship.symbol = ship_name_to_symbol.get(
            json_ship["properties"]["name"].lower(),
            json_ship["properties"]["name"])  # avoid None
        ship.base_shield_strength = json_ship["properties"][
            "baseShieldStrength"]
        ship.hull_mass = json_ship["properties"]["hullMass"]

        standards = json_ship["defaults"]["standard"]
        ship.power_plant = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_POWER_PLANT), standards[0])
        ship.thrusters = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_THRUSTERS), standards[1])
        ship.frame_shift_drive = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_FSD), standards[2])
        ship.life_support = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_LIFE_SUPPORT), standards[3])
        ship.power_distributor = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_POWER_DISTRIBUTOR), standards[4])
        ship.sensors = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_SENSORS), standards[5])
        ship.fuel_tank = Ship._search_standard_module(
            standard_modules.get(MODULE_NAME_FUEL_TANK), standards[6])
        ship.armour = "{}_armour_grade1".format(ship.symbol)

        ship.slots = json_ship["slots"]
        ship.highest_internal = json_ship["slots"]["internal"][0]
        for hardpoint in json_ship["slots"]["hardpoints"]:
            if hardpoint == 0:
                ship.utility_slots_amount += 1

        return ship