stick-the-quick/addons/noidexe_gltf_extras_importer/plugin.gd

46 lines
1.5 KiB
GDScript

@tool class_name GLTFExtrasImporterPlugin extends EditorPlugin
var importer
func _enter_tree() -> void:
importer = ExtrasImporter.new()
GLTFDocument.register_gltf_document_extension(importer)
func _exit_tree() -> void:
GLTFDocument.unregister_gltf_document_extension(importer)
class ExtrasImporter extends GLTFDocumentExtension:
func _import_post(state: GLTFState, root: Node) -> Error:
print("GLTFExtrasImporterPlugin called")
var materials_json := state.json.get(&'materials', []) as Array
var meshes_json := state.json.get(&'meshes', []) as Array
var nodes_json := state.json.get(&'nodes', []) as Array
var materials := state.get_materials()
var meshes := state.get_meshes()
var gltf_nodes := state.get_nodes()
var extras := {}
for i in state.get_nodes().size():
var gltf_node := gltf_nodes[i]
var node := state.get_scene_node(i)
var node_extras := {
&'node': nodes_json[i].get(&'extras', {}),
&'mesh': {},
&'surfaces': []
}
if node is MeshInstance3D or node is ImporterMeshInstance3D:
var j := gltf_node.mesh
if j >= 0:
node_extras[&'mesh'] = meshes_json[j].get(&'extras', {})
for k in node.mesh.get_surface_count():
var m := materials.find(
node.mesh.get_surface_material(k)
)
node_extras[&'surfaces'].push_back(
materials_json[m].get(&'extras', {}) if m >= 0
else {}
)
extras[root.get_path_to(node)] = node_extras
root.set_meta(&'extras', extras)
print("Meta: %s" % extras)
return OK