Jelajahi Sumber

Iterate backwards over EditorPlugin's list of plugins in get_editor etc

Aaron Franke 5 tahun lalu
induk
melakukan
2b44b0cc43
1 mengubah file dengan 6 tambahan dan 4 penghapusan
  1. 6 4
      editor/editor_data.cpp

+ 6 - 4
editor/editor_data.cpp

@@ -262,7 +262,9 @@ EditorHistory::EditorHistory() {
 }
 
 EditorPlugin *EditorData::get_editor(Object *p_object) {
-	for (int i = 0; i < editor_plugins.size(); i++) {
+	// We need to iterate backwards so that we can check user-created plugins first.
+	// Otherwise, it would not be possible for plugins to handle CanvasItem and Spatial nodes.
+	for (int i = editor_plugins.size() - 1; i > -1; i--) {
 		if (editor_plugins[i]->has_main_screen() && editor_plugins[i]->handles(p_object)) {
 			return editor_plugins[i];
 		}
@@ -272,7 +274,7 @@ EditorPlugin *EditorData::get_editor(Object *p_object) {
 }
 
 EditorPlugin *EditorData::get_subeditor(Object *p_object) {
-	for (int i = 0; i < editor_plugins.size(); i++) {
+	for (int i = editor_plugins.size() - 1; i > -1; i--) {
 		if (!editor_plugins[i]->has_main_screen() && editor_plugins[i]->handles(p_object)) {
 			return editor_plugins[i];
 		}
@@ -283,7 +285,7 @@ EditorPlugin *EditorData::get_subeditor(Object *p_object) {
 
 Vector<EditorPlugin *> EditorData::get_subeditors(Object *p_object) {
 	Vector<EditorPlugin *> sub_plugins;
-	for (int i = 0; i < editor_plugins.size(); i++) {
+	for (int i = editor_plugins.size() - 1; i > -1; i--) {
 		if (!editor_plugins[i]->has_main_screen() && editor_plugins[i]->handles(p_object)) {
 			sub_plugins.push_back(editor_plugins[i]);
 		}
@@ -292,7 +294,7 @@ Vector<EditorPlugin *> EditorData::get_subeditors(Object *p_object) {
 }
 
 EditorPlugin *EditorData::get_editor(String p_name) {
-	for (int i = 0; i < editor_plugins.size(); i++) {
+	for (int i = editor_plugins.size() - 1; i > -1; i--) {
 		if (editor_plugins[i]->get_name() == p_name) {
 			return editor_plugins[i];
 		}