-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
This commit is contained in:
Juan Linietsky 2014-09-22 00:50:48 -03:00
parent f195bf673f
commit 048fdc8aea
18 changed files with 236 additions and 69 deletions

View file

@ -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<const GDParser::ClassNode*>(root);
List<PropertyInfo> plist;
Map<StringName,Variant> default_values;
for(int i=0;i<c->variables.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<PlaceHolderScriptInstance*>::Element *E=placeholders.front();E;E=E->next()) {
E->get()->update(plist,default_values);
}
#endif
}
void GDScript::_set_subclass_path(Ref<GDScript>& p_sc,const String& p_path) {