diff --git a/modules/material_maker/nodes/other/output_image.cpp b/modules/material_maker/nodes/other/output_image.cpp index ee9d4f1db..aa05577a6 100644 --- a/modules/material_maker/nodes/other/output_image.cpp +++ b/modules/material_maker/nodes/other/output_image.cpp @@ -5,6 +5,14 @@ #include "../../editor/mm_graph_node.h" #include "../mm_material.h" +Ref MMOutputImage::get_input() { + return input; +} + +void MMOutputImage::set_input(const Ref &val) { + input = val; +} + Ref MMOutputImage::get_image() { return image; } @@ -23,19 +31,49 @@ void MMOutputImage::set_postfix(const String &val) { } void MMOutputImage::_init_properties() { - image.instance(); - image->set_default_type(MMNodeUniversalProperty::DEFAULT_TYPE_IMAGE); - image->set_input_slot_type(MMNodeUniversalProperty::SLOT_TYPE_UNIVERSAL); + if (!input.is_valid()) { + input.instance(); + input->set_default_type(MMNodeUniversalProperty::DEFAULT_TYPE_COLOR); + input->set_default_value(Color(0, 0, 0, 1)); + } + + input->set_input_slot_type(MMNodeUniversalProperty::SLOT_TYPE_UNIVERSAL); + input->set_slot_name(">>> Input "); + + if (!image.is_valid()) { + image.instance(); + image->set_default_type(MMNodeUniversalProperty::DEFAULT_TYPE_IMAGE); + } + image->set_slot_name("image"); - register_input_property(image); + + register_input_property(input); } void MMOutputImage::_register_methods(MMGraphNode *mm_graph_node) { + mm_graph_node->add_slot_label_universal(input); mm_graph_node->add_slot_texture_universal(image); mm_graph_node->add_slot_line_edit("get_postfix", "set_postfix", "postfix"); + mm_graph_node->add_slot_button("save", "Save"); } void MMOutputImage::_render(const Ref &material) { + _material_path = material->get_path(); + + Ref img = render_image(material); + image->set_value(img); +} + +Color MMOutputImage::_get_value_for(const Vector2 &uv, const int pseed) { + Color c = input->get_value(uv); + return c; +} + +void MMOutputImage::save() { + if (_material_path == "") { + return; + } + if (!image.is_valid()) { return; } @@ -46,13 +84,7 @@ void MMOutputImage::_render(const Ref &material) { return; } - String matpath = material->get_path(); - - if (matpath == "") { - return; - } - - String matbn = matpath.get_basename(); + String matbn = _material_path.get_basename(); String final_file_name = matbn + postfix + ".png"; img->save_png(final_file_name); } @@ -64,6 +96,10 @@ MMOutputImage::~MMOutputImage() { } void MMOutputImage::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_input"), &MMOutputImage::get_input); + ClassDB::bind_method(D_METHOD("set_input", "value"), &MMOutputImage::set_input); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "input", PROPERTY_HINT_RESOURCE_TYPE, "MMNodeUniversalProperty"), "set_input", "get_input"); + ClassDB::bind_method(D_METHOD("get_image"), &MMOutputImage::get_image); ClassDB::bind_method(D_METHOD("set_image", "value"), &MMOutputImage::set_image); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "image", PROPERTY_HINT_RESOURCE_TYPE, "MMNodeUniversalProperty"), "set_image", "get_image"); @@ -71,4 +107,6 @@ void MMOutputImage::_bind_methods() { ClassDB::bind_method(D_METHOD("get_postfix"), &MMOutputImage::get_postfix); ClassDB::bind_method(D_METHOD("set_postfix", "value"), &MMOutputImage::set_postfix); ADD_PROPERTY(PropertyInfo(Variant::STRING, "postfix"), "set_postfix", "get_postfix"); + + ClassDB::bind_method(D_METHOD("save"), &MMOutputImage::save); } diff --git a/modules/material_maker/nodes/other/output_image.h b/modules/material_maker/nodes/other/output_image.h index 142fe0bed..319ca97ee 100644 --- a/modules/material_maker/nodes/other/output_image.h +++ b/modules/material_maker/nodes/other/output_image.h @@ -8,6 +8,9 @@ class MMOutputImage : public MMNode { GDCLASS(MMOutputImage, MMNode); public: + Ref get_input(); + void set_input(const Ref &val); + Ref get_image(); void set_image(const Ref &val); @@ -17,6 +20,9 @@ public: void _init_properties(); void _register_methods(MMGraphNode *mm_graph_node); void _render(const Ref &material); + Color _get_value_for(const Vector2 &uv, const int pseed); + + void save(); MMOutputImage(); ~MMOutputImage(); @@ -24,8 +30,10 @@ public: protected: static void _bind_methods(); + Ref input; Ref image; String postfix; + String _material_path; }; #endif