1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-23 15:16:17 +00:00

Keep property values when extending script

(cherry picked from commit 44cf3c22ac)
This commit is contained in:
Tomasz Chabora
2020-10-25 22:32:32 +01:00
committed by Haoyu Qiu
parent daa4be06b0
commit 4951f50b0f
4 changed files with 69 additions and 13 deletions

View File

@@ -2050,16 +2050,24 @@ void SceneTreeDock::_script_created(Ref<Script> p_script) {
return;
}
editor_data->get_undo_redo().create_action(TTR("Attach Script"));
InspectorDock *inspector_dock = EditorNode::get_singleton()->get_inspector_dock();
UndoRedo &undo_redo = editor_data->get_undo_redo();
undo_redo.create_action(TTR("Attach Script"));
for (List<Node *>::Element *E = selected.front(); E; E = E->next()) {
Ref<Script> existing = E->get()->get_script();
editor_data->get_undo_redo().add_do_method(E->get(), "set_script", p_script.get_ref_ptr());
editor_data->get_undo_redo().add_undo_method(E->get(), "set_script", existing);
editor_data->get_undo_redo().add_do_method(this, "_update_script_button");
editor_data->get_undo_redo().add_undo_method(this, "_update_script_button");
Node *node = E->get();
Ref<Script> existing = node->get_script();
undo_redo.add_do_method(inspector_dock, "store_script_properties", node);
undo_redo.add_undo_method(inspector_dock, "store_script_properties", node);
undo_redo.add_do_method(node, "set_script", p_script.get_ref_ptr());
undo_redo.add_undo_method(node, "set_script", existing);
undo_redo.add_do_method(inspector_dock, "apply_script_properties", node);
undo_redo.add_undo_method(inspector_dock, "apply_script_properties", node);
undo_redo.add_do_method(this, "_update_script_button");
undo_redo.add_undo_method(this, "_update_script_button");
}
editor_data->get_undo_redo().commit_action();
undo_redo.commit_action();
_push_item(p_script.operator->());
_update_script_button();
@@ -2706,12 +2714,19 @@ void SceneTreeDock::_script_dropped(String p_file, NodePath p_to) {
ERR_FAIL_COND(!scr.is_valid());
Node *n = get_node(p_to);
if (n) {
editor_data->get_undo_redo().create_action(TTR("Attach Script"));
editor_data->get_undo_redo().add_do_method(n, "set_script", scr);
editor_data->get_undo_redo().add_undo_method(n, "set_script", n->get_script());
editor_data->get_undo_redo().add_do_method(this, "_update_script_button");
editor_data->get_undo_redo().add_undo_method(this, "_update_script_button");
editor_data->get_undo_redo().commit_action();
InspectorDock *inspector_dock = EditorNode::get_singleton()->get_inspector_dock();
UndoRedo &undo_redo = editor_data->get_undo_redo();
undo_redo.create_action(TTR("Attach Script"));
undo_redo.add_do_method(inspector_dock, "store_script_properties", n);
undo_redo.add_undo_method(inspector_dock, "store_script_properties", n);
undo_redo.add_do_method(n, "set_script", scr);
undo_redo.add_undo_method(n, "set_script", n->get_script());
undo_redo.add_do_method(inspector_dock, "apply_script_properties", n);
undo_redo.add_undo_method(inspector_dock, "apply_script_properties", n);
undo_redo.add_do_method(this, "_update_script_button");
undo_redo.add_undo_method(this, "_update_script_button");
undo_redo.commit_action();
}
}