2
0
Эх сурвалжийг харах

Merge pull request #36172 from Chaosus/vs_custom_highend

Added virtual method to VisualShaderNodeCustom to enable high-end mark
Rémi Verschelde 5 жил өмнө
parent
commit
d661ca5357

+ 8 - 0
doc/classes/VisualShaderNodeCustom.xml

@@ -143,6 +143,14 @@
 				Defining this method is [b]optional[/b]. If not overridden, the node will be filed under the root of the main category (see [method _get_category]).
 			</description>
 		</method>
+		<method name="_is_highend" qualifiers="virtual">
+			<return type="bool">
+			</return>
+			<description>
+				Override this method to enable high-end mark in the Visual Shader Editor's members dialog.
+				Defining this method is [b]optional[/b]. If not overridden, it's false.
+			</description>
+		</method>
 	</methods>
 	<constants>
 	</constants>

+ 9 - 2
editor/plugins/visual_shader_editor_plugin.cpp

@@ -116,7 +116,7 @@ void VisualShaderEditor::clear_custom_types() {
 	}
 }
 
-void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory) {
+void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory, bool p_highend) {
 
 	ERR_FAIL_COND(!p_name.is_valid_identifier());
 	ERR_FAIL_COND(!p_script.is_valid());
@@ -135,6 +135,7 @@ void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script>
 	ao.description = p_description;
 	ao.category = p_category;
 	ao.sub_category = p_subcategory;
+	ao.highend = p_highend;
 	ao.is_custom = true;
 
 	bool begin = false;
@@ -247,6 +248,11 @@ void VisualShaderEditor::update_custom_nodes() {
 				subcategory = (String)ref->call("_get_subcategory");
 			}
 
+			bool highend = false;
+			if (ref->has_method("_is_highend")) {
+				highend = (bool)ref->call("_is_highend");
+			}
+
 			Dictionary dict;
 			dict["name"] = name;
 			dict["script"] = script;
@@ -254,6 +260,7 @@ void VisualShaderEditor::update_custom_nodes() {
 			dict["return_icon_type"] = return_icon_type;
 			dict["category"] = category;
 			dict["subcategory"] = subcategory;
+			dict["highend"] = highend;
 
 			String key;
 			key = category;
@@ -277,7 +284,7 @@ void VisualShaderEditor::update_custom_nodes() {
 
 		const Dictionary &value = (Dictionary)added[key];
 
-		add_custom_type(value["name"], value["script"], value["description"], value["return_icon_type"], value["category"], value["subcategory"]);
+		add_custom_type(value["name"], value["script"], value["description"], value["return_icon_type"], value["category"], value["subcategory"], value["highend"]);
 	}
 
 	_update_options_menu();

+ 1 - 1
editor/plugins/visual_shader_editor_plugin.h

@@ -265,7 +265,7 @@ public:
 	static VisualShaderEditor *get_singleton() { return singleton; }
 
 	void clear_custom_types();
-	void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory);
+	void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory, bool p_highend);
 
 	virtual Size2 get_minimum_size() const;
 	void edit(VisualShader *p_visual_shader);

+ 1 - 0
scene/resources/visual_shader.cpp

@@ -276,6 +276,7 @@ void VisualShaderNodeCustom::_bind_methods() {
 	BIND_VMETHOD(MethodInfo(Variant::STRING, "_get_output_port_name", PropertyInfo(Variant::INT, "port")));
 	BIND_VMETHOD(MethodInfo(Variant::STRING, "_get_code", PropertyInfo(Variant::ARRAY, "input_vars"), PropertyInfo(Variant::ARRAY, "output_vars"), PropertyInfo(Variant::INT, "mode"), PropertyInfo(Variant::INT, "type")));
 	BIND_VMETHOD(MethodInfo(Variant::STRING, "_get_global_code", PropertyInfo(Variant::INT, "mode")));
+	BIND_VMETHOD(MethodInfo(Variant::BOOL, "_is_highend"));
 }
 
 VisualShaderNodeCustom::VisualShaderNodeCustom() {