/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include namespace Multiplayer { NetworkSpawnableLibrary::NetworkSpawnableLibrary() { AZ::Interface::Register(this); if (auto settingsRegistry{ AZ::SettingsRegistry::Get() }; settingsRegistry != nullptr) { auto LifecycleCallback = [this](AZStd::string_view, AZ::SettingsRegistryInterface::Type) { BuildSpawnablesList(); }; AZ::ComponentApplicationLifecycle::RegisterHandler(*settingsRegistry, m_criticalAssetsHandler, AZStd::move(LifecycleCallback), "CriticalAssetsCompiled"); } } NetworkSpawnableLibrary::~NetworkSpawnableLibrary() { m_criticalAssetsHandler = {}; AZ::Interface::Unregister(this); } void NetworkSpawnableLibrary::BuildSpawnablesList() { m_spawnables.clear(); m_spawnablesReverseLookup.clear(); auto enumerateCallback = [this](const AZ::Data::AssetId id, const AZ::Data::AssetInfo& info) { if (info.m_assetType == AZ::AzTypeInfo::Uuid() && info.m_relativePath.ends_with(NetworkSpawnableFileExtension)) { ProcessSpawnableAsset(info.m_relativePath, id); } }; AZ::Data::AssetCatalogRequestBus::Broadcast(&AZ::Data::AssetCatalogRequests::EnumerateAssets, nullptr, enumerateCallback, nullptr); } void NetworkSpawnableLibrary::ProcessSpawnableAsset(const AZStd::string& relativePath, const AZ::Data::AssetId id) { const AZ::Name name = AZ::Name(relativePath); m_spawnables[name] = id; m_spawnablesReverseLookup[id] = name; } AZ::Name NetworkSpawnableLibrary::GetSpawnableNameFromAssetId(AZ::Data::AssetId assetId) { if (assetId.IsValid()) { auto it = m_spawnablesReverseLookup.find(assetId); if (it != m_spawnablesReverseLookup.end()) { return it->second; } } return {}; } AZ::Data::AssetId NetworkSpawnableLibrary::GetAssetIdByName(AZ::Name name) { auto it = m_spawnables.find(name); if (it != m_spawnables.end()) { return it->second; } return {}; } }