mirror of
https://github.com/godotengine/godot.git
synced 2025-02-09 12:20:46 +00:00
Ability to pass custom variables to expression.
This commit is contained in:
parent
934c641a15
commit
a71a5fc0c3
@ -1350,12 +1350,27 @@ Expression::ENode *Expression::_parse_expression() {
|
|||||||
//named indexing
|
//named indexing
|
||||||
str_ofs = cofs;
|
str_ofs = cofs;
|
||||||
|
|
||||||
|
int input_index = -1;
|
||||||
|
for (int i = 0; i < input_names.size(); i++) {
|
||||||
|
if (input_names[i] == identifier) {
|
||||||
|
input_index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input_index != -1) {
|
||||||
|
InputNode *input = alloc_node<InputNode>();
|
||||||
|
input->index = input_index;
|
||||||
|
expr = input;
|
||||||
|
} else {
|
||||||
|
|
||||||
NamedIndexNode *index = alloc_node<NamedIndexNode>();
|
NamedIndexNode *index = alloc_node<NamedIndexNode>();
|
||||||
SelfNode *self_node = alloc_node<SelfNode>();
|
SelfNode *self_node = alloc_node<SelfNode>();
|
||||||
index->base = self_node;
|
index->base = self_node;
|
||||||
index->name = identifier;
|
index->name = identifier;
|
||||||
expr = index;
|
expr = index;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} break;
|
} break;
|
||||||
case TK_INPUT: {
|
case TK_INPUT: {
|
||||||
|
|
||||||
@ -2042,7 +2057,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error Expression::parse(const String &p_expression) {
|
Error Expression::parse(const String &p_expression, const Vector<String> &p_input_names) {
|
||||||
|
|
||||||
if (nodes) {
|
if (nodes) {
|
||||||
memdelete(nodes);
|
memdelete(nodes);
|
||||||
@ -2053,6 +2068,7 @@ Error Expression::parse(const String &p_expression) {
|
|||||||
error_str = String();
|
error_str = String();
|
||||||
error_set = false;
|
error_set = false;
|
||||||
str_ofs = 0;
|
str_ofs = 0;
|
||||||
|
input_names = p_input_names;
|
||||||
|
|
||||||
expression = p_expression;
|
expression = p_expression;
|
||||||
root = _parse_expression();
|
root = _parse_expression();
|
||||||
@ -2097,7 +2113,7 @@ String Expression::get_error_text() const {
|
|||||||
|
|
||||||
void Expression::_bind_methods() {
|
void Expression::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("parse", "expression"), &Expression::parse);
|
ClassDB::bind_method(D_METHOD("parse", "expression", "input_names"), &Expression::parse, DEFVAL(Vector<String>()));
|
||||||
ClassDB::bind_method(D_METHOD("execute", "inputs", "base_instance", "show_error"), &Expression::execute, DEFVAL(Array()), DEFVAL(NULL), DEFVAL(true));
|
ClassDB::bind_method(D_METHOD("execute", "inputs", "base_instance", "show_error"), &Expression::execute, DEFVAL(Array()), DEFVAL(NULL), DEFVAL(true));
|
||||||
ClassDB::bind_method(D_METHOD("has_execute_failed"), &Expression::has_execute_failed);
|
ClassDB::bind_method(D_METHOD("has_execute_failed"), &Expression::has_execute_failed);
|
||||||
ClassDB::bind_method(D_METHOD("get_error_text"), &Expression::get_error_text);
|
ClassDB::bind_method(D_METHOD("get_error_text"), &Expression::get_error_text);
|
||||||
|
@ -304,6 +304,8 @@ private:
|
|||||||
ENode *root;
|
ENode *root;
|
||||||
ENode *nodes;
|
ENode *nodes;
|
||||||
|
|
||||||
|
Vector<String> input_names;
|
||||||
|
|
||||||
bool execution_error;
|
bool execution_error;
|
||||||
bool _execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, String &r_error_str);
|
bool _execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, String &r_error_str);
|
||||||
|
|
||||||
@ -311,7 +313,7 @@ protected:
|
|||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Error parse(const String &p_expression);
|
Error parse(const String &p_expression, const Vector<String> &p_input_names = Vector<String>());
|
||||||
Variant execute(Array p_inputs, Object *p_base = NULL, bool p_show_error = true);
|
Variant execute(Array p_inputs, Object *p_base = NULL, bool p_show_error = true);
|
||||||
bool has_execute_failed() const;
|
bool has_execute_failed() const;
|
||||||
String get_error_text() const;
|
String get_error_text() const;
|
||||||
|
Loading…
Reference in New Issue
Block a user