KarmaEngine
Game Engine for practical learning and research purposes
Loading...
Searching...
No Matches
Class.h
Go to the documentation of this file.
1
10
11#pragma once
12
13#include "Object.h"
14
15namespace Karma
16{
17 /*-----------------------------------------------------------------------------
18 UField.
19 -----------------------------------------------------------------------------*/
20
24 class KARMA_API UField : public UObject
25 {
27
28
29 //UField* m_Next;
30
31
39 UClass* GetOwnerClass() const;
40
42 //UStruct* GetOwnerStruct() const;
43
49 const std::string& GetAuthoredName() const;
50 };
51
52 /*-----------------------------------------------------------------------------
53 UStruct.
54 -----------------------------------------------------------------------------*/
55
59 class KARMA_API UStruct : public UField
60 {
62
63 public:
72 bool IsChildOf(const UStruct* SomeBase) const;
73
83 {
84 return m_SuperStruct;
85 }
86
110 {
111 return m_PropertiesSize;
112 }
113
122 virtual void SetSuperStruct(UStruct* NewSuperStruct);
123
124 private:
126 UStruct* m_SuperStruct;
127
128 public:
140
150 };
151
157 class KARMA_API UClass : public UStruct
158 {
160
161 public:
167 UClass();
168
176 UClass(const std::string& name);
177
191 UClass(const std::string& name, size_t size, size_t alignment, ClassConstructorType inClassConstructor);
192
193 // The required type for the outer of instances of this class
194 //UClass* m_ClassWithin;
195
196 // Only for hot reload purposes
197 // typedef UObject* (*ClassVTableHelperCtorCallerType) (FVTableHelper& Helper);
198
205 ClassConstructorType m_ClassConstructor;
206
213
214 public:
215 // UObject interface.
223 virtual const std::string& GetDesc() override;
224
234 FORCEINLINE bool HasAnyClassFlags(EClassFlags FlagsToCheck) const
235 {
236 return EnumHasAnyFlags(m_ClassFlags, FlagsToCheck) != 0;
237 }
238
239 public:
246 virtual void SetupObjectInitializer(FObjectInitializer& ObjectInitializer) const {}
247
255 UObject* GetDefaultObject(bool bCreateIfNeeded = true) const
256 {
257 if (/*m_ClassDefaultObject == nullptr &&*/ bCreateIfNeeded)
258 {
259 // some UE macro
260 const_cast<UClass*>(this)->CreateDefaultObject();
261 }
262
263 return nullptr;//m_ClassDefaultObject;
264 }
265
272 template<class T>
274 {
275 UObject* Ret = GetDefaultObject();
276 KR_CORE_ASSERT(Ret->IsA(T::StaticClass()), "Class {0} is not subclass of UObject", T::GetName());
277 return (T*)Ret;
278 }
279
286 {
287 return (UClass*)GetSuperStruct();
288 }
289
296 {
297 return m_MinAlignment;
298 }
299
300 // UStruct interface.
301
310 virtual void SetSuperStruct(UStruct* NewSuperStruct) override;
311
320 virtual void InitPropertiesFromCustomList(uint8_t* DataPtr, const uint8_t* DefaultDataPtr) {}
321
322 protected:
329 virtual UObject* CreateDefaultObject();
330
331 public:
333 //UObject* m_ClassDefaultObject;
334
335 private:
337 //bool m_bLayoutChanging;
338 };
339}
#define KARMA_API
Defining Karma's API macro for storage class information.
Definition Core.h:41
#define FORCEINLINE
Typical inlining macro for clarity.
Definition Core.h:157
#define DECLARE_KARMA_CLASS(TClass, TSuperClass)
Karma's gamecode object class declaration.
Definition GFrameworkMacros.h:44
This file contains the class UObject along with helper functions.
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Sees if a specified flag(s) exists in the linear combination of flags.
Definition UObjectGlobals.h:45
EClassFlags
Flags describing a class.
Definition UObjectGlobals.h:57
Internal class to finalize UObject creation (initialize properties) after the real C++ constructor is...
Definition UObjectGlobals.h:921
An object class.
Definition Class.h:158
UClass()
Default constructor.
Definition Class.cpp:16
UClass * GetSuperClass() const
Definition Class.h:285
T * GetDefaultObject() const
Definition Class.h:273
virtual void InitPropertiesFromCustomList(uint8_t *DataPtr, const uint8_t *DefaultDataPtr)
Definition Class.h:320
EClassFlags m_ClassFlags
Definition Class.h:212
FORCEINLINE size_t GetMinAlignment() const
Definition Class.h:295
UObject * GetDefaultObject(bool bCreateIfNeeded=true) const
Definition Class.h:255
virtual const std::string & GetDesc() override
Definition Class.cpp:69
virtual UObject * CreateDefaultObject()
Definition Class.cpp:126
FORCEINLINE bool HasAnyClassFlags(EClassFlags FlagsToCheck) const
Definition Class.h:234
virtual void SetupObjectInitializer(FObjectInitializer &ObjectInitializer) const
Definition Class.h:246
ClassConstructorType m_ClassConstructor
Definition Class.h:205
Base class of reflection data objects.
Definition Class.h:25
FORCEINLINE bool IsA(OtherClassType SomeBase) const
Definition UObjectBase.h:278
The base class of all the game code relevant objects.
Definition Object.h:106
UObject()
Definition Object.cpp:10
Base class for all UObject types that contain fields.
Definition Class.h:60
FORCEINLINE size_t GetPropertiesSize() const
Total size of all UProperties, the allocated structure may be larger due to alignment.
Definition Class.h:109
bool IsChildOf(const UStruct *SomeBase) const
Definition Class.cpp:98
size_t m_MinAlignment
Definition Class.h:149
UStruct * GetSuperStruct() const
Definition Class.h:82
size_t m_PropertiesSize
Definition Class.h:139