Replace dasher-pack with unified animation-pack using original Blender bone names
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
@tool
|
||||
extends RefCounted
|
||||
|
||||
const ErrorCodes := preload("res://addons/godot_ai/utils/error_codes.gd")
|
||||
|
||||
## Handles autoload listing, adding, and removing via ProjectSettings.
|
||||
|
||||
|
||||
func list_autoloads(_params: Dictionary) -> Dictionary:
|
||||
var autoloads: Array[Dictionary] = []
|
||||
for prop in ProjectSettings.get_property_list():
|
||||
var key: String = prop.get("name", "")
|
||||
if not key.begins_with("autoload/"):
|
||||
continue
|
||||
var name := key.substr("autoload/".length())
|
||||
var raw_value: String = ProjectSettings.get_setting(key, "")
|
||||
var is_singleton := raw_value.begins_with("*")
|
||||
var path := raw_value.substr(1) if is_singleton else raw_value
|
||||
autoloads.append({
|
||||
"name": name,
|
||||
"path": path,
|
||||
"singleton": is_singleton,
|
||||
})
|
||||
return {"data": {"autoloads": autoloads, "count": autoloads.size()}}
|
||||
|
||||
|
||||
func add_autoload(params: Dictionary) -> Dictionary:
|
||||
var name: String = params.get("name", "")
|
||||
var path: String = params.get("path", "")
|
||||
var singleton: bool = params.get("singleton", true)
|
||||
|
||||
if name.is_empty():
|
||||
return ErrorCodes.make(ErrorCodes.MISSING_REQUIRED_PARAM, "Missing required param: name")
|
||||
if path.is_empty():
|
||||
return ErrorCodes.make(ErrorCodes.MISSING_REQUIRED_PARAM, "Missing required param: path")
|
||||
var path_err = McpPathValidator.path_error(path, "path")
|
||||
if path_err != null:
|
||||
return path_err
|
||||
if not FileAccess.file_exists(path):
|
||||
return ErrorCodes.make(ErrorCodes.RESOURCE_NOT_FOUND, "File not found: %s" % path)
|
||||
|
||||
var key := "autoload/%s" % name
|
||||
if ProjectSettings.has_setting(key):
|
||||
return ErrorCodes.make(ErrorCodes.INVALID_PARAMS, "Autoload '%s' already exists" % name)
|
||||
|
||||
var value := ("*" if singleton else "") + path
|
||||
ProjectSettings.set_setting(key, value)
|
||||
ProjectSettings.set_initial_value(key, "")
|
||||
ProjectSettings.set_as_basic(key, true)
|
||||
var err := ProjectSettings.save()
|
||||
if err != OK:
|
||||
ProjectSettings.clear(key)
|
||||
return ErrorCodes.make(ErrorCodes.INTERNAL_ERROR,
|
||||
"Failed to save project settings while adding autoload '%s': %s (error %d)" % [name, error_string(err), err])
|
||||
|
||||
return {
|
||||
"data": {
|
||||
"name": name,
|
||||
"path": path,
|
||||
"singleton": singleton,
|
||||
"undoable": false,
|
||||
"reason": "Autoload changes are saved to project.godot",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func remove_autoload(params: Dictionary) -> Dictionary:
|
||||
var name: String = params.get("name", "")
|
||||
if name.is_empty():
|
||||
return ErrorCodes.make(ErrorCodes.MISSING_REQUIRED_PARAM, "Missing required param: name")
|
||||
|
||||
var key := "autoload/%s" % name
|
||||
if not ProjectSettings.has_setting(key):
|
||||
return ErrorCodes.make(ErrorCodes.NODE_NOT_FOUND, "Autoload '%s' not found" % name)
|
||||
|
||||
var old_value: String = ProjectSettings.get_setting(key, "")
|
||||
ProjectSettings.clear(key)
|
||||
var err := ProjectSettings.save()
|
||||
if err != OK:
|
||||
ProjectSettings.set_setting(key, old_value)
|
||||
return ErrorCodes.make(ErrorCodes.INTERNAL_ERROR,
|
||||
"Failed to save project settings while removing autoload '%s': %s (error %d)" % [name, error_string(err), err])
|
||||
|
||||
return {
|
||||
"data": {
|
||||
"name": name,
|
||||
"removed": true,
|
||||
"undoable": false,
|
||||
"reason": "Autoload changes are saved to project.godot",
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user