59 lines
1.8 KiB
GDScript3
59 lines
1.8 KiB
GDScript3
|
|
||
|
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")
|