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
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