Sfoglia il codice sorgente

Merge pull request #73161 from Faless/mp/4.x_fix_spawner_connect

[MP] Fix MultiplayerSpawner not connecting to child_entered_tree.
Fabio Alessandrelli 2 anni fa
parent
commit
27fb53024b
1 ha cambiato i file con 18 aggiunte e 0 eliminazioni
  1. 18 0
      modules/multiplayer/multiplayer_spawner.cpp

+ 18 - 0
modules/multiplayer/multiplayer_spawner.cpp

@@ -103,6 +103,15 @@ void MultiplayerSpawner::add_spawnable_scene(const String &p_path) {
 		ERR_FAIL_COND(!FileAccess::exists(p_path));
 	}
 	spawnable_scenes.push_back(sc);
+#ifdef TOOLS_ENABLED
+	if (Engine::get_singleton()->is_editor_hint()) {
+		return;
+	}
+#endif
+	Node *node = get_spawn_node();
+	if (spawnable_scenes.size() == 1 && node && !node->is_connected("child_entered_tree", callable_mp(this, &MultiplayerSpawner::_node_added))) {
+		node->connect("child_entered_tree", callable_mp(this, &MultiplayerSpawner::_node_added));
+	}
 }
 
 int MultiplayerSpawner::get_spawnable_scene_count() const {
@@ -116,6 +125,15 @@ String MultiplayerSpawner::get_spawnable_scene(int p_idx) const {
 
 void MultiplayerSpawner::clear_spawnable_scenes() {
 	spawnable_scenes.clear();
+#ifdef TOOLS_ENABLED
+	if (Engine::get_singleton()->is_editor_hint()) {
+		return;
+	}
+#endif
+	Node *node = get_spawn_node();
+	if (node && node->is_connected("child_entered_tree", callable_mp(this, &MultiplayerSpawner::_node_added))) {
+		node->disconnect("child_entered_tree", callable_mp(this, &MultiplayerSpawner::_node_added));
+	}
 }
 
 Vector<String> MultiplayerSpawner::_get_spawnable_scenes() const {