extends Node var mod_paths := [] var mod_manifests := {} const MODS_DIR := "res://mods" func _ready(): load_mods(MODS_DIR) load_mod_content() func load_mods(base_path: String): var dir := DirAccess.open(base_path) if not dir: push_error("No mods folder found.") return for folder in dir.get_directories(): var mod_path = base_path + "/" + folder var manifest_path = mod_path + "/manifest.json" if FileAccess.file_exists(manifest_path): var manifest_file := FileAccess.open(manifest_path, FileAccess.READ) var manifest : Dictionary = JSON.parse_string(manifest_file.get_as_text()) if typeof(manifest) == TYPE_DICTIONARY: # always true ? mod_paths.append(mod_path) mod_manifests[manifest["id"]] = manifest print("Mod loaded: %s" % manifest["name"]) func load_units(units_path: String): var dir := DirAccess.open(units_path) if dir: for file in dir.get_files(): if file.get_extension() == "json": var file_path = units_path + "/" + file var f := FileAccess.open(file_path, FileAccess.READ) if f: var data = JSON.parse_string(f.get_as_text()) if typeof(data) == TYPE_DICTIONARY: ContentRegistry.register_unit(data) print("Unit loaded: %s" % data["id"]) func load_buildings(buildings_path: String): var dir := DirAccess.open(buildings_path) if dir: for file in dir.get_files(): if file.get_extension() == "json": var file_path = buildings_path + "/" + file var f := FileAccess.open(file_path, FileAccess.READ) if f: var data = JSON.parse_string(f.get_as_text()) if typeof(data) == TYPE_DICTIONARY: ContentRegistry.register_building(data) print("Building loaded: %s" % data["id"]) func load_mod_content(): for mod_path in mod_paths: load_units(mod_path + "/units") load_buildings(mod_path + "/buildings")