#pragma once #include "RE/B/BSResource_ErrorCode.h" #include "RE/N/NiPointer.h" namespace RE { enum class ENUM_LOD_MULT; class NiNode; class BSModelDB { public: using Handle = void*; class DBTraits { public: class ArgsType { public: // members REX::TEnumSet lodFadeMult; // 00 std::uint32_t loadLevel; // 04 std::uint8_t prepareAfterLoad: 1; // 08:00 std::uint8_t faceGenModel: 1; // 08:01 std::uint8_t useErrorMarker: 1; // 08:02 std::uint8_t performProcess: 1; // 08:03 std::uint8_t createFadeNode: 1; // 08:04 std::uint8_t loadTextures: 1; // 08:05 }; static_assert(sizeof(ArgsType) == 0x0C); }; static_assert(std::is_empty_v); class HandelListHead { public: class HandleList { public: // members Handle handle; // 00 HandleList* next; // 08 }; static_assert(sizeof(HandleList) == 0x10); // members HandleList* head; // 00 }; static_assert(sizeof(HandelListHead) == 0x8); static BSResource::ErrorCode Demand( const char* a_name, Handle& a_result, const DBTraits::ArgsType& a_args) { using func_t = BSResource::ErrorCode (*)(const char*, Handle&, const DBTraits::ArgsType&); static REL::Relocation func{ ID::BSModelDB::Demand1 }; return func(a_name, a_result, a_args); } static BSResource::ErrorCode Demand( const char* a_name, NiPointer* a_result, const DBTraits::ArgsType& a_args) { using func_t = BSResource::ErrorCode (*)(const char*, NiPointer*, const DBTraits::ArgsType&); static REL::Relocation func{ ID::BSModelDB::Demand2 }; return func(a_name, a_result, a_args); } }; }