diff --git a/Bigfoot/Sources/Engine/Include/Engine/BigFile/Asset/Asset.hpp b/Bigfoot/Sources/Engine/Include/Engine/BigFile/Asset/Asset.hpp index f0c6a15..41dd8f5 100644 --- a/Bigfoot/Sources/Engine/Include/Engine/BigFile/Asset/Asset.hpp +++ b/Bigfoot/Sources/Engine/Include/Engine/BigFile/Asset/Asset.hpp @@ -11,6 +11,7 @@ #include #include +#include namespace Bigfoot { @@ -34,6 +35,8 @@ class FlatAssetWrapper FlatAssetWrapper() { m_asset.asset_header = eastl::make_unique(); + m_asset.asset_header->type_id = TypeID(); + m_asset.asset_header->type_name = TypeName(); } FlatAssetWrapper(const eastl::span p_flatBuffer) @@ -46,7 +49,17 @@ class FlatAssetWrapper verifier.VerifyBuffer(), "Flatbuffer verifier failed for FLAT_ASSET!"); - flatbuffers::GetRoot(p_flatBuffer.data())->UnPackTo(&m_asset); + const FLAT_ASSET* flatAsset = flatbuffers::GetRoot(p_flatBuffer.data()); + CRITICAL_ASSERT(EngineAssertHandler, + flatAsset->asset_header()->type_id()->value() == TypeID() && + (std::strcmp(flatAsset->asset_header()->type_name()->c_str(), TypeName().data()) == 0), + "Mismatch between flatbufer type and actual type! flatbuffer = {}/{}; expected = {}/{}", + flatAsset->asset_header()->type_name()->c_str(), + flatAsset->asset_header()->type_id()->value(), + TypeName(), + TypeID()); + + flatAsset->UnPackTo(&m_asset); } FlatAssetWrapper(const FlatAssetWrapper& p_assetWrapper) = delete; @@ -83,6 +96,21 @@ class FlatAssetWrapper return m_asset; } + static AssetTypeID TypeID() + { + static eastl::string_view typeName = TypeName(); + static AssetTypeID typeID = rapidhash(typeName.data(), typeName.size()); + + return typeID; + } + + static eastl::string_view TypeName() + { + static eastl::string_view typeName {FLAT_ASSET::GetFullyQualifiedName()}; + + return typeName; + } + FlatAssetWrapper& operator=(const FlatAssetWrapper p_assetWrapper) = delete; FlatAssetWrapper& operator=(FlatAssetWrapper&& p_assetWrapper) = delete; diff --git a/Bigfoot/Tests/Engine/BigFile/BigFile.cpp b/Bigfoot/Tests/Engine/BigFile/BigFile.cpp index 01643a4..39f3efc 100644 --- a/Bigfoot/Tests/Engine/BigFile/BigFile.cpp +++ b/Bigfoot/Tests/Engine/BigFile/BigFile.cpp @@ -54,20 +54,23 @@ TEST_F(BigFileFixture, Lol) test.Asset().mana = 42; test.Asset().asset_header->name = "Instance"; - test.Asset().asset_header->type_id = 1; - test.Asset().asset_header->type_name = "AssetA"; test.Asset().asset_header->uuid = uuid; test.Asset().asset_header->version = 2; const eastl::vector flatbuffer = test.Pack(); + EXPECT_STREQ(FlatAssetWrapper::TypeName().data(), "Bigfoot.Flat.AssetA"); + EXPECT_EQ(FlatAssetWrapper::TypeID(), + rapidhash(FlatAssetWrapper::TypeName().data(), + FlatAssetWrapper::TypeName().size())); + FlatAssetWrapper test2 {flatbuffer}; EXPECT_EQ(test2.Asset().health, 100); EXPECT_EQ(test2.Asset().mana, 42); EXPECT_STREQ(test2.Asset().asset_header->name.c_str(), "Instance"); - EXPECT_EQ(test2.Asset().asset_header->type_id, 1); - EXPECT_STREQ(test2.Asset().asset_header->type_name.c_str(), "AssetA"); + EXPECT_EQ(test2.Asset().asset_header->type_id, FlatAssetWrapper::TypeID()); + EXPECT_STREQ(test2.Asset().asset_header->type_name.c_str(), FlatAssetWrapper::TypeName().data()); EXPECT_EQ(test2.Asset().asset_header->uuid, uuid); EXPECT_EQ(test2.Asset().asset_header->version, 2); }