LkEngine 0.1.2
 
Loading...
Searching...
No Matches
CoreMacros

Core Macros . More...

Macros

#define LCLASS(Class)
 
#define LSTRUCT(Struct)
 
#define LOBJECT_REGISTER(...)
 
#define LASSET(Class)
 
#define LASSET_REGISTER(...)
 
#define LPANEL(...)
 
#define LPANEL_REGISTER(...)
 

Detailed Description

Core Macros .

Todo
: Should do a required/static_assert on the LClass registration to make sure a class that inherits LObject in fact do implement the LCLASS macro. Otherwise there is risk of undefined behaviour because the LClass registration won't take place.

Macro Definition Documentation

◆ LASSET

#define LASSET ( Class)
Value:
public: \
LCLASS(Class); \
FORCEINLINE virtual bool IsAsset() const override { return true; } \
template<typename AssetType = Class> \
std::enable_if<!std::is_same_v<AssetType, LAsset>, EAssetType> \
FORCEINLINE GetAssetType() const { return GetStaticType(); } \

LAsset derives from LObject.

Note
: Not done.

◆ LASSET_REGISTER

#define LASSET_REGISTER ( ...)
Value:
LClass* ClassObject = const_cast<LClass*>(LClass::Get(typeid(this))); \
if (!ClassObject) \
{ \
ClassObject = const_cast<LClass*>(ObjectRegistration()); \
LObjectBase::SetClass(const_cast<LClass*>(ClassObject)); \
} \
Note
: Not done.

◆ LCLASS

#define LCLASS ( Class)
Value:
public: \
using BaseClass = LObject; \
using ThisClass = Class; \
virtual std::string ClassName() const override { return #Class; } \
static std::string_view StaticClassName() { return #Class; } \
static const ::LkEngine::LClass* StaticClass() \
{ \
return ::LkEngine::LClass::Get(::LkEngine::LType<Class>::ID()); \
} \
virtual const ::LkEngine::LClass* ObjectRegistration() override \
{ \
if (!LObject_bRegistered) \
{ \
if (ObjectClass) \
{ \
LObject_bRegistered = true; \
} \
return ObjectClass; \
} \
return ::LkEngine::LClass::Get(::LkEngine::LType<Class>::ID()); \
} \
inline static bool LObject_bRegistered = false; \
inline static ::LkEngine::EClassType LObject_Type = ::LkEngine::EClassType::LClass;
Definition Class.h:17
static LClass * Register(std::string_view ClassName)
Register metadata for a LClass.
Definition Class.h:67
Definition TypeTrait.h:29

Base classes that inherit from LObject are required to be declared as an LCLASS. Adds the static class type to the metadata registry and implements abstract functions and other base functionality from LObject.

LObject

◆ LOBJECT_REGISTER

#define LOBJECT_REGISTER ( ...)
Value:
::LkEngine::LClass* ClassObject = const_cast<::LkEngine::LClass*>(::LkEngine::LClass::Get(typeid(this))); \
if (!ClassObject) \
{ \
ClassObject = const_cast<::LkEngine::LClass*>(ObjectRegistration()); \
if (!IsClassValid()) \
{ \
::LkEngine::LObjectBase::SetClass(const_cast<::LkEngine::LClass*>(ClassObject)); \
} \
} \
static const LClass * Get(const std::type_index &ClassType)
Retrieve metadata for a LClass.
Definition Class.h:53
Todo
:
  • Determine if to register class or struct (based on LCLASS or LSTRUCT).
  • The class registration should be re-evaluated, as the call to ObjectRegistration should not be needed. The initial call to LClass::Get should be enough.
Note
: Not done.

◆ LPANEL

#define LPANEL ( ...)
Value:
LCLASS(__VA_ARGS__);
#define LCLASS(Class)
Definition CoreMacros.h:226

Declaration for UI panels that derive from LPanel.

Note
: Mostly a placeholder for now.

◆ LPANEL_REGISTER

#define LPANEL_REGISTER ( ...)
Value:
LOBJECT_REGISTER(__VA_ARGS__);
#define LOBJECT_REGISTER(...)
Definition CoreMacros.h:297

Registration for UI panels that derive from LPanel.

Note
: Mostly a placeholder for now.

◆ LSTRUCT

#define LSTRUCT ( Struct)
Value:
public: \
using BaseClass = LObject; \
using ThisStruct = Struct; \
virtual std::string ClassName() const override { return #Struct; } \
static std::string_view StaticClassName() { return #Struct; } \
static const ::LkEngine::LClass* StaticClass() \
{ \
return ::LkEngine::LClass::Get(::LkEngine::LType<Struct>::ID()); \
} \
virtual const ::LkEngine::LClass* ObjectRegistration() override \
{ \
if (!LObject_bRegistered) \
{ \
if (ObjectClass) \
{ \
LObject_bRegistered = true; \
} \
return ObjectClass; \
} \
return ::LkEngine::LClass::Get(::LkEngine::LType<Struct>::ID()); \
} \
inline static bool LObject_bRegistered = false; \
inline static ::LkEngine::EClassType LObject_Type = ::LkEngine::EClassType::LStruct;
Todo
:
  • SFINAE on LCLASS/LSTRUCT implementations.
  • Change 'Class' to 'Struct' in functions.
  • Struct implementation similar to LClass.