refactor(M03): extract raw M2 model repository
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
class_name M2RawModelRepository
|
||||
extends RefCounted
|
||||
|
||||
## Reads raw static and animated M2 Dictionaries through the optional native
|
||||
## M2Loader boundary. The repository is stateless and does not cache failures.
|
||||
|
||||
const NATIVE_LOADER_CLASS_NAME := "M2Loader"
|
||||
|
||||
|
||||
## Loads one normalized static M2 path with the native `load_m2` method.
|
||||
## Invalid input, unavailable native support and parse failures return `{}`.
|
||||
func load_static_model_data(
|
||||
extracted_directory: String,
|
||||
normalized_relative_path: String) -> Dictionary:
|
||||
return _load_model_data(
|
||||
extracted_directory,
|
||||
normalized_relative_path,
|
||||
"load_m2"
|
||||
)
|
||||
|
||||
|
||||
## Loads one normalized animated M2 path with the native `load_m2_animated`
|
||||
## method. Invalid input, unavailable support and parse failures return `{}`.
|
||||
func load_animated_model_data(
|
||||
extracted_directory: String,
|
||||
normalized_relative_path: String) -> Dictionary:
|
||||
return _load_model_data(
|
||||
extracted_directory,
|
||||
normalized_relative_path,
|
||||
"load_m2_animated"
|
||||
)
|
||||
|
||||
|
||||
func _load_model_data(
|
||||
extracted_directory: String,
|
||||
normalized_relative_path: String,
|
||||
native_method_name: StringName) -> Dictionary:
|
||||
if normalized_relative_path.is_empty():
|
||||
return {}
|
||||
if not ClassDB.class_exists(NATIVE_LOADER_CLASS_NAME):
|
||||
return {}
|
||||
var absolute_path := ProjectSettings.globalize_path(
|
||||
extracted_directory.path_join(normalized_relative_path)
|
||||
)
|
||||
if not FileAccess.file_exists(absolute_path):
|
||||
return {}
|
||||
var native_loader: Object = ClassDB.instantiate(NATIVE_LOADER_CLASS_NAME)
|
||||
if native_loader == null or not native_loader.has_method(native_method_name):
|
||||
return {}
|
||||
var raw_model_data: Variant = native_loader.call(native_method_name, absolute_path)
|
||||
return raw_model_data if raw_model_data is Dictionary else {}
|
||||
@@ -0,0 +1 @@
|
||||
uid://bwqtuln7vpcj4
|
||||
Reference in New Issue
Block a user