diff options
Diffstat (limited to 'scene/resources/packed_scene.cpp')
-rw-r--r-- | scene/resources/packed_scene.cpp | 83 |
1 files changed, 82 insertions, 1 deletions
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp index 896b4fb2fa..863f2be699 100644 --- a/scene/resources/packed_scene.cpp +++ b/scene/resources/packed_scene.cpp @@ -1280,15 +1280,18 @@ StringName SceneState::get_node_name(int p_idx) const { 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]; - } else if (nodes[p_idx].parent<=0 || nodes[p_idx].parent==NO_PARENT_SAVED) { + } else if (nodes[p_idx].parent<0 || nodes[p_idx].parent==NO_PARENT_SAVED) { if (base_scene_idx>=0) { return variants[base_scene_idx]; } } + + return Ref<PackedScene>(); @@ -1438,6 +1441,84 @@ Array SceneState::get_connection_binds(int p_idx) const { Vector<NodePath> SceneState::get_editable_instances() const { return editable_instances; } +//add + +int SceneState::add_name(const StringName& p_name) { + + names.push_back(p_name); + return names.size()-1; +} + +int SceneState::add_value(const Variant& p_value) { + + variants.push_back(p_value); + return variants.size()-1; +} + +int SceneState::add_node_path(const NodePath& p_path){ + + node_paths.push_back(p_path); + return (node_paths.size()-1)|FLAG_ID_IS_PATH; +} +int SceneState::add_node(int p_parent,int p_owner,int p_type,int p_name, int p_instance){ + + NodeData nd; + nd.parent=p_parent; + nd.owner=p_owner; + nd.type=p_type; + nd.name=p_name; + nd.instance=p_instance; + + nodes.push_back(nd); + + return nodes.size()-1; +} +void SceneState::add_node_property(int p_node,int p_name,int p_value){ + + ERR_FAIL_INDEX(p_node,nodes.size()); + ERR_FAIL_INDEX(p_name,names.size()); + ERR_FAIL_INDEX(p_value,variants.size()); + + NodeData::Property prop; + prop.name=p_name; + prop.value=p_value; + nodes[p_node].properties.push_back(prop); +} +void SceneState::add_node_group(int p_node,int p_group){ + + ERR_FAIL_INDEX(p_node,nodes.size()); + ERR_FAIL_INDEX(p_group,names.size()); + nodes[p_node].groups.push_back(p_group); + +} +void SceneState::set_base_scene(int p_idx){ + + ERR_FAIL_INDEX(p_idx,variants.size()); + base_scene_idx=p_idx; +} +void SceneState::add_connection(int p_from,int p_to, int p_signal, int p_method, int p_flags,const Vector<int>& p_binds){ + + ERR_FAIL_INDEX(p_signal,names.size()); + ERR_FAIL_INDEX(p_method,names.size()); + + for(int i=0;i<p_binds.size();i++) { + ERR_FAIL_INDEX(p_binds[i],variants.size()); + } + ConnectionData c; + c.from=p_from; + c.to=p_to; + c.signal=p_signal; + c.method=p_method; + c.flags=p_flags; + c.binds=p_binds; + connections.push_back(c); + +} +void SceneState::add_editable_instance(const NodePath& p_path){ + + editable_instances.push_back(p_path); +} + SceneState::SceneState() { |