18ea4ba6a8
The CriticalAssetsCompiled event can be handled to detect when the
AssetProcessor has finished processing Critical Assets
Also with the new event, an audit has been performed over all the
locations where the AssetCatalogEventBus OnCatalogLoaded event was being
handle to make sure it was the proper event to use.
If the handler was actually examing the enumerating over the full
catalog or querying all assets within the catalog, then it was a proper
use.
For handlers that were interested in a particular asset it was not
Moreover added implementations of `OnCatalogAssetChanged` and
`OnCatalogAssetAdded` to the FileTagComponent and the MaterialViewportComponent.
Any applications which uses the AtomToolsApplication
class(MaterialEditor, AtomSampleViewerStandalone,
ShaderMangementConsole) now signals a "CriticalAssetsCompiled" lifecycle
event as well as loads the "assetcatalog.xml" if it exists.
The Launcher application signals the "CrticalAssetsCompiled" event and
reloads the "assetcatalog.xml" for the ${project}.GameLauncher and
${project}.ServerLauncher in Launcher.cpp
Finally the Editor signals the "CriticalAssetsCompiled" and reloads the
"assetcatalog.xml" in CryEdit.cpp
resolves #6093
Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
95 lines
3.3 KiB
C++
95 lines
3.3 KiB
C++
/*
|
|
* 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
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AzCore/Component/Component.h>
|
|
#include <AzCore/Component/TickBus.h>
|
|
#include <AzCore/Settings/SettingsRegistry.h>
|
|
#include <AzCore/std/parallel/atomic.h>
|
|
#include <AzFramework/Spawnable/RootSpawnableInterface.h>
|
|
#include <AzFramework/Spawnable/Spawnable.h>
|
|
#include <AzFramework/Spawnable/SpawnableAssetHandler.h>
|
|
#include <AzFramework/Spawnable/SpawnableEntitiesContainer.h>
|
|
#include <AzFramework/Spawnable/SpawnableEntitiesManager.h>
|
|
|
|
namespace AzFramework
|
|
{
|
|
class SpawnableSystemComponent
|
|
: public AZ::Component
|
|
, public AZ::TickBus::Handler
|
|
, public AZ::SystemTickBus::Handler
|
|
, public RootSpawnableInterface::Registrar
|
|
, public RootSpawnableNotificationBus::Handler
|
|
{
|
|
public:
|
|
AZ_COMPONENT(SpawnableSystemComponent, "{12D0DA52-BB86-4AC3-8862-9493E0D0E207}");
|
|
|
|
inline static constexpr const char* RootSpawnableRegistryKey = "/Amazon/AzCore/Bootstrap/RootSpawnable";
|
|
|
|
SpawnableSystemComponent() = default;
|
|
SpawnableSystemComponent(const SpawnableSystemComponent&) = delete;
|
|
SpawnableSystemComponent(SpawnableSystemComponent&&) = delete;
|
|
|
|
SpawnableSystemComponent& operator=(const SpawnableSystemComponent&) = delete;
|
|
SpawnableSystemComponent& operator=(SpawnableSystemComponent&&) = delete;
|
|
|
|
//
|
|
// Component
|
|
//
|
|
|
|
static void Reflect(AZ::ReflectContext* context);
|
|
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& services);
|
|
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& services);
|
|
static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& services);
|
|
|
|
//
|
|
// TickBus
|
|
//
|
|
|
|
void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
|
|
int GetTickOrder() override;
|
|
|
|
//
|
|
// SystemTickBus
|
|
//
|
|
|
|
void OnSystemTick() override;
|
|
|
|
//
|
|
// RootSpawnableInterface
|
|
//
|
|
|
|
uint64_t AssignRootSpawnable(AZ::Data::Asset<Spawnable> rootSpawnable) override;
|
|
void ReleaseRootSpawnable() override;
|
|
void ProcessSpawnableQueue() override;
|
|
|
|
//
|
|
// RootSpawnbleNotificationBus
|
|
//
|
|
|
|
void OnRootSpawnableAssigned(AZ::Data::Asset<Spawnable> rootSpawnable, uint32_t generation) override;
|
|
void OnRootSpawnableReady(AZ::Data::Asset<Spawnable> rootSpawnable, uint32_t generation) override;
|
|
void OnRootSpawnableReleased(uint32_t generation) override;
|
|
|
|
protected:
|
|
void Activate() override;
|
|
void Deactivate() override;
|
|
|
|
void LoadRootSpawnableFromSettingsRegistry();
|
|
|
|
SpawnableAssetHandler m_assetHandler;
|
|
SpawnableEntitiesManager m_entitiesManager;
|
|
SpawnableEntitiesContainer m_rootSpawnableContainer;
|
|
AZ::SettingsRegistryInterface::NotifyEventHandler m_registryChangeHandler;
|
|
|
|
AZ::Data::AssetId m_rootSpawnableId;
|
|
AZ::SettingsRegistryInterface::NotifyEventHandler m_criticalAssetsHandler;
|
|
};
|
|
} // namespace AzFramework
|