Integrating latest 47acbe8
This commit is contained in:
@@ -15,16 +15,19 @@
|
||||
#include <AzCore/Asset/AssetCommon.h>
|
||||
#include <AzCore/RTTI/BehaviorContext.h>
|
||||
#include <AzCore/RTTI/ReflectContext.h>
|
||||
#include <AzCore/Script/ScriptAsset.h>
|
||||
#include <AzCore/Script/ScriptContext.h>
|
||||
#include <AzCore/Serialization/EditContext.h>
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
|
||||
#include <AzFramework/Asset/GenericAssetHandler.h>
|
||||
#include <AzFramework/Asset/SimpleAsset.h>
|
||||
|
||||
#include "ScriptEventDefinition.h"
|
||||
#include <AzFramework/Asset/GenericAssetHandler.h>
|
||||
#include "ScriptEventsBus.h"
|
||||
#include "ScriptEvent.h"
|
||||
|
||||
namespace ScriptEventAsset
|
||||
{
|
||||
constexpr const char* k_RuntimeAssetIdStr = "{CB4D603E-8CB0-4D80-8165-4244F28AF187}";
|
||||
}
|
||||
|
||||
namespace ScriptEvents
|
||||
{
|
||||
@@ -33,7 +36,7 @@ namespace ScriptEvents
|
||||
{
|
||||
public:
|
||||
|
||||
AZ_RTTI(ScriptEventsAsset, "{CB4D603E-8CB0-4D80-8165-4244F28AF187}", AZ::Data::AssetData);
|
||||
AZ_RTTI(ScriptEventsAsset, ScriptEventAsset::k_RuntimeAssetIdStr, AZ::Data::AssetData);
|
||||
AZ_CLASS_ALLOCATOR(ScriptEventsAsset, AZ::SystemAllocator, 0);
|
||||
|
||||
ScriptEventsAsset(const AZ::Data::AssetId& assetId = AZ::Data::AssetId(), AZ::Data::AssetData::AssetStatus status = AZ::Data::AssetData::AssetStatus::NotLoaded)
|
||||
@@ -50,8 +53,7 @@ namespace ScriptEvents
|
||||
|
||||
static const char* GetDisplayName() { return "Script Events"; }
|
||||
static const char* GetGroup() { return "ScriptEvents"; }
|
||||
static const char* GetFileFilter() { return "*.scriptevents"; }
|
||||
static const char* GetFileExtension() { return ".scriptevents"; }
|
||||
static const char* GetFileFilter() { return "scriptevents"; }
|
||||
|
||||
AZ::Crc32 GetBusId() const { return AZ::Crc32(GetId().ToString<AZStd::string>().c_str()); }
|
||||
|
||||
@@ -88,7 +90,7 @@ namespace ScriptEvents
|
||||
AZ_RTTI(ScriptEventsAssetPtr, "{CE2C30CB-709B-4BC0-BAEE-3D192D33367D}", BaseType);
|
||||
AZ_CLASS_ALLOCATOR(ScriptEventsAssetPtr, AZ::SystemAllocator, 0);
|
||||
|
||||
ScriptEventsAssetPtr(AZ::Data::AssetLoadBehavior loadBehavior = AZ::Data::AssetLoadBehavior::PreLoad)
|
||||
explicit ScriptEventsAssetPtr(AZ::Data::AssetLoadBehavior loadBehavior = AZ::Data::AssetLoadBehavior::PreLoad)
|
||||
: AZ::Data::Asset<ScriptEventsAsset>(loadBehavior)
|
||||
{}
|
||||
|
||||
@@ -117,38 +119,9 @@ namespace ScriptEvents
|
||||
public:
|
||||
AZ_RTTI(ScriptEventAssetRuntimeHandler, "{002E913D-339A-4238-BCCD-ED077BBD72C5}", AzFramework::GenericAssetHandler<ScriptEventsAsset>);
|
||||
|
||||
ScriptEventAssetRuntimeHandler(const char* displayName, const char* group, const char* extension, const AZ::Uuid& componentTypeId = AZ::Uuid::CreateNull(), AZ::SerializeContext* serializeContext = nullptr)
|
||||
: AzFramework::GenericAssetHandler<ScriptEventsAsset>(displayName, group, extension, componentTypeId, serializeContext)
|
||||
{
|
||||
}
|
||||
|
||||
using AzFramework::GenericAssetHandler<ScriptEventsAsset>::LoadAssetData;
|
||||
|
||||
AZ::Data::AssetHandler::LoadResult LoadAssetData(
|
||||
const AZ::Data::Asset<AZ::Data::AssetData>& asset,
|
||||
AZStd::shared_ptr<AZ::Data::AssetDataStream> stream,
|
||||
const AZ::Data::AssetFilterCB& assetLoadFilterCB) override
|
||||
{
|
||||
if (AzFramework::GenericAssetHandler<ScriptEventsAsset>::LoadAssetData(asset, stream, assetLoadFilterCB) ==
|
||||
AZ::Data::AssetHandler::LoadResult::LoadComplete)
|
||||
{
|
||||
// Queue the registration against the AssetBus to be run on the main thread
|
||||
// This avoids the following deadlock situation by moving RegisterScriptEvent to the main thread only:
|
||||
// JobThread: LoadAssetData -> lock ScriptEventBus -> lock AssetBus
|
||||
// MainThread: lock AssetBus OnAssetReady -> LoadAssetData -> ...
|
||||
AZ::Data::AssetBus::QueueFunction([asset]()
|
||||
{
|
||||
const ScriptEvents::ScriptEvent& definition = asset.GetAs<ScriptEventsAsset>()->m_definition;
|
||||
|
||||
AZStd::intrusive_ptr<Internal::ScriptEvent> scriptEvent;
|
||||
ScriptEvents::ScriptEventBus::BroadcastResult(scriptEvent, &ScriptEvents::ScriptEventRequests::RegisterScriptEvent, asset.GetId(), definition.GetVersion());
|
||||
});
|
||||
|
||||
return AZ::Data::AssetHandler::LoadResult::LoadComplete;
|
||||
}
|
||||
return AZ::Data::AssetHandler::LoadResult::Error;
|
||||
}
|
||||
ScriptEventAssetRuntimeHandler(const char* displayName, const char* group, const char* extension, const AZ::Uuid& componentTypeId = AZ::Uuid::CreateNull(), AZ::SerializeContext* serializeContext = nullptr);
|
||||
|
||||
void InitAsset(const AZ::Data::Asset<AZ::Data::AssetData>& asset, bool loadStageSucceeded, bool isReload) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user