Revive inspector property evaluation
GDScript was restricted to parse only scripts beginning with __res://__ or __user://__ to avoid templates from being parsed. I've made that a bit less inclusive by allowing scripts with an empty path to be parsed too, which doesn't conflict and is needed for this to work. Also I've removed the `this` variable of the generated script and made the relevant object to be the one the script instance refers to, so you can use `self` instead. Now, with the shorter 3.0-style syntax, you can write things like: `self.position.x + 10` Closes #9500.
This commit is contained in:
parent
6380975ee2
commit
ae2d449047
@ -4774,12 +4774,11 @@ double PropertyValueEvaluator::eval(const String &p_text) {
|
|||||||
return _default_eval(p_text);
|
return _default_eval(p_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptInstance *script_instance = script->instance_create(this);
|
ScriptInstance *script_instance = script->instance_create(obj);
|
||||||
if (!script_instance)
|
if (!script_instance)
|
||||||
return _default_eval(p_text);
|
return _default_eval(p_text);
|
||||||
|
|
||||||
Variant::CallError call_err;
|
Variant::CallError call_err;
|
||||||
script_instance->call("set_this", obj);
|
|
||||||
double result = script_instance->call("e", NULL, 0, call_err);
|
double result = script_instance->call("e", NULL, 0, call_err);
|
||||||
if (call_err.error == Variant::CallError::CALL_OK) {
|
if (call_err.error == Variant::CallError::CALL_OK) {
|
||||||
return result;
|
return result;
|
||||||
@ -4796,7 +4795,7 @@ void PropertyValueEvaluator::edit(Object *p_obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String PropertyValueEvaluator::_build_script(const String &p_text) {
|
String PropertyValueEvaluator::_build_script(const String &p_text) {
|
||||||
String script_text = "tool\nvar this\nfunc set_this(p_this):\n\tthis=p_this\nfunc e():\n\treturn ";
|
String script_text = "tool\nextends Object\nfunc e():\n\treturn ";
|
||||||
script_text += p_text.strip_edges();
|
script_text += p_text.strip_edges();
|
||||||
script_text += "\n";
|
script_text += "\n";
|
||||||
return script_text;
|
return script_text;
|
||||||
|
@ -615,7 +615,7 @@ Error GDScript::reload(bool p_keep_state) {
|
|||||||
if (basedir != "")
|
if (basedir != "")
|
||||||
basedir = basedir.get_base_dir();
|
basedir = basedir.get_base_dir();
|
||||||
|
|
||||||
if (basedir.find("res://") == -1 && basedir.find("user://") == -1) {
|
if (basedir != "" && basedir.find("res://") == -1 && basedir.find("user://") == -1) {
|
||||||
//loading a template, don't parse
|
//loading a template, don't parse
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user