Skip to content

Commit

Permalink
Fix UID support in MultiplayerSpawner
Browse files Browse the repository at this point in the history
  • Loading branch information
KoBeWi committed Dec 3, 2024
1 parent bbc5469 commit 67b95f3
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 13 deletions.
7 changes: 6 additions & 1 deletion core/io/resource_uid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,12 @@ String ResourceUID::uid_to_path(const String &p_uid) {
}

String ResourceUID::path_to_uid(const String &p_path) {
return singleton->id_to_text(ResourceLoader::get_resource_uid(p_path));
const ID id = ResourceLoader::get_resource_uid(p_path);
if (id == INVALID_ID) {
return p_path;
} else {
return singleton->id_to_text(id);
}
}

String ResourceUID::ensure_path(const String &p_uid_or_path) {
Expand Down
16 changes: 5 additions & 11 deletions modules/multiplayer/multiplayer_spawner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ bool MultiplayerSpawner::_set(const StringName &p_name, const Variant &p_value)
if (ns.begins_with("scenes/")) {
uint32_t index = ns.get_slicec('/', 1).to_int();
ERR_FAIL_UNSIGNED_INDEX_V(index, spawnable_scenes.size(), false);
spawnable_scenes[index].path = p_value;
spawnable_scenes[index].path = ResourceUID::ensure_path(p_value);
return true;
}
}
Expand All @@ -62,7 +62,7 @@ bool MultiplayerSpawner::_get(const StringName &p_name, Variant &r_ret) const {
if (ns.begins_with("scenes/")) {
uint32_t index = ns.get_slicec('/', 1).to_int();
ERR_FAIL_UNSIGNED_INDEX_V(index, spawnable_scenes.size(), false);
r_ret = spawnable_scenes[index].path;
r_ret = ResourceUID::path_to_uid(spawnable_scenes[index].path);
return true;
}
}
Expand Down Expand Up @@ -97,15 +97,9 @@ PackedStringArray MultiplayerSpawner::get_configuration_warnings() const {

void MultiplayerSpawner::add_spawnable_scene(const String &p_path) {
SpawnableScene sc;
if (p_path.begins_with("uid://")) {
sc.uid = p_path;
sc.path = ResourceUID::uid_to_path(p_path);
} else {
sc.uid = ResourceUID::path_to_uid(p_path);
sc.path = p_path;
}
sc.path = ResourceUID::ensure_path(p_path);
if (Engine::get_singleton()->is_editor_hint()) {
ERR_FAIL_COND(!ResourceLoader::exists(p_path));
ERR_FAIL_COND(!ResourceLoader::exists(sc.path));
}
spawnable_scenes.push_back(sc);
#ifdef TOOLS_ENABLED
Expand Down Expand Up @@ -145,7 +139,7 @@ Vector<String> MultiplayerSpawner::_get_spawnable_scenes() const {
Vector<String> ss;
ss.resize(spawnable_scenes.size());
for (int i = 0; i < ss.size(); i++) {
ss.write[i] = spawnable_scenes[i].uid;
ss.write[i] = ResourceUID::path_to_uid(spawnable_scenes[i].path);
}
return ss;
}
Expand Down
1 change: 0 additions & 1 deletion modules/multiplayer/multiplayer_spawner.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ class MultiplayerSpawner : public Node {
private:
struct SpawnableScene {
String path;
String uid;
Ref<PackedScene> cache;
};

Expand Down

0 comments on commit 67b95f3

Please sign in to comment.