Skip to content

Commit

Permalink
Merge pull request #27320 from karroffel/gdnative-terminate-error-print
Browse files Browse the repository at this point in the history
[GDNative] various NativeScript fixes around editor functionality
  • Loading branch information
karroffel authored Mar 25, 2019
2 parents e453934 + 5fff7f7 commit 8129266
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 22 deletions.
40 changes: 18 additions & 22 deletions modules/gdnative/nativescript/nativescript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,8 +160,10 @@ bool NativeScript::can_instance() const {
NativeScriptDesc *script_data = get_script_desc();

#ifdef TOOLS_ENABLED

return script_data || (!is_tool() && !ScriptServer::is_scripting_enabled());
// Only valid if this is either a tool script or a "regular" script.
// (so an environment whre scripting is disabled (and not the editor) would not
// create objects).
return script_data && (is_tool() || ScriptServer::is_scripting_enabled());
#else
return script_data;
#endif
Expand Down Expand Up @@ -199,25 +201,6 @@ ScriptInstance *NativeScript::instance_create(Object *p_this) {
return NULL;
}

#ifdef TOOLS_ENABLED
if (!ScriptServer::is_scripting_enabled() && !is_tool()) {
// placeholder for nodes. For tools we want the rool thing.

PlaceHolderScriptInstance *sins = memnew(PlaceHolderScriptInstance(NSL, Ref<Script>(this), p_this));
placeholders.insert(sins);

if (script_data->create_func.create_func) {
script_data->create_func.create_func(
(godot_object *)p_this,
script_data->create_func.method_data);
}

_update_placeholder(sins);

return sins;
}
#endif

NativeScriptInstance *nsi = memnew(NativeScriptInstance);

nsi->owner = p_this;
Expand Down Expand Up @@ -246,6 +229,19 @@ ScriptInstance *NativeScript::instance_create(Object *p_this) {
return nsi;
}

PlaceHolderScriptInstance *NativeScript::placeholder_instance_create(Object *p_this) {
#ifdef TOOLS_ENABLED
PlaceHolderScriptInstance *sins = memnew(PlaceHolderScriptInstance(NSL, Ref<Script>(this), p_this));
placeholders.insert(sins);

_update_placeholder(sins);

return sins;
#else
return NULL;
#endif
}

bool NativeScript::instance_has(const Object *p_this) const {
return instance_owners.has((Object *)p_this);
}
Expand Down Expand Up @@ -1691,7 +1687,7 @@ void NativeReloadNode::_notification(int p_what) {

// since singleton libraries are not unloaded there is no point
// in loading them again.
if (!gdn->get_library()->is_singleton()) {
if (gdn->get_library()->is_singleton()) {
continue;
}

Expand Down
1 change: 1 addition & 0 deletions modules/gdnative/nativescript/nativescript.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ class NativeScript : public Script {

virtual StringName get_instance_base_type() const; // this may not work in all scripts, will return empty if so
virtual ScriptInstance *instance_create(Object *p_this);
virtual PlaceHolderScriptInstance *placeholder_instance_create(Object *p_this);
virtual bool instance_has(const Object *p_this) const;

virtual bool has_source_code() const;
Expand Down

0 comments on commit 8129266

Please sign in to comment.