RingOfRaces/addons/thejustinwalsh.castledb/castledb_importer.gd

99 lines
2.3 KiB
GDScript3
Raw Normal View History

2023-03-25 20:42:54 +00:00
@tool
2021-05-26 20:02:51 +00:00
extends EditorImportPlugin
const Utils = preload("res://addons/thejustinwalsh.castledb/castledb_utils.gd")
enum Presets { PRESET_DEFAULT }
2023-03-25 20:42:54 +00:00
func _get_importer_name():
2021-05-26 20:02:51 +00:00
return "castledb.importer"
2023-03-25 20:42:54 +00:00
func _get_visible_name():
2021-05-26 20:02:51 +00:00
return "CastleDB"
2023-03-25 20:42:54 +00:00
func _get_recognized_extensions():
2021-05-26 20:02:51 +00:00
return ["cdb"]
2023-03-25 20:42:54 +00:00
func _get_save_extension():
2021-05-26 20:02:51 +00:00
return "gd"
2023-03-25 20:42:54 +00:00
func _get_resource_type():
2021-05-26 20:02:51 +00:00
return "Script"
2023-03-25 20:42:54 +00:00
func _get_preset_count():
2021-05-26 20:02:51 +00:00
return Presets.size()
2023-03-25 20:42:54 +00:00
func _get_preset_name(preset):
2021-05-26 20:02:51 +00:00
match preset:
Presets.PRESET_DEFAULT:
return "Default"
_:
return "Unknown"
2023-03-25 20:42:54 +00:00
func _get_import_options(preset):
2021-05-26 20:02:51 +00:00
match preset:
Presets.PRESET_DEFAULT:
return [{
"name": "default",
"default_value": false
}]
_:
return []
2023-03-25 20:42:54 +00:00
func _get_option_visibility(option, options):
2021-05-26 20:02:51 +00:00
return true
func import(source_file, save_path, options, r_platform_variants, r_gen_files):
var file = File.new()
var err = file.open(source_file, File.READ)
if err != OK:
return err
var json = file.get_as_text()
file.close();
2023-03-25 20:42:54 +00:00
var test_json_conv = JSON.new()
test_json_conv.parse(json)
var json_result = test_json_conv.get_data()
2021-05-26 20:02:51 +00:00
if json_result.error != OK:
return json_result.error
var data = json_result.result
var namespace = source_file.get_file().get_basename().capitalize()
# Script Header
var code = "extends Node" + "\n"
code += "\n"
code += "const CastleDB = preload(\"res://addons/thejustinwalsh.castledb/castledb_types.gd\")" + "\n"
code += "\n"
# Script child class sheets (namespace)
var sheets:= []
if data.has("sheets"):
sheets = data["sheets"]
for sheet in sheets:
var name:String = sheet["name"].capitalize().replace(" ", "")
if name.find("@") >= 0: continue # TODO: Implement subclass list data
var keys = []
code += "class %s:" % name + "\n"
code += Utils.gen_column_keys(name, sheet["columns"], sheet["lines"], keys, 1)
code += "\n"
code += Utils.gen_column_data(source_file.get_base_dir(), name, sheet["columns"], sheet["lines"], keys, 1)
code += "\n"
for sheet in sheets:
var name = sheet["name"].capitalize().replace(" ", "")
if name.find("@") >= 0: continue # TODO: Implement subclass list data
code += "var %s := %s.new()" % [name.to_lower(), name] + "\n"
var main_script = GDScript.new();
main_script.set_source_code(code)
2023-03-25 20:42:54 +00:00
return ResourceSaver.save("%s.%s" % [save_path, _get_save_extension()], main_script)
2021-05-26 20:02:51 +00:00