65 lines
2.0 KiB
C++
65 lines
2.0 KiB
C++
// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
|
|
|
|
#include "CreateCollisionData.h"
|
|
|
|
#if COMPILE_WITH_ASSETS_IMPORTER
|
|
|
|
#include "AssetsImportingManager.h"
|
|
#include "Engine/Physics/CollisionData.h"
|
|
|
|
CreateAssetResult CreateCollisionData::Create(CreateAssetContext& context)
|
|
{
|
|
// Base
|
|
IMPORT_SETUP(CollisionData, 1);
|
|
|
|
CollisionData::SerializedOptions options;
|
|
|
|
// Check if has cooking module and input argument has been specified
|
|
#if COMPILE_WITH_PHYSICS_COOKING
|
|
if (context.CustomArg)
|
|
{
|
|
// Cook
|
|
const auto arg = (CollisionCooking::Argument*)context.CustomArg;
|
|
BytesContainer outputData;
|
|
if (CollisionCooking::CookCollision(*arg, options, outputData))
|
|
{
|
|
return CreateAssetResult::Error;
|
|
}
|
|
|
|
// Save data to asset
|
|
if (context.AllocateChunk(0))
|
|
return CreateAssetResult::CannotAllocateChunk;
|
|
context.Data.Header.Chunks[0]->Data.Allocate(outputData.Length() + sizeof(options));
|
|
const auto resultChunkPtr = context.Data.Header.Chunks[0]->Data.Get();
|
|
Platform::MemoryCopy(resultChunkPtr, &options, sizeof(options));
|
|
Platform::MemoryCopy(resultChunkPtr + sizeof(options), outputData.Get(), outputData.Length());
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
// Use empty options
|
|
options.Type = CollisionDataType::None;
|
|
options.Model = Guid::Empty;
|
|
options.ModelLodIndex = 0;
|
|
options.ConvexFlags = ConvexMeshGenerationFlags::None;
|
|
options.ConvexVertexLimit = 0;
|
|
if (context.AllocateChunk(0))
|
|
return CreateAssetResult::CannotAllocateChunk;
|
|
context.Data.Header.Chunks[0]->Data.Copy(&options);
|
|
}
|
|
|
|
return CreateAssetResult::Ok;
|
|
}
|
|
|
|
#if COMPILE_WITH_PHYSICS_COOKING
|
|
|
|
bool CreateCollisionData::CookMeshCollision(const String& outputPath, CollisionCooking::Argument& arg)
|
|
{
|
|
// Use in-build assets importing/creating pipeline to generate asset
|
|
return AssetsImportingManager::Create(AssetsImportingManager::CreateCollisionDataTag, outputPath, &arg);
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|