From 048fdc8aeabbd80ba9cc8914ec7f7baa00ad0c3d Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 22 Sep 2014 00:50:48 -0300 Subject: -variables with export in script are now IMMEDIATELY AND ALWAYS visible in properties (#718) -WorldEnvironment cleanup issues fixed (#563) -Text Editor improvement to shift-mouse selection (#648) -(Hopefully) fixed rare (but horrible) indexing bug in GDScript compiler (#652) -Some changes to PhysicsBody API, renamed property "active" to "sleeping", which makes more sense -Added add_collision_exception() API in PhysicsBody (more accessible) -ability to select and copy in the output messages panel --- modules/gdscript/gd_script.cpp | 47 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'modules/gdscript/gd_script.cpp') diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp index 10053d4260..49d92e0746 100644 --- a/modules/gdscript/gd_script.cpp +++ b/modules/gdscript/gd_script.cpp @@ -1492,7 +1492,9 @@ Variant GDScript::_new(const Variant** p_args,int p_argcount,Variant::CallError& bool GDScript::can_instance() const { - return valid; //any script in GDscript can instance + //return valid; //any script in GDscript can instance + return valid || (!tool && !ScriptServer::is_scripting_enabled()); + } StringName GDScript::get_instance_base_type() const { @@ -1565,8 +1567,10 @@ void GDScript::_update_placeholder(PlaceHolderScriptInstance *p_placeholder) { #endif ScriptInstance* GDScript::instance_create(Object *p_this) { + if (!tool && !ScriptServer::is_scripting_enabled()) { + #ifdef TOOLS_ENABLED //instance a fake script for editing the values @@ -1620,7 +1624,48 @@ String GDScript::get_source_code() const { void GDScript::set_source_code(const String& p_code) { source=p_code; +} + +void GDScript::update_exports() { + +#ifdef TOOLS_ENABLED + String basedir=path; + + if (basedir=="") + basedir=get_path(); + + if (basedir!="") + basedir=basedir.get_base_dir(); + + GDParser parser; + Error err = parser.parse(source,basedir,true); + if (err) + return; //do none + const GDParser::Node* root = parser.get_parse_tree(); + ERR_FAIL_COND(root->type!=GDParser::Node::TYPE_CLASS); + + const GDParser::ClassNode *c = static_cast(root); + + List plist; + + Map default_values; + + for(int i=0;ivariables.size();i++) { + if (c->variables[i]._export.type==Variant::NIL) + continue; + + plist.push_back(c->variables[i]._export); + default_values[c->variables[i].identifier]=c->variables[i].default_value; + } + + + for (Set::Element *E=placeholders.front();E;E=E->next()) { + + E->get()->update(plist,default_values); + } + +#endif } void GDScript::_set_subclass_path(Ref& p_sc,const String& p_path) { -- cgit v1.2.3