/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #include "precompiled.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace ScriptCanvasEditor { ScriptCanvasFunctionAssetHandler::ScriptCanvasFunctionAssetHandler(AZ::SerializeContext* context) : ScriptCanvasAssetHandler(context) { AZ::AssetTypeInfoBus::MultiHandler::BusConnect(azrtti_typeid()); } ScriptCanvasFunctionAssetHandler::~ScriptCanvasFunctionAssetHandler() { AZ::AssetTypeInfoBus::MultiHandler::BusDisconnect(); } AZ::Data::AssetPtr ScriptCanvasFunctionAssetHandler::CreateAsset(const AZ::Data::AssetId& id, const AZ::Data::AssetType& type) { AZ_UNUSED(type); ScriptCanvas::ScriptCanvasFunctionAsset* assetData = aznew ScriptCanvas::ScriptCanvasFunctionAsset(id); AZ::Entity* scriptCanvasEntity = aznew AZ::Entity(ScriptCanvas::AssetDescription::GetEntityName()); SystemRequestBus::Broadcast(&SystemRequests::CreateEditorComponentsOnEntity, scriptCanvasEntity, azrtti_typeid()); assetData->m_cachedComponent = scriptCanvasEntity->CreateComponent(); assetData->SetScriptCanvasEntity(scriptCanvasEntity); return assetData; } bool ScriptCanvasFunctionAssetHandler::LoadAssetData(const AZ::Data::Asset& asset, AZ::IO::GenericStream* stream, const AZ::Data::AssetFilterCB& assetLoadFilterCB) { ScriptCanvas::ScriptCanvasFunctionAsset* scriptCanvasAsset = asset.GetAs(); AZ_Assert(m_serializeContext, "ScriptCanvasFunctionAssetHandler needs to be initialized with a SerializeContext"); if (scriptCanvasAsset) { stream->Seek(0U, AZ::IO::GenericStream::ST_SEEK_BEGIN); bool loadSuccess = AZ::Utils::LoadObjectFromStreamInPlace(*stream, scriptCanvasAsset->GetScriptCanvasData(), m_serializeContext, AZ::ObjectStream::FilterDescriptor(assetLoadFilterCB, AZ::ObjectStream::FILTERFLAG_IGNORE_UNKNOWN_CLASSES)); if (loadSuccess) { scriptCanvasAsset->m_cachedComponent = scriptCanvasAsset->GetScriptCanvasData().GetScriptCanvasEntity()->FindComponent(); } return loadSuccess; } return false; } bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const AZ::Data::Asset& asset, AZ::IO::GenericStream* stream) { return SaveAssetData(asset.GetAs(), stream); } bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const ScriptCanvas::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream) { return SaveAssetData(assetData, stream, AZ::DataStream::ST_XML); } bool ScriptCanvasFunctionAssetHandler::SaveAssetData(const ScriptCanvas::ScriptCanvasFunctionAsset* assetData, AZ::IO::GenericStream* stream, AZ::DataStream::StreamType streamType) { if (assetData && m_serializeContext) { AZStd::vector byteBuffer; AZ::IO::ByteContainerStream byteStream(&byteBuffer); AZ::ObjectStream* objStream = AZ::ObjectStream::Create(&byteStream, *m_serializeContext, streamType); const ScriptCanvas::ScriptCanvasData& functionData = assetData->GetScriptCanvasData(); bool assetSaved = objStream->WriteClass(&functionData); objStream->Finalize(); assetSaved = stream->Write(byteBuffer.size(), byteBuffer.data()) == byteBuffer.size() && assetSaved; return assetSaved; } return false; } AZ::Data::AssetType ScriptCanvasFunctionAssetHandler::GetAssetType() const { return ScriptCanvasFunctionAssetHandler::GetAssetTypeStatic(); } const char* ScriptCanvasFunctionAssetHandler::GetAssetTypeDisplayName() const { return ScriptCanvas::AssetDescription::GetAssetTypeDisplayName(); } bool ScriptCanvasFunctionAssetHandler::CanCreateComponent(const AZ::Data::AssetId& assetId) const { return false; } void ScriptCanvasFunctionAssetHandler::GetAssetTypeExtensions(AZStd::vector& extensions) { const AZ::Uuid& assetType = *AZ::AssetTypeInfoBus::GetCurrentBusId(); if (assetType == AZ::AzTypeInfo::Uuid()) { extensions.push_back(ScriptCanvas::AssetDescription::GetExtension()); } } void ScriptCanvasFunctionAssetHandler::GetHandledAssetTypes(AZStd::vector& assetTypes) { assetTypes.push_back(AZ::AzTypeInfo::Uuid()); } AZ::Data::AssetType ScriptCanvasFunctionAssetHandler::GetAssetTypeStatic() { return azrtti_typeid(); } const char* ScriptCanvasFunctionAssetHandler::GetGroup() const { return ScriptCanvas::AssetDescription::GetGroup(); } const char* ScriptCanvasFunctionAssetHandler::GetBrowserIcon() const { return ScriptCanvas::AssetDescription::GetIconPath(); } } // namespace ScriptCanvasEditor