Second round of cleanups to MMGraphNode.

This commit is contained in:
Relintai 2022-06-07 17:44:25 +02:00
parent 0d5514856f
commit 4f6a2df5a5
2 changed files with 675 additions and 642 deletions

View File

@ -102,7 +102,7 @@ int MMGraphNode::add_slot_texture(const String &getter, const String &setter) {
t->set_stretch_mode(TextureRect::STRETCH_KEEP_ASPECT_CENTERED);
int slot_idx = add_slot(MMNodeUniversalProperty::SLOT_TYPE_NONE, MMNodeUniversalProperty::SLOT_TYPE_NONE, getter, setter, t);
t->set_texture(_node->call(getter, _material, slot_idx));
properties[slot_idx].append(t->get_texture());
properties.write[slot_idx].texture = t->get_texture();
return slot_idx;
}
@ -121,7 +121,7 @@ int MMGraphNode::add_slot_texture_universal(const Ref<MMNodeUniversalProperty> &
}
t->set_texture(tex);
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
property.connect("changed", self, "on_universal_texture_changed", [slot_idx]);
return slot_idx;
}
@ -199,7 +199,7 @@ int MMGraphNode::add_slot_color_universal(const Ref<MMNodeUniversalProperty> &pr
ColorPickerButton *cp = memnew(ColorPickerButton);
int slot_idx = add_slot(property.input_slot_type, property.output_slot_type, "", "", cp);
cp->set_color(property->get_default_value());
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
cp->connect("color_changed", this, "on_universal_color_changed", [slot_idx]);
return slot_idx;
}
@ -235,8 +235,9 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
OptionButton *mb = memnew(OptionButton);
for (v in values) {
mb.add_item(v);
for (int i = 0; i < values.size(); ++i) {
String v = values[i];
mb->add_item(v);
}
bc->add_child(mb);
@ -246,7 +247,7 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
return slot_idx;
}
int MMGraphNode::add_slot_int(const String &getter, const String &setter, const String &slot_name, const Vector2 &prange, const Variant & 1000)) {
int MMGraphNode::add_slot_int(const String &getter, const String &setter, const String &slot_name, const Vector2 &prange) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(slot_name);
@ -260,26 +261,26 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
sb->set_value(_node->call(getter));
sb->connect("value_changed", this, "on_int_spinbox_value_changed", [slot_idx]);
return slot_idx;
}
}
int MMGraphNode::add_slot_bool(const String &getter, const String &setter, const String &slot_name) {
int MMGraphNode::add_slot_bool(const String &getter, const String &setter, const String &slot_name) {
CheckBox *cb = memnew(CheckBox);
cb->set_text(slot_name);
int slot_idx = add_slot(MMNodeUniversalProperty::SLOT_TYPE_NONE, MMNodeUniversalProperty::SLOT_TYPE_NONE, getter, setter, cb);
cb->set_pressed(_node->call(getter));
cb->connect("toggled", _node, setter);
return slot_idx;
}
}
int MMGraphNode::add_slot_label_universal(const Ref<MMNodeUniversalProperty> &property) {
int MMGraphNode::add_slot_label_universal(const Ref<MMNodeUniversalProperty> &property) {
Label *l = memnew(Label);
l->set_text(property.slot_name);
int slot_idx = add_slot(property->input_slot_type, property->output_slot_type, "", "", l);
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
return slot_idx;
}
}
int MMGraphNode::add_slot_int_universal(const Ref<MMNodeUniversalProperty> &property) {
int MMGraphNode::add_slot_int_universal(const Ref<MMNodeUniversalProperty> &property) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(property->slot_name);
@ -292,11 +293,11 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
int slot_idx = add_slot(property->input_slot_type, property->output_slot_type, "", "", bc);
sb->set_value(property->get_default_value());
sb->connect("value_changed", this, "on_int_universal_spinbox_value_changed", [slot_idx]);
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
return slot_idx;
}
}
int MMGraphNode::add_slot_float(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange, const Variant & 1000)) {
int MMGraphNode::add_slot_float(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(slot_name);
@ -311,9 +312,9 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
sb->set_value(_node->call(getter));
sb->connect("value_changed", this, "on_float_spinbox_value_changed", [slot_idx]);
return slot_idx;
}
}
int MMGraphNode::add_slot_float_universal(const Ref<MMNodeUniversalProperty> &property) {
int MMGraphNode::add_slot_float_universal(const Ref<MMNodeUniversalProperty> &property) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(property->slot_name);
@ -326,12 +327,12 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
sb->set_min_value(property->value_range.x);
sb->set_max_value(property->value_range.y);
sb->set_value(property.get_default_value());
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
sb->connect("value_changed", this, "on_float_universal_spinbox_value_changed", [slot_idx]);
return slot_idx;
}
}
int MMGraphNode::add_slot_vector2(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange) {
int MMGraphNode::add_slot_vector2(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(slot_name);
@ -355,9 +356,9 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
sbx->connect("value_changed", this, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ]);
sby->connect("value_changed", this, "on_vector2_spinbox_value_changed", [ slot_idx, sbx, sby ]);
return slot_idx;
}
}
int MMGraphNode::add_slot_vector3(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange, const Variant & 1000)) {
int MMGraphNode::add_slot_vector3(const String &getter, const String &setter, const String &slot_name, const float step, const Vector2 &prange) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l->set_text(slot_name);
@ -389,9 +390,9 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
sby->connect("value_changed", this, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ]);
sbz->connect("value_changed", this, "on_vector3_spinbox_value_changed", [ slot_idx, sbx, sby, sbz ]);
return slot_idx;
}
}
int MMGraphNode::add_slot_vector2_universal(const Ref<MMNodeUniversalProperty> &property) {
int MMGraphNode::add_slot_vector2_universal(const Ref<MMNodeUniversalProperty> &property) {
VBoxContainer *bc = memnew(VBoxContainer);
Label *l = memnew(Label);
l.text = property->slot_name;
@ -412,15 +413,26 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
Vector2 val = property->get_default_value();
sbx.set_value(val.x);
sby.set_value(val.y);
properties[slot_idx].append(property);
properties.write[slot_idx].universal_property = property;
sbx.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ]);
sby.connect("value_changed", self, "on_vector2_universal_spinbox_value_changed", [ slot_idx, sbx, sby ]);
return slot_idx;
}
}
int MMGraphNode::add_slot(const int input_type, const int output_type, const String &getter, const String &setter, Control *control) {
int MMGraphNode::add_slot(const int input_type, const int output_type, const String &getter, const String &setter, Control *control) {
add_child(control);
int slot_idx = get_child_count() - 1;
MMGraphNodeEntry e;
e.slot_idx = slot_idx;
e.input_type = input_type;
e.output_type = output_type;
e.getter = getter;
e.setter = setter;
e.control = control;
properties.push_back(arr);
/*
Array arr;
arr.append(slot_idx);
arr.append(input_type);
@ -429,6 +441,8 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
arr.append(setter);
arr.append(control);
properties.append(arr);
*/
set_slot_enabled_left(slot_idx, input_type != -1);
set_slot_enabled_right(slot_idx, output_type != -1);
@ -443,14 +457,14 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
}
return slot_idx;
}
}
bool MMGraphNode::connect_slot(const int slot_idx, const Node *to_node, const int to_slot_idx) {
bool MMGraphNode::connect_slot(const int slot_idx, const Node *to_node, const int to_slot_idx) {
int from_property_index = -1;
int to_property_index = -1;
for (int i = 0; i < properties.size(); ++i) { //i in range(properties.size())
if (properties[i][2] != -1) {
if (properties[i].output_type != -1) {
from_property_index += 1;
if (from_property_index == slot_idx) {
@ -461,7 +475,7 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
}
for (int i = 0; i < to_node.properties.size(); ++i) { //i in range(to_node.properties.size())
if (to_node.properties[i][1] != -1) {
if (to_node.properties[i].input_type != -1) {
to_property_index += 1;
if (to_property_index == to_slot_idx) {
@ -474,19 +488,19 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
}
_undo_redo->create_action("MMGD: connect_slot");
_undo_redo->add_do_method(to_node->properties[to_property_index][6], "set_input_property", properties[from_property_index][6]);
_undo_redo->add_undo_method(to_node->properties[to_property_index][6], "set_input_property", to_node->properties[to_property_index][6].input_property);
_undo_redo->add_do_method(to_node->properties[to_property_index].universal_property, "set_input_property", properties[from_property_index].universal_property);
_undo_redo->add_undo_method(to_node->properties[to_property_index].universal_property, "set_input_property", to_node->properties[to_property_index].universal_property->input_property);
_undo_redo->commit_action();
return true;
}
}
bool MMGraphNode::disconnect_slot(const int slot_idx, const Node *to_node, const int to_slot_idx) {
bool MMGraphNode::disconnect_slot(const int slot_idx, const Node *to_node, const int to_slot_idx) {
int from_property_index = -1;
int to_property_index = -1;
for (int i = 0; i < properties.size(); ++i) { //i in range(properties.size())
if (properties[i][2] != -1) {
if (properties[i].output_type != -1) {
from_property_index += 1;
if (from_property_index == slot_idx) {
@ -498,7 +512,7 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
for (int i = 0; i < to_node.properties.size(); ++i) { //i in range(to_node.properties.size())
if (to_node.properties[i][1] != -1) {
if (to_node.properties[i].input_type != -1) {
to_property_index += 1;
if (to_property_index == to_slot_idx) {
@ -511,51 +525,51 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
}
_undo_redo->create_action("MMGD: disconnect_slot");
_undo_redo->add_do_method(to_node->properties[to_property_index][6], "unset_input_property");
_undo_redo->add_undo_method(to_node->properties[to_property_index][6], "set_input_property", to_node->properties[to_property_index][6].input_property);
_undo_redo->add_do_method(to_node->properties[to_property_index].universal_property, "unset_input_property");
_undo_redo->add_undo_method(to_node->properties[to_property_index].universal_property, "set_input_property", to_node->properties[to_property_index].universal_property->input_property);
_undo_redo->commit_action();
return true;
}
}
int MMGraphNode::get_input_property_graph_node_slot_index(const Variant &property) {
int MMGraphNode::get_input_property_graph_node_slot_index(const Variant &property) {
int property_index = -1;
for (int i = 0; i < properties.size(); ++i) { //i in range(properties.size())
if (properties[i][1] != -1) {
if (properties[i].input_type != -1) {
property_index += 1;
if (properties[i][6] == property) {
if (properties[i].universal_property == property) {
break;
}
}
}
return property_index;
}
}
int MMGraphNode::get_output_property_graph_node_slot_index(const Variant &property) {
int MMGraphNode::get_output_property_graph_node_slot_index(const Variant &property) {
int property_index = -1;
for (int i = 0; i < properties.size(); ++i) { //i in range(properties.size())
if (properties[i][2] != -1) {
if (properties[i].output_type != -1) {
property_index += 1;
if (properties[i][6] == property) {
if (properties[i].universal_property == property) {
break;
}
}
}
return property_index;
}
}
Node MMGraphNode::get_property_control(const int slot_idx) {
return properties[slot_idx][5];
}
Node MMGraphNode::get_property_control(const int slot_idx) {
return properties[slot_idx].control;
}
void MMGraphNode::set_node(const Ref<MMMaterial> &material, const Ref<MMNode> &node) {
void MMGraphNode::set_node(const Ref<MMMaterial> &material, const Ref<MMNode> &node) {
_node = node;
_material = material;
@ -573,12 +587,12 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
offset = _node.get_graph_position();
//_node.connect("changed", self, "on_node_changed");
}
}
void MMGraphNode::propagate_node_change() {
}
void MMGraphNode::propagate_node_change() {
}
void MMGraphNode::on_dragged(const Vector2 &from, const Vector2 &to) {
void MMGraphNode::on_dragged(const Vector2 &from, const Vector2 &to) {
if (_node) {
ignore_changes(true);
//_node.set_graph_position(offset);
@ -588,157 +602,157 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
_undo_redo->commit_action();
ignore_changes(false);
}
}
}
//func on_node_changed():;
// if _ignore_change_event:;
// return;
//;
// _ignore_change_event = true;
// propagate_node_change();
// _ignore_change_event = false;
//func on_node_changed():;
// if _ignore_change_event:;
// return;
//;
// _ignore_change_event = true;
// propagate_node_change();
// _ignore_change_event = false;
void MMGraphNode::on_int_spinbox_value_changed(const float val, const Variant &slot_idx) {
void MMGraphNode::on_int_spinbox_value_changed(const float val, const Variant &slot_idx) {
//_node.call(properties[slot_idx][4], int(val));
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], int(val));
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, int(val));
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx].getter));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_float_spinbox_value_changed(const float val, const Variant &slot_idx) {
void MMGraphNode::on_float_spinbox_value_changed(const float val, const Variant &slot_idx) {
//_node.call(properties[slot_idx][4], val);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], val);
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, val);
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx].getter));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_vector2_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y) {
void MMGraphNode::on_vector2_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y) {
Vector2 vv = Vector2(spinbox_x.value, spinbox_y.value);
//_node.call(properties[slot_idx][4], vv);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], vv);
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, vv);
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx].getter));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_vector3_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y, const Variant &spinbox_z) {
void MMGraphNode::on_vector3_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y, const Variant &spinbox_z) {
Vector3 vv = Vector3(spinbox_x.value, spinbox_y.value, spinbox_z.value);
//_node.call(properties[slot_idx][4], vv);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], vv);
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, vv);
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx][3]));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_int_universal_spinbox_value_changed(const float val, const Variant &slot_idx) {
void MMGraphNode::on_int_universal_spinbox_value_changed(const float val, const Variant &slot_idx) {
//properties[slot_idx][6].set_default_value(int(val));
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(properties[slot_idx][6], "set_default_value", int(val));
_undo_redo->add_undo_method(properties[slot_idx][6], "set_default_value", properties[slot_idx][6].get_default_value());
_undo_redo->add_do_method(properties[slot_idx].universal_property, "set_default_value", int(val));
_undo_redo->add_undo_method(properties[slot_idx].universal_property, "set_default_value", properties[slot_idx].universal_property->get_default_value());
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_float_universal_spinbox_value_changed(const float val, const Variant &slot_idx) {
void MMGraphNode::on_float_universal_spinbox_value_changed(const float val, const Variant &slot_idx) {
//properties[slot_idx][6].set_default_value(val);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(properties[slot_idx][6], "set_default_value", val);
_undo_redo->add_undo_method(properties[slot_idx][6], "set_default_value", properties[slot_idx][6].get_default_value());
_undo_redo->add_do_method(properties[slot_idx].universal_property, "set_default_value", val);
_undo_redo->add_undo_method(properties[slot_idx].universal_property, "set_default_value", properties[slot_idx].universal_property->get_default_value());
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_vector2_universal_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y) {
void MMGraphNode::on_vector2_universal_spinbox_value_changed(const float val, const Variant &slot_idx, const Variant &spinbox_x, const Variant &spinbox_y) {
Vector2 vv = Vector2(spinbox_x.value, spinbox_y.value);
//properties[slot_idx][6].set_default_value(vv);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(properties[slot_idx][6], "set_default_value", vv);
_undo_redo->add_undo_method(properties[slot_idx][6], "set_default_value", properties[slot_idx][6].get_default_value());
_undo_redo->add_do_method(properties[slot_idx].universal_property, "set_default_value", vv);
_undo_redo->add_undo_method(properties[slot_idx].universal_property, "set_default_value", properties[slot_idx].universal_property->get_default_value());
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_slot_enum_item_selected(const int val, const int slot_idx) {
void MMGraphNode::on_slot_enum_item_selected(const int val, const int slot_idx) {
//_node.call(properties[slot_idx][4], val);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], val);
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, val);
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx].getter));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_universal_texture_changed(const int slot_idx) {
void MMGraphNode::on_universal_texture_changed(const int slot_idx) {
ignore_changes(true);
Ref<Image> img = properties[slot_idx][6].get_active_image();
Ref<ImageTexture> tex = properties[slot_idx][5].texture;
Ref<Image> img = properties[slot_idx].universal_property.get_active_image();
Ref<ImageTexture> tex = properties[slot_idx].control->get_texture();
if (img) {
properties[slot_idx][5].texture.create_from_image(img, 0);
}
properties[slot_idx][5].texture = ImageTexture.new();
properties[slot_idx].control->get_texture()->create_from_image(img, 0);
}
properties[slot_idx].control->set_texture(ImageTexture.new());
}
ignore_changes(false);
}
ignore_changes(false);
}
void MMGraphNode::on_universal_texture_changed_image_picker(const int slot_idx) {
void MMGraphNode::on_universal_texture_changed_image_picker(const int slot_idx) {
ignore_changes(true);
Ref<Image> img = properties[slot_idx][6].get_active_image();
Ref<ImageTexture> tex = properties[slot_idx][5].texture_normal;
Ref<Image> img = properties[slot_idx].universal_property->get_active_image();
Ref<ImageTexture> tex = properties[slot_idx].control->get_texture_normal();
if (img.is_valid()) {
properties[slot_idx][5].texture_normal.create_from_image(img, 0);
properties[slot_idx].control->get_texture_normal().create_from_image(img, 0);
} else {
}
ignore_changes(false);
}
}
void MMGraphNode::on_slot_line_edit_text_entered(const String &text, const int slot_idx) {
void MMGraphNode::on_slot_line_edit_text_entered(const String &text, const int slot_idx) {
//_node.call(properties[slot_idx][4], text);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(_node, properties[slot_idx][4], text);
_undo_redo->add_undo_method(_node, properties[slot_idx][4], _node.call(properties[slot_idx][3]));
_undo_redo->add_do_method(_node, properties[slot_idx].setter, text);
_undo_redo->add_undo_method(_node, properties[slot_idx].setter, _node.call(properties[slot_idx].getter));
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_universal_color_changed(const Color &c, const int slot_idx) {
void MMGraphNode::on_universal_color_changed(const Color &c, const int slot_idx) {
//properties[slot_idx][6].set_default_value(c);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(properties[slot_idx][6], "set_default_value", c);
_undo_redo->add_undo_method(properties[slot_idx][6], "set_default_value", properties[slot_idx][6].get_default_value());
_undo_redo->add_do_method(properties[slot_idx].universal_property, "set_default_value", c);
_undo_redo->add_undo_method(properties[slot_idx].universal_property, "set_default_value", properties[slot_idx].universal_property->get_default_value());
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_universal_image_path_changed(const String &f, const int slot_idx) {
void MMGraphNode::on_universal_image_path_changed(const String &f, const int slot_idx) {
_node.call(properties[slot_idx][8], f);
ignore_changes(true);
_undo_redo->create_action("MMGD: value changed");
_undo_redo->add_do_method(properties[slot_idx][6], "set_default_value", f);
_undo_redo->add_undo_method(properties[slot_idx][6], "set_default_value", properties[slot_idx][6].get_default_value());
_undo_redo->add_do_method(properties[slot_idx].universal_property, "set_default_value", f);
_undo_redo->add_undo_method(properties[slot_idx].universal_property, "set_default_value", properties[slot_idx].universal_property->get_default_value());
_undo_redo->commit_action();
ignore_changes(false);
}
}
void MMGraphNode::on_close_request() {
void MMGraphNode::on_close_request() {
Node *n = get_parent();
while (n) {
@ -749,13 +763,13 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
n = n.get_parent();
}
}
}
Color MMGraphNode::get_slot_color(const int slot_type) {
Color MMGraphNode::get_slot_color(const int slot_type) {
return _get_slot_color(slot_type);
}
}
Color MMGraphNode::_get_slot_color(const int slot_type) {
Color MMGraphNode::_get_slot_color(const int slot_type) {
if (slot_type == 0) {
return Color(0.91, 0.06, 0.06);
} else if (slot_type == 1) {
@ -773,9 +787,9 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
}
return Color(1, 1, 1, 1);
}
}
MMGraphNode::MMGraphNode() {
MMGraphNode::MMGraphNode() {
//var gradient_editor_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn");
//var polygon_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn");
//var curve_edit_scene : PackedScene = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn");
@ -783,12 +797,12 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
_editor_node = nullptr;
_undo_redo = nullptr;
_ignore_change_event = false;
}
}
MMGraphNode::~MMGraphNode() {
}
MMGraphNode::~MMGraphNode() {
}
void MMGraphNode::_bind_methods() {
void MMGraphNode::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_gradient_editor_scene"), &MMGraphNode::get_gradient_editor_scene);
ClassDB::bind_method(D_METHOD("set_gradient_editor_scene", "value"), &MMGraphNode::set_gradient_editor_scene);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "gradient_editor_scene", PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"), "set_gradient_editor_scene", "get_gradient_editor_scene");
@ -880,4 +894,4 @@ int MMGraphNode::add_slot_enum(const String &getter, const String &setter, const
ClassDB::bind_method(D_METHOD("get_slot_color", "slot_type"), &MMGraphNode::get_slot_color);
ClassDB::bind_method(D_METHOD("_get_slot_color", "slot_type"), &MMGraphNode::_get_slot_color);
}
}

View File

@ -3,14 +3,15 @@
#include "core/math/vector2.h"
#include "core/reference.h"
#include "core/undo_redo.h"
#include "core/ustring.h"
#include "core/vector.h"
#include "scene/gui/graph_node.h"
class MMMaterial;
class MMNode;
class PackedScene;
class UndoRedo;
class MatMakerGDEditor;
class MMNodeUniversalProperty;
@ -109,12 +110,30 @@ public:
protected:
static void _bind_methods();
struct MMGraphNodeEntry {
int slot_idx;
int input_type;
int output_type;
String getter;
String setter;
Control *control;
Ref<MMGraphNodeEntry> universal_property;
Ref<Texture> texture;
MMGraphNodeEntry() {
slot_idx = 0;
input_type = 0;
output_type = 0;
control = nullptr;
}
};
Ref<PackedScene> gradient_editor_scene; // = preload("res://addons/mat_maker_gd/widgets/gradient_editor/gradient_editor.tscn");
Ref<PackedScene> polygon_edit_scene; // = preload("res://addons/mat_maker_gd/widgets/polygon_edit/polygon_edit.tscn");
Ref<PackedScene> curve_edit_scene; // = preload("res://addons/mat_maker_gd/widgets/curve_edit/curve_edit.tscn");
Ref<MMMaterial> _material;
Ref<MMNode> _node;
Array properties;
Vector<MMGraphNodeEntry> properties;
MatMakerGDEditor *_editor_node;
UndoRedo *_undo_redo;
bool _ignore_change_event;