diff options
Diffstat (limited to 'scene/resources/packed_scene.cpp')
-rw-r--r-- | scene/resources/packed_scene.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index 43196a43d4..a9010e79a2 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -226,7 +226,7 @@ Node *SceneState::instance(bool p_gen_edit_state) const { node->add_to_group( snames[ n.groups[j] ], true ); } - if (n.instance>=0 || n.type!=TYPE_INSTANCED) { + if (n.instance>=0 || n.type!=TYPE_INSTANCED || i==0) { //if node was not part of instance, must set it's name, parenthood and ownership if (i>0) { if (parent) { @@ -239,7 +239,6 @@ Node *SceneState::instance(bool p_gen_edit_state) const { } else { node->_set_name_nocheck( snames[ n.name ] ); } - } if (n.owner>=0) { @@ -1317,11 +1316,23 @@ StringName SceneState::get_node_name(int p_idx) const { return names[nodes[p_idx].name]; } + +bool SceneState::is_node_instance_placeholder(int p_idx) const { + + ERR_FAIL_INDEX_V(p_idx,nodes.size(),false); + + return nodes[p_idx].instance>=0 && nodes[p_idx].instance&FLAG_INSTANCE_IS_PLACEHOLDER; + +} + Ref<PackedScene> SceneState::get_node_instance(int p_idx) const { ERR_FAIL_INDEX_V(p_idx,nodes.size(),Ref<PackedScene>()); if (nodes[p_idx].instance>=0) { - return variants[nodes[p_idx].instance]; + if (nodes[p_idx].instance&FLAG_INSTANCE_IS_PLACEHOLDER) + return Ref<PackedScene>(); + else + return variants[nodes[p_idx].instance&FLAG_MASK]; } else if (nodes[p_idx].parent<0 || nodes[p_idx].parent==NO_PARENT_SAVED) { if (base_scene_idx>=0) { @@ -1335,6 +1346,19 @@ Ref<PackedScene> SceneState::get_node_instance(int p_idx) const { } + +String SceneState::get_node_instance_placeholder(int p_idx) const { + + ERR_FAIL_INDEX_V(p_idx,nodes.size(),String()); + + if (nodes[p_idx].instance>=0 && nodes[p_idx].instance&FLAG_INSTANCE_IS_PLACEHOLDER) { + return variants[nodes[p_idx].instance&FLAG_MASK]; + } + + return String(); + +} + Vector<StringName> SceneState::get_node_groups(int p_idx) const{ ERR_FAIL_INDEX_V(p_idx,nodes.size(),Vector<StringName>()); Vector<StringName> groups; @@ -1578,6 +1602,8 @@ void SceneState::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_node_name","idx"),&SceneState::get_node_name); ObjectTypeDB::bind_method(_MD("get_node_path","idx","for_parent"),&SceneState::get_node_path,DEFVAL(false)); ObjectTypeDB::bind_method(_MD("get_node_owner_path","idx"),&SceneState::get_node_owner_path); + ObjectTypeDB::bind_method(_MD("is_node_instance_placeholder","idx"),&SceneState::is_node_instance_placeholder); + ObjectTypeDB::bind_method(_MD("get_node_instance_placeholder","idx"),&SceneState::get_node_instance_placeholder); ObjectTypeDB::bind_method(_MD("get_node_instance:PackedScene","idx"),&SceneState::get_node_instance); ObjectTypeDB::bind_method(_MD("get_node_groups","idx"),&SceneState::_get_node_groups); ObjectTypeDB::bind_method(_MD("get_node_property_count","idx"),&SceneState::get_node_property_count); |