Skip to content

Commit b2e75e5

Browse files
committed
Merge pull request godotengine#110188 from vaner-org/converter-animation-suffix
Trim -loop & -cycle from animations during Godot 3 to 4 conversion
2 parents 335fe5c + bac7253 commit b2e75e5

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

editor/project_upgrade/project_converter_3_to_4.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ class ProjectConverter3To4::RegExContainer {
155155
int joypad_button_mappings[23] = { 0, 1, 2, 3, 9, 10, -1 /*L2*/, -1 /*R2*/, 7, 8, 4, 6, 11, 12, 13, 14, 5, 15, 16, 17, 18, 19, 20 };
156156
// Entries for L2 and R2 are -1 since they match to joypad axes and no longer to joypad buttons in Godot 4.
157157

158+
// Animation suffixes.
159+
RegEx animation_suffix = RegEx("([\"'])([a-zA-Z0-9_-]+)(-(?:loop|cycle))([\"'])");
160+
158161
LocalVector<RegEx *> class_regexes;
159162

160163
RegEx class_temp_tscn = RegEx("\\bTEMP_RENAMED_CLASS.tscn\\b");
@@ -406,6 +409,7 @@ bool ProjectConverter3To4::convert() {
406409
rename_common(RenamesMap3To4::shaders_renames, reg_container.shaders_regexes, source_lines);
407410
rename_common(RenamesMap3To4::builtin_types_renames, reg_container.builtin_types_regexes, source_lines);
408411
rename_common(RenamesMap3To4::theme_override_renames, reg_container.theme_override_regexes, source_lines);
412+
rename_animation_suffixes(source_lines, reg_container);
409413

410414
custom_rename(source_lines, "\\.shader", ".gdshader");
411415

@@ -428,6 +432,7 @@ bool ProjectConverter3To4::convert() {
428432
rename_common(RenamesMap3To4::shaders_renames, reg_container.shaders_regexes, source_lines);
429433
rename_common(RenamesMap3To4::builtin_types_renames, reg_container.builtin_types_regexes, source_lines);
430434
rename_common(RenamesMap3To4::theme_override_renames, reg_container.theme_override_regexes, source_lines);
435+
rename_animation_suffixes(source_lines, reg_container);
431436

432437
custom_rename(source_lines, "\\.shader", ".gdshader");
433438

@@ -598,6 +603,7 @@ bool ProjectConverter3To4::validate_conversion() {
598603
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::shaders_renames, reg_container.shaders_regexes, lines));
599604
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::builtin_types_renames, reg_container.builtin_types_regexes, lines));
600605
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::theme_override_renames, reg_container.theme_override_regexes, lines));
606+
changed_elements.append_array(check_for_rename_animation_suffixes(lines, reg_container));
601607

602608
changed_elements.append_array(check_for_custom_rename(lines, "\\.shader", ".gdshader"));
603609
} else if (file_name.ends_with(".tscn")) {
@@ -616,6 +622,7 @@ bool ProjectConverter3To4::validate_conversion() {
616622
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::shaders_renames, reg_container.shaders_regexes, lines));
617623
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::builtin_types_renames, reg_container.builtin_types_regexes, lines));
618624
changed_elements.append_array(check_for_rename_common(RenamesMap3To4::theme_override_renames, reg_container.theme_override_regexes, lines));
625+
changed_elements.append_array(check_for_rename_animation_suffixes(lines, reg_container));
619626

620627
changed_elements.append_array(check_for_custom_rename(lines, "\\.shader", ".gdshader"));
621628
} else if (file_name.ends_with(".cs")) {
@@ -2832,6 +2839,43 @@ Vector<String> ProjectConverter3To4::check_for_rename_input_map_scancode(Vector<
28322839
return found_renames;
28332840
}
28342841

2842+
void ProjectConverter3To4::rename_animation_suffixes(Vector<SourceLine> &source_lines, const RegExContainer &reg_container) {
2843+
for (SourceLine &source_line : source_lines) {
2844+
if (source_line.is_comment) {
2845+
continue;
2846+
}
2847+
String &line = source_line.line;
2848+
if (uint64_t(line.length()) <= maximum_line_length) {
2849+
TypedArray<RegExMatch> reg_match = reg_container.animation_suffix.search_all(line);
2850+
for (int i = 0; i < reg_match.size(); ++i) {
2851+
Ref<RegExMatch> match = reg_match[i];
2852+
PackedStringArray strings = match->get_strings();
2853+
String replacement = strings[1] + strings[2] + strings[4];
2854+
line = line.replace(strings[0], replacement);
2855+
}
2856+
}
2857+
}
2858+
}
2859+
2860+
Vector<String> ProjectConverter3To4::check_for_rename_animation_suffixes(Vector<String> &lines, const RegExContainer &reg_container) {
2861+
Vector<String> found_renames;
2862+
int current_line = 1;
2863+
2864+
for (String &line : lines) {
2865+
if (uint64_t(line.length()) <= maximum_line_length) {
2866+
TypedArray<RegExMatch> reg_match = reg_container.animation_suffix.search_all(line);
2867+
for (int i = 0; i < reg_match.size(); ++i) {
2868+
Ref<RegExMatch> match = reg_match[i];
2869+
PackedStringArray strings = match->get_strings();
2870+
String replacement = strings[1] + strings[2] + strings[4];
2871+
found_renames.append(line_formatter(current_line, strings[0], replacement, line));
2872+
}
2873+
}
2874+
current_line++;
2875+
}
2876+
return found_renames;
2877+
}
2878+
28352879
void ProjectConverter3To4::custom_rename(Vector<SourceLine> &source_lines, const String &from, const String &to) {
28362880
RegEx reg = RegEx(String("\\b") + from + "\\b");
28372881
CRASH_COND(!reg.is_valid());

editor/project_upgrade/project_converter_3_to_4.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ class ProjectConverter3To4 {
7979
void rename_joypad_buttons_and_axes(Vector<SourceLine> &source_lines, const RegExContainer &reg_container);
8080
Vector<String> check_for_rename_joypad_buttons_and_axes(Vector<String> &lines, const RegExContainer &reg_container);
8181

82+
void rename_animation_suffixes(Vector<SourceLine> &source_lines, const RegExContainer &reg_container);
83+
Vector<String> check_for_rename_animation_suffixes(Vector<String> &lines, const RegExContainer &reg_container);
84+
8285
void custom_rename(Vector<SourceLine> &source_lines, const String &from, const String &to);
8386
Vector<String> check_for_custom_rename(Vector<String> &lines, const String &from, const String &to);
8487

0 commit comments

Comments
 (0)