From fcf52303c52901bf4844e0491538402672b71be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Thu, 17 Aug 2017 02:17:18 +0200 Subject: [PATCH] Fix/improve property evaluator Evolution of #10366 based on what has been discussed there. Now you can refer to the relevant object either by `self` or `s`. No conflicts with a potential `tool` script attached to the object. Proper cleanup since a dummy object is used to have an instance and the temporary script dies with it. --- editor/property_editor.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index d6c1407b62f..2f47d3e130b 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -4774,19 +4774,20 @@ double PropertyValueEvaluator::eval(const String &p_text) { return _default_eval(p_text); } - ScriptInstance *script_instance = script->instance_create(obj); + Object dummy; + ScriptInstance *script_instance = script->instance_create(&dummy); if (!script_instance) return _default_eval(p_text); Variant::CallError call_err; - double result = script_instance->call("e", NULL, 0, call_err); + Variant arg = obj; + const Variant *args[] = { &arg }; + double result = script_instance->call("eval", args, 1, call_err); if (call_err.error == Variant::CallError::CALL_OK) { return result; } print_line("[PropertyValueEvaluator]: Error eval! Error code: " + itos(call_err.error)); - memdelete(script_instance); - return _default_eval(p_text); } @@ -4795,9 +4796,8 @@ void PropertyValueEvaluator::edit(Object *p_obj) { } String PropertyValueEvaluator::_build_script(const String &p_text) { - String script_text = "tool\nextends Object\nfunc e():\n\treturn "; - script_text += p_text.strip_edges(); - script_text += "\n"; + String script_text = + "tool\nextends Object\nfunc eval(s):\n\tself = s\n\treturn " + p_text.strip_edges() + "\n"; return script_text; }