refactor(M03): extract raw M2 model repository

This commit is contained in:
2026-07-17 15:53:20 +04:00
parent e4bb10cee7
commit b608a81766
12 changed files with 479 additions and 66 deletions
+51
View File
@@ -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