// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
#pragma once
#include "Types.h"
#include "Engine/Content/Assets/VisualScript.h"
#if COMPILE_WITH_ASSETS_IMPORTER
///
/// Creating visual script asset utility
///
class CreateVisualScript
{
public:
///
/// Creates the asset.
///
/// The importing context.
/// Result.
static CreateAssetResult Create(CreateAssetContext& context)
{
ASSERT(context.CustomArg);
const auto baseTypename = static_cast(context.CustomArg);
// Base
IMPORT_SETUP(VisualScript, 1);
// Chunk 0 - Visject Surface
if (context.AllocateChunk(0))
return CreateAssetResult::CannotAllocateChunk;
{
const VisualScriptGraph graph;
MemoryWriteStream stream(64);
graph.Save(&stream, true);
context.Data.Header.Chunks[0]->Data.Copy(stream.GetHandle(), stream.GetPosition());
}
// Chunk 1 - Visual Script Metadata
if (context.AllocateChunk(1))
return CreateAssetResult::CannotAllocateChunk;
{
MemoryWriteStream stream(256);
stream.WriteInt32(1);
stream.WriteString(*baseTypename, 31);
stream.WriteInt32((int32)VisualScript::Flags::None);
context.Data.Header.Chunks[1]->Data.Copy(stream.GetHandle(), stream.GetPosition());
}
return CreateAssetResult::Ok;
}
};
#endif