diff options
| -rw-r--r-- | editor/plugins/animation_library_editor.cpp | 8 | ||||
| -rw-r--r-- | editor/plugins/animation_player_editor_plugin.cpp | 2 | ||||
| -rw-r--r-- | scene/resources/animation_library.cpp | 21 | ||||
| -rw-r--r-- | scene/resources/animation_library.h | 3 | 
4 files changed, 26 insertions, 8 deletions
diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp index 2e9a82a7c2..581c3c05a5 100644 --- a/editor/plugins/animation_library_editor.cpp +++ b/editor/plugins/animation_library_editor.cpp @@ -55,17 +55,15 @@ void AnimationLibraryEditor::_add_library_validate(const String &p_name) {  		ERR_FAIL_COND(al.is_null());  		if (p_name == "") {  			error = TTR("Animation name can't be empty."); - -		} else if (String(p_name).contains("/") || String(p_name).contains(":") || String(p_name).contains(",") || String(p_name).contains("[")) { +		} else if (!AnimationLibrary::is_valid_name(p_name)) {  			error = TTR("Animation name contains invalid characters: '/', ':', ',' or '['.");  		} else if (al->has_animation(p_name)) {  			error = TTR("Animation with the same name already exists.");  		} -  	} else {  		if (p_name == "" && bool(player->call("has_animation_library", ""))) {  			error = TTR("Enter a library name."); -		} else if (String(p_name).contains("/") || String(p_name).contains(":") || String(p_name).contains(",") || String(p_name).contains("[")) { +		} else if (!AnimationLibrary::is_valid_name(p_name)) {  			error = TTR("Library name contains invalid characters: '/', ':', ',' or '['.");  		} else if (bool(player->call("has_animation_library", p_name))) {  			error = TTR("Library with the same name already exists."); @@ -258,7 +256,7 @@ void AnimationLibraryEditor::_load_file(String p_path) {  				}  			} -			String name = p_path.get_file().get_basename(); +			String name = AnimationLibrary::validate_name(p_path.get_file().get_basename());  			int attempt = 1; diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 17a1bd1048..67d6c66c89 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -427,7 +427,7 @@ void AnimationPlayerEditor::_animation_name_edited() {  	player->stop();  	String new_name = name->get_text(); -	if (new_name.is_empty() || new_name.contains(":") || new_name.contains("/")) { +	if (!AnimationLibrary::is_valid_name(new_name)) {  		error_dialog->set_text(TTR("Invalid animation name!"));  		error_dialog->popup_centered();  		return; diff --git a/scene/resources/animation_library.cpp b/scene/resources/animation_library.cpp index 229d9ab218..5d92c3b0c6 100644 --- a/scene/resources/animation_library.cpp +++ b/scene/resources/animation_library.cpp @@ -30,8 +30,25 @@  #include "animation_library.h" +bool AnimationLibrary::is_valid_name(const String &p_name) { +	return !(p_name.is_empty() || p_name.contains("/") || p_name.contains(":") || p_name.contains(",") || p_name.contains("[")); +} + +String AnimationLibrary::validate_name(const String &p_name) { +	if (p_name.is_empty()) { +		return "_"; // Should always return a valid name. +	} + +	String name = p_name; +	const char *characters = "/:,["; +	for (const char *p = characters; *p; p++) { +		name = name.replace(String::chr(*p), "_"); +	} +	return name; +} +  Error AnimationLibrary::add_animation(const StringName &p_name, const Ref<Animation> &p_animation) { -	ERR_FAIL_COND_V_MSG(String(p_name).contains("/") || String(p_name).contains(":") || String(p_name).contains(",") || String(p_name).contains("["), ERR_INVALID_PARAMETER, "Invalid animation name: " + String(p_name) + "."); +	ERR_FAIL_COND_V_MSG(!is_valid_name(p_name), ERR_INVALID_PARAMETER, "Invalid animation name: '" + String(p_name) + "'.");  	ERR_FAIL_COND_V(p_animation.is_null(), ERR_INVALID_PARAMETER);  	if (animations.has(p_name)) { @@ -55,7 +72,7 @@ void AnimationLibrary::remove_animation(const StringName &p_name) {  void AnimationLibrary::rename_animation(const StringName &p_name, const StringName &p_new_name) {  	ERR_FAIL_COND(!animations.has(p_name)); -	ERR_FAIL_COND_MSG(String(p_new_name).contains("/") || String(p_new_name).contains(":") || String(p_new_name).contains(",") || String(p_new_name).contains("["), "Invalid animation name: " + String(p_new_name) + "."); +	ERR_FAIL_COND_MSG(!is_valid_name(p_new_name), "Invalid animation name: '" + String(p_new_name) + "'.");  	ERR_FAIL_COND(animations.has(p_new_name));  	animations.insert(p_new_name, animations[p_name]); diff --git a/scene/resources/animation_library.h b/scene/resources/animation_library.h index 69ac5a97d2..0f327fb072 100644 --- a/scene/resources/animation_library.h +++ b/scene/resources/animation_library.h @@ -49,6 +49,9 @@ protected:  	static void _bind_methods();  public: +	static bool is_valid_name(const String &p_name); +	static String validate_name(const String &p_name); +  	Error add_animation(const StringName &p_name, const Ref<Animation> &p_animation);  	void remove_animation(const StringName &p_name);  	void rename_animation(const StringName &p_name, const StringName &p_new_name);  |