Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/I/IFormFactory.h
T
2026-05-30 18:33:24 +12:00

37 lines
1.4 KiB
C++

#pragma once
#include "RE/E/ENUM_FORM_ID.h"
namespace RE
{
enum class OBJECT_CATEGORY_TYPE;
enum class OBJECT_TYPE;
class __declspec(novtable) IFormFactory
{
public:
static constexpr auto RTTI{ RTTI::IFormFactory };
static constexpr auto VTABLE{ VTABLE::IFormFactory };
virtual ~IFormFactory(); // 00
// add
[[nodiscard]] virtual TESForm* DoCreate() = 0; // 01
[[nodiscard]] virtual const char* GetFormName() const = 0; // 02
[[nodiscard]] virtual ENUM_FORM_ID GetFormID() const = 0; // 03
[[nodiscard]] virtual const char* GetObjectName() const { return nullptr; } // 04
[[nodiscard]] virtual OBJECT_TYPE GetObjectType() const; // 05
[[nodiscard]] virtual OBJECT_CATEGORY_TYPE GetObjectCategory() const; // 06
[[nodiscard]] virtual BGSMod::Property::BridgeI* GetPropertyBridge() const { return nullptr; } // 07
[[nodiscard]] static auto GetFormFactories()
-> std::span<IFormFactory*, std::to_underlying(ENUM_FORM_ID::kTotal)>
{
constexpr auto len = std::to_underlying(ENUM_FORM_ID::kTotal);
static REL::Relocation<IFormFactory*(*)[len]> factories{ ID::IFormFactory::Factories };
return { *factories };
}
};
static_assert(sizeof(IFormFactory) == 0x8);
}