FlatAssetWrapper
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 2m25s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 35s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 1m9s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 59s
Bigfoot / Clang Format Checks (push) Successful in 11s
All checks were successful
Bigfoot / Build & Test Debug (Unity Build: OFF) (push) Successful in 2m25s
Bigfoot / Build & Test Debug (Unity Build: ON) (push) Successful in 35s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: OFF) (push) Successful in 1m9s
Bigfoot / Build & Test RelWithDebInfo (Unity Build: ON) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: OFF) (push) Successful in 1m3s
Bigfoot / Build & Test Release (Unity Build: ON) (push) Successful in 59s
Bigfoot / Clang Format Checks (push) Successful in 11s
This commit is contained in:
@@ -0,0 +1,94 @@
|
|||||||
|
/*********************************************************************
|
||||||
|
* \file Asset.hpp
|
||||||
|
*
|
||||||
|
* \author Romain BOULLARD
|
||||||
|
* \date February 2026
|
||||||
|
*********************************************************************/
|
||||||
|
#ifndef BIGFOOT_ENGINE_ASSET_HPP
|
||||||
|
#define BIGFOOT_ENGINE_ASSET_HPP
|
||||||
|
#include <Engine/BigFile/Asset/AssetHeader_generated.hpp>
|
||||||
|
|
||||||
|
#include <Engine/EngineAssertHandler.hpp>
|
||||||
|
|
||||||
|
#include <EASTL/vector.h>
|
||||||
|
|
||||||
|
namespace Bigfoot
|
||||||
|
{
|
||||||
|
template<typename FLAT_ASSET>
|
||||||
|
concept FlatAssetConcept = requires(FLAT_ASSET p_flatAsset) {
|
||||||
|
requires std::is_base_of_v<::flatbuffers::Table, FLAT_ASSET>;
|
||||||
|
requires std::derived_from<typename FLAT_ASSET::NativeTableType, ::flatbuffers::NativeTable>;
|
||||||
|
|
||||||
|
{ FLAT_ASSET::GetFullyQualifiedName() } -> std::convertible_to<const char*>;
|
||||||
|
{ p_flatAsset.asset_header() } -> std::same_as<const Bigfoot::Flat::AssetHeader*>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<FlatAssetConcept FLAT_ASSET>
|
||||||
|
class FlatAssetWrapper
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
using FLAT_ASSET_NATIVE = FLAT_ASSET::NativeTableType;
|
||||||
|
using FLAT_ASSET_BUILDER = FLAT_ASSET::Builder;
|
||||||
|
|
||||||
|
public:
|
||||||
|
FlatAssetWrapper()
|
||||||
|
{
|
||||||
|
m_asset.asset_header = eastl::make_unique<Flat::AssetHeaderT>();
|
||||||
|
}
|
||||||
|
|
||||||
|
FlatAssetWrapper(const eastl::span<const std::byte> p_flatBuffer)
|
||||||
|
{
|
||||||
|
flatbuffers::Verifier::Options verifierOptions;
|
||||||
|
flatbuffers::Verifier verifier {std::bit_cast<const std::uint8_t*>(p_flatBuffer.data()),
|
||||||
|
p_flatBuffer.size(),
|
||||||
|
verifierOptions};
|
||||||
|
CRITICAL_ASSERT(EngineAssertHandler,
|
||||||
|
verifier.VerifyBuffer<FLAT_ASSET>(),
|
||||||
|
"Flatbuffer verifier failed for FLAT_ASSET!");
|
||||||
|
|
||||||
|
flatbuffers::GetRoot<FLAT_ASSET>(p_flatBuffer.data())->UnPackTo(&m_asset);
|
||||||
|
}
|
||||||
|
|
||||||
|
FlatAssetWrapper(const FlatAssetWrapper& p_assetWrapper) = delete;
|
||||||
|
FlatAssetWrapper(FlatAssetWrapper&& p_assetWrapper) = delete;
|
||||||
|
|
||||||
|
~FlatAssetWrapper() = default;
|
||||||
|
|
||||||
|
eastl::vector<std::byte> Pack() const
|
||||||
|
{
|
||||||
|
flatbuffers::FlatBufferBuilder builder;
|
||||||
|
builder.Finish(FLAT_ASSET::Pack(builder, &m_asset));
|
||||||
|
|
||||||
|
eastl::vector<std::byte> result {builder.GetSize()};
|
||||||
|
eastl::transform(builder.GetBufferSpan().begin(),
|
||||||
|
builder.GetBufferSpan().end(),
|
||||||
|
result.begin(),
|
||||||
|
[](const std::uint8_t p_value)
|
||||||
|
{
|
||||||
|
return static_cast<std::byte>(p_value);
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
FLAT_ASSET_NATIVE& Asset()
|
||||||
|
{
|
||||||
|
return m_asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
const FLAT_ASSET_NATIVE& Asset() const
|
||||||
|
{
|
||||||
|
return m_asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
FlatAssetWrapper& operator=(const FlatAssetWrapper p_assetWrapper) = delete;
|
||||||
|
FlatAssetWrapper& operator=(FlatAssetWrapper&& p_assetWrapper) = delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
FLAT_ASSET_NATIVE m_asset;
|
||||||
|
};
|
||||||
|
} // namespace Bigfoot
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -6,6 +6,8 @@
|
|||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
#include <Engine/BigFile/BigFile.hpp>
|
#include <Engine/BigFile/BigFile.hpp>
|
||||||
|
|
||||||
|
#include <Engine/BigFile/Asset/Asset.hpp>
|
||||||
|
|
||||||
#include <System/Log/Log.hpp>
|
#include <System/Log/Log.hpp>
|
||||||
#include <System/Time/Time.hpp>
|
#include <System/Time/Time.hpp>
|
||||||
#include <System/UUID/UUID.hpp>
|
#include <System/UUID/UUID.hpp>
|
||||||
@@ -34,6 +36,8 @@ class BigFileFixture: public ::testing::Test
|
|||||||
m_bigFile.CommitTransaction();
|
m_bigFile.CommitTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FlatAssetWrapper<Flat::AssetA> test;
|
||||||
|
|
||||||
BIGFOOT_NOT_OPTIMIZED_ONLY(Singleton<Log>::Lifetime m_loggerLifetime;)
|
BIGFOOT_NOT_OPTIMIZED_ONLY(Singleton<Log>::Lifetime m_loggerLifetime;)
|
||||||
|
|
||||||
BigFile m_bigFile {File {BIGFILE_ENGINETESTS_LOCATION}};
|
BigFile m_bigFile {File {BIGFILE_ENGINETESTS_LOCATION}};
|
||||||
@@ -43,6 +47,31 @@ class BigFileFixture: public ::testing::Test
|
|||||||
|
|
||||||
TEST_F(BigFileFixture, Lol)
|
TEST_F(BigFileFixture, Lol)
|
||||||
{
|
{
|
||||||
|
{
|
||||||
|
UUID uuid;
|
||||||
|
|
||||||
|
test.Asset().health = 100;
|
||||||
|
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<std::byte> flatbuffer = test.Pack();
|
||||||
|
|
||||||
|
FlatAssetWrapper<Flat::AssetA> 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->uuid, uuid);
|
||||||
|
EXPECT_EQ(test2.Asset().asset_header->version, 2);
|
||||||
|
}
|
||||||
|
|
||||||
UUID uuid;
|
UUID uuid;
|
||||||
UUID uuid2;
|
UUID uuid2;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ table AssetA
|
|||||||
asset_header: AssetHeader;
|
asset_header: AssetHeader;
|
||||||
|
|
||||||
health: uint;
|
health: uint;
|
||||||
hp: uint;
|
mana: uint;
|
||||||
}
|
}
|
||||||
|
|
||||||
root_type AssetA;
|
root_type AssetA;
|
||||||
@@ -37,7 +37,7 @@ struct AssetAT : public ::flatbuffers::NativeTable {
|
|||||||
}
|
}
|
||||||
eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> asset_header{};
|
eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT> asset_header{};
|
||||||
uint32_t health = 0;
|
uint32_t health = 0;
|
||||||
uint32_t hp = 0;
|
uint32_t mana = 0;
|
||||||
AssetAT() = default;
|
AssetAT() = default;
|
||||||
AssetAT(const AssetAT &o);
|
AssetAT(const AssetAT &o);
|
||||||
AssetAT(AssetAT&&) FLATBUFFERS_NOEXCEPT = default;
|
AssetAT(AssetAT&&) FLATBUFFERS_NOEXCEPT = default;
|
||||||
@@ -57,7 +57,7 @@ struct AssetA FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
|||||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||||
VT_ASSET_HEADER = 4,
|
VT_ASSET_HEADER = 4,
|
||||||
VT_HEALTH = 6,
|
VT_HEALTH = 6,
|
||||||
VT_HP = 8
|
VT_MANA = 8
|
||||||
};
|
};
|
||||||
const Bigfoot::Flat::AssetHeader *asset_header() const {
|
const Bigfoot::Flat::AssetHeader *asset_header() const {
|
||||||
return GetPointer<const Bigfoot::Flat::AssetHeader *>(VT_ASSET_HEADER);
|
return GetPointer<const Bigfoot::Flat::AssetHeader *>(VT_ASSET_HEADER);
|
||||||
@@ -65,8 +65,8 @@ struct AssetA FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
|||||||
uint32_t health() const {
|
uint32_t health() const {
|
||||||
return GetField<uint32_t>(VT_HEALTH, 0);
|
return GetField<uint32_t>(VT_HEALTH, 0);
|
||||||
}
|
}
|
||||||
uint32_t hp() const {
|
uint32_t mana() const {
|
||||||
return GetField<uint32_t>(VT_HP, 0);
|
return GetField<uint32_t>(VT_MANA, 0);
|
||||||
}
|
}
|
||||||
template <bool B = false>
|
template <bool B = false>
|
||||||
bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
|
bool Verify(::flatbuffers::VerifierTemplate<B> &verifier) const {
|
||||||
@@ -74,7 +74,7 @@ struct AssetA FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
|||||||
VerifyOffset(verifier, VT_ASSET_HEADER) &&
|
VerifyOffset(verifier, VT_ASSET_HEADER) &&
|
||||||
verifier.VerifyTable(asset_header()) &&
|
verifier.VerifyTable(asset_header()) &&
|
||||||
VerifyField<uint32_t>(verifier, VT_HEALTH, 4) &&
|
VerifyField<uint32_t>(verifier, VT_HEALTH, 4) &&
|
||||||
VerifyField<uint32_t>(verifier, VT_HP, 4) &&
|
VerifyField<uint32_t>(verifier, VT_MANA, 4) &&
|
||||||
verifier.EndTable();
|
verifier.EndTable();
|
||||||
}
|
}
|
||||||
AssetAT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
|
AssetAT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
|
||||||
@@ -92,8 +92,8 @@ struct AssetABuilder {
|
|||||||
void add_health(uint32_t health) {
|
void add_health(uint32_t health) {
|
||||||
fbb_.AddElement<uint32_t>(AssetA::VT_HEALTH, health, 0);
|
fbb_.AddElement<uint32_t>(AssetA::VT_HEALTH, health, 0);
|
||||||
}
|
}
|
||||||
void add_hp(uint32_t hp) {
|
void add_mana(uint32_t mana) {
|
||||||
fbb_.AddElement<uint32_t>(AssetA::VT_HP, hp, 0);
|
fbb_.AddElement<uint32_t>(AssetA::VT_MANA, mana, 0);
|
||||||
}
|
}
|
||||||
explicit AssetABuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
explicit AssetABuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||||
: fbb_(_fbb) {
|
: fbb_(_fbb) {
|
||||||
@@ -110,9 +110,9 @@ inline ::flatbuffers::Offset<AssetA> CreateAssetA(
|
|||||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||||
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header = 0,
|
::flatbuffers::Offset<Bigfoot::Flat::AssetHeader> asset_header = 0,
|
||||||
uint32_t health = 0,
|
uint32_t health = 0,
|
||||||
uint32_t hp = 0) {
|
uint32_t mana = 0) {
|
||||||
AssetABuilder builder_(_fbb);
|
AssetABuilder builder_(_fbb);
|
||||||
builder_.add_hp(hp);
|
builder_.add_mana(mana);
|
||||||
builder_.add_health(health);
|
builder_.add_health(health);
|
||||||
builder_.add_asset_header(asset_header);
|
builder_.add_asset_header(asset_header);
|
||||||
return builder_.Finish();
|
return builder_.Finish();
|
||||||
@@ -128,13 +128,13 @@ struct AssetA::Traits {
|
|||||||
inline AssetAT::AssetAT(const AssetAT &o)
|
inline AssetAT::AssetAT(const AssetAT &o)
|
||||||
: asset_header((o.asset_header) ? new Bigfoot::Flat::AssetHeaderT(*o.asset_header) : nullptr),
|
: asset_header((o.asset_header) ? new Bigfoot::Flat::AssetHeaderT(*o.asset_header) : nullptr),
|
||||||
health(o.health),
|
health(o.health),
|
||||||
hp(o.hp) {
|
mana(o.mana) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline AssetAT &AssetAT::operator=(AssetAT o) FLATBUFFERS_NOEXCEPT {
|
inline AssetAT &AssetAT::operator=(AssetAT o) FLATBUFFERS_NOEXCEPT {
|
||||||
std::swap(asset_header, o.asset_header);
|
std::swap(asset_header, o.asset_header);
|
||||||
std::swap(health, o.health);
|
std::swap(health, o.health);
|
||||||
std::swap(hp, o.hp);
|
std::swap(mana, o.mana);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ inline void AssetA::UnPackTo(AssetAT *_o, const ::flatbuffers::resolver_function
|
|||||||
(void)_resolver;
|
(void)_resolver;
|
||||||
{ auto _e = asset_header(); if (_e) { if(_o->asset_header) { _e->UnPackTo(_o->asset_header.get(), _resolver); } else { _o->asset_header = eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(_e->UnPack(_resolver)); } } else if (_o->asset_header) { _o->asset_header.reset(); } }
|
{ auto _e = asset_header(); if (_e) { if(_o->asset_header) { _e->UnPackTo(_o->asset_header.get(), _resolver); } else { _o->asset_header = eastl::unique_ptr<Bigfoot::Flat::AssetHeaderT>(_e->UnPack(_resolver)); } } else if (_o->asset_header) { _o->asset_header.reset(); } }
|
||||||
{ auto _e = health(); _o->health = _e; }
|
{ auto _e = health(); _o->health = _e; }
|
||||||
{ auto _e = hp(); _o->hp = _e; }
|
{ auto _e = mana(); _o->mana = _e; }
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ::flatbuffers::Offset<AssetA> CreateAssetA(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
|
inline ::flatbuffers::Offset<AssetA> CreateAssetA(::flatbuffers::FlatBufferBuilder &_fbb, const AssetAT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
|
||||||
@@ -162,12 +162,12 @@ inline ::flatbuffers::Offset<AssetA> AssetA::Pack(::flatbuffers::FlatBufferBuild
|
|||||||
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const AssetAT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
|
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const AssetAT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
|
||||||
auto _asset_header = _o->asset_header ? CreateAssetHeader(_fbb, _o->asset_header.get(), _rehasher) : 0;
|
auto _asset_header = _o->asset_header ? CreateAssetHeader(_fbb, _o->asset_header.get(), _rehasher) : 0;
|
||||||
auto _health = _o->health;
|
auto _health = _o->health;
|
||||||
auto _hp = _o->hp;
|
auto _mana = _o->mana;
|
||||||
return Bigfoot::Flat::CreateAssetA(
|
return Bigfoot::Flat::CreateAssetA(
|
||||||
_fbb,
|
_fbb,
|
||||||
_asset_header,
|
_asset_header,
|
||||||
_health,
|
_health,
|
||||||
_hp);
|
_mana);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const ::flatbuffers::TypeTable *AssetATypeTable() {
|
inline const ::flatbuffers::TypeTable *AssetATypeTable() {
|
||||||
@@ -182,7 +182,7 @@ inline const ::flatbuffers::TypeTable *AssetATypeTable() {
|
|||||||
static const char * const names[] = {
|
static const char * const names[] = {
|
||||||
"asset_header",
|
"asset_header",
|
||||||
"health",
|
"health",
|
||||||
"hp"
|
"mana"
|
||||||
};
|
};
|
||||||
static const ::flatbuffers::TypeTable tt = {
|
static const ::flatbuffers::TypeTable tt = {
|
||||||
::flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, nullptr, names
|
::flatbuffers::ST_TABLE, 3, type_codes, type_refs, nullptr, nullptr, names
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ class Bigfoot(ConanFile):
|
|||||||
self.requires("unordered_dense/4.8.1@bigfootdev/main", transitive_headers=True)
|
self.requires("unordered_dense/4.8.1@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("mimalloc/3.1.5@bigfootdev/main", transitive_headers=True)
|
self.requires("mimalloc/3.1.5@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("stduuid/1.2.3@bigfootdev/main", transitive_headers=True)
|
self.requires("stduuid/1.2.3@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("sqlite3/3.51.0@bigfootdev/main", transitive_headers=True)
|
self.requires("sqlite3/3.51.2@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("cli11/2.6.0")
|
self.requires("cli11/2.6.0")
|
||||||
self.requires("rapidhash/3.0@bigfootdev/main", transitive_headers=True)
|
self.requires("rapidhash/3.0@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("effolkronium-random/1.5.0", transitive_headers=True)
|
self.requires("effolkronium-random/1.5.0", transitive_headers=True)
|
||||||
@@ -77,10 +77,10 @@ class Bigfoot(ConanFile):
|
|||||||
self.requires("cpptrace/1.0.4", transitive_headers=True)
|
self.requires("cpptrace/1.0.4", transitive_headers=True)
|
||||||
|
|
||||||
if(self.options.tracy):
|
if(self.options.tracy):
|
||||||
self.requires("tracy/0.12.2", transitive_headers=True)
|
self.requires("tracy/0.13.1", transitive_headers=True)
|
||||||
|
|
||||||
self.requires("glm/1.0.1", transitive_headers=True)
|
self.requires("glm/1.0.1", transitive_headers=True)
|
||||||
self.requires("lodepng/cci.20250727@bigfootdev/main", transitive_headers=True)
|
self.requires("lodepng/cci.20260210@bigfootdev/main", transitive_headers=True)
|
||||||
self.requires("imgui/1.92.5-docking", transitive_headers=True)
|
self.requires("imgui/1.92.5-docking", transitive_headers=True)
|
||||||
|
|
||||||
if(self.options.vulkan):
|
if(self.options.vulkan):
|
||||||
|
|||||||
Reference in New Issue
Block a user