summaryrefslogtreecommitdiff
path: root/scene/resources/packed_scene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/resources/packed_scene.cpp')
-rw-r--r--scene/resources/packed_scene.cpp68
1 files changed, 37 insertions, 31 deletions
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index 648900a5cd..4dfc23fa67 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -242,7 +242,8 @@ Node *SceneState::instance(GenEditState p_edit_state) const {
value = local_dupe;
}
- res->setup_local_to_scene();
+ //this here may reference nodes not iniialized so this line is commented and used after loading all nodes
+ //res->setup_local_to_scene();
}
//must make a copy, because this res is local to scene
}
@@ -293,6 +294,11 @@ Node *SceneState::instance(GenEditState p_edit_state) const {
}
}
+ for (Map<Ref<Resource>, Ref<Resource> >::Element *E = resources_local_to_scene.front(); E; E = E->next()) {
+
+ E->get()->setup_local_to_scene();
+ }
+
//do connections
int cc = connections.size();
@@ -1127,26 +1133,26 @@ bool SceneState::is_connection(int p_node, const StringName &p_signal, int p_to_
return false;
}
-void SceneState::set_bundled_scene(const Dictionary &d) {
+void SceneState::set_bundled_scene(const Dictionary &p_dictionary) {
- ERR_FAIL_COND(!d.has("names"));
- ERR_FAIL_COND(!d.has("variants"));
- ERR_FAIL_COND(!d.has("node_count"));
- ERR_FAIL_COND(!d.has("nodes"));
- ERR_FAIL_COND(!d.has("conn_count"));
- ERR_FAIL_COND(!d.has("conns"));
- //ERR_FAIL_COND( !d.has("path"));
+ ERR_FAIL_COND(!p_dictionary.has("names"));
+ ERR_FAIL_COND(!p_dictionary.has("variants"));
+ ERR_FAIL_COND(!p_dictionary.has("node_count"));
+ ERR_FAIL_COND(!p_dictionary.has("nodes"));
+ ERR_FAIL_COND(!p_dictionary.has("conn_count"));
+ ERR_FAIL_COND(!p_dictionary.has("conns"));
+ //ERR_FAIL_COND( !p_dictionary.has("path"));
int version = 1;
- if (d.has("version"))
- version = d["version"];
+ if (p_dictionary.has("version"))
+ version = p_dictionary["version"];
if (version > PACK_VERSION) {
ERR_EXPLAIN("Save format version too new!");
ERR_FAIL();
}
- PoolVector<String> snames = d["names"];
+ PoolVector<String> snames = p_dictionary["names"];
if (snames.size()) {
int namecount = snames.size();
@@ -1156,7 +1162,7 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
names[i] = r[i];
}
- Array svariants = d["variants"];
+ Array svariants = p_dictionary["variants"];
if (svariants.size()) {
int varcount = svariants.size();
@@ -1170,10 +1176,10 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
variants.clear();
}
- nodes.resize(d["node_count"]);
+ nodes.resize(p_dictionary["node_count"]);
int nc = nodes.size();
if (nc) {
- PoolVector<int> snodes = d["nodes"];
+ PoolVector<int> snodes = p_dictionary["nodes"];
PoolVector<int>::Read r = snodes.read();
int idx = 0;
for (int i = 0; i < nc; i++) {
@@ -1197,12 +1203,12 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
}
}
- connections.resize(d["conn_count"]);
+ connections.resize(p_dictionary["conn_count"]);
int cc = connections.size();
if (cc) {
- PoolVector<int> sconns = d["conns"];
+ PoolVector<int> sconns = p_dictionary["conns"];
PoolVector<int>::Read r = sconns.read();
int idx = 0;
for (int i = 0; i < cc; i++) {
@@ -1222,8 +1228,8 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
}
Array np;
- if (d.has("node_paths")) {
- np = d["node_paths"];
+ if (p_dictionary.has("node_paths")) {
+ np = p_dictionary["node_paths"];
}
node_paths.resize(np.size());
for (int i = 0; i < np.size(); i++) {
@@ -1231,12 +1237,12 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
}
Array ei;
- if (d.has("editable_instances")) {
- ei = d["editable_instances"];
+ if (p_dictionary.has("editable_instances")) {
+ ei = p_dictionary["editable_instances"];
}
- if (d.has("base_scene")) {
- base_scene_idx = d["base_scene"];
+ if (p_dictionary.has("base_scene")) {
+ base_scene_idx = p_dictionary["base_scene"];
}
editable_instances.resize(ei.size());
@@ -1244,7 +1250,7 @@ void SceneState::set_bundled_scene(const Dictionary &d) {
editable_instances[i] = ei[i];
}
- //path=d["path"];
+ //path=p_dictionary["path"];
}
Dictionary SceneState::get_bundled_scene() const {
@@ -1670,11 +1676,11 @@ void SceneState::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_node_owner_path", "idx"), &SceneState::get_node_owner_path);
ClassDB::bind_method(D_METHOD("is_node_instance_placeholder", "idx"), &SceneState::is_node_instance_placeholder);
ClassDB::bind_method(D_METHOD("get_node_instance_placeholder", "idx"), &SceneState::get_node_instance_placeholder);
- ClassDB::bind_method(D_METHOD("get_node_instance:PackedScene", "idx"), &SceneState::get_node_instance);
+ ClassDB::bind_method(D_METHOD("get_node_instance", "idx"), &SceneState::get_node_instance);
ClassDB::bind_method(D_METHOD("get_node_groups", "idx"), &SceneState::_get_node_groups);
ClassDB::bind_method(D_METHOD("get_node_property_count", "idx"), &SceneState::get_node_property_count);
ClassDB::bind_method(D_METHOD("get_node_property_name", "idx", "prop_idx"), &SceneState::get_node_property_name);
- ClassDB::bind_method(D_METHOD("get_node_property_value:Variant", "idx", "prop_idx"), &SceneState::get_node_property_value);
+ ClassDB::bind_method(D_METHOD("get_node_property_value", "idx", "prop_idx"), &SceneState::get_node_property_value);
ClassDB::bind_method(D_METHOD("get_connection_count"), &SceneState::get_connection_count);
ClassDB::bind_method(D_METHOD("get_connection_source", "idx"), &SceneState::get_connection_source);
ClassDB::bind_method(D_METHOD("get_connection_signal", "idx"), &SceneState::get_connection_signal);
@@ -1696,9 +1702,9 @@ SceneState::SceneState() {
////////////////
-void PackedScene::_set_bundled_scene(const Dictionary &d) {
+void PackedScene::_set_bundled_scene(const Dictionary &p_scene) {
- state->set_bundled_scene(d);
+ state->set_bundled_scene(p_scene);
}
Dictionary PackedScene::_get_bundled_scene() const {
@@ -1777,12 +1783,12 @@ void PackedScene::set_path(const String &p_path, bool p_take_over) {
void PackedScene::_bind_methods() {
- ClassDB::bind_method(D_METHOD("pack", "path:Node"), &PackedScene::pack);
- ClassDB::bind_method(D_METHOD("instance:Node", "edit_state"), &PackedScene::instance, DEFVAL(GEN_EDIT_STATE_DISABLED));
+ ClassDB::bind_method(D_METHOD("pack", "path"), &PackedScene::pack);
+ ClassDB::bind_method(D_METHOD("instance", "edit_state"), &PackedScene::instance, DEFVAL(GEN_EDIT_STATE_DISABLED));
ClassDB::bind_method(D_METHOD("can_instance"), &PackedScene::can_instance);
ClassDB::bind_method(D_METHOD("_set_bundled_scene"), &PackedScene::_set_bundled_scene);
ClassDB::bind_method(D_METHOD("_get_bundled_scene"), &PackedScene::_get_bundled_scene);
- ClassDB::bind_method(D_METHOD("get_state:SceneState"), &PackedScene::get_state);
+ ClassDB::bind_method(D_METHOD("get_state"), &PackedScene::get_state);
ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "_bundled"), "_set_bundled_scene", "_get_bundled_scene");