forked from 3DRadSpace/3D_Rad_Space
-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathReflection.hpp
More file actions
73 lines (53 loc) · 4.91 KB
/
Copy pathReflection.hpp
File metadata and controls
73 lines (53 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#pragma once
/// ---------------------------------------------------------------------------
/// Reflecting objects:
/// ---------------------------------------------------------------------------
#include "ReflectedObject.hpp"
///Reflects a class that inherits IObject.
#define REFL_BEGIN(ObjectType, ObjectName, ObjectCategory, ObjectDescription) ::Engine3DRadSpace::Reflection::ReflectedObject ObjectType##ReflInstance( ::Engine3DRadSpace::Reflection::ObjectTag<ObjectType>{}, ObjectName, ObjectCategory, ObjectDescription, {
/// Reflects a field, with given information.
#define REFL_FIELD(ObjectType,FieldType, FieldName, FieldVisibleName, DefaultValue, Description) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::ReflectedField<FieldType>(offsetof(ObjectType, FieldName), FieldVisibleName, Description, DefaultValue)),
/// Reflects a field with specified get/set functions.
#define REFL_FIELD_GS(ObjectType, FieldType, FnGet, FnSet, FieldVisibleName, DefaultValue, Description) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>(new ::Engine3DRadSpace::Reflection::ReflectedFieldGS<FieldType, ObjectType>( FieldVisibleName, Description, FnGet, FnSet, DefaultValue)),
//Reflection "declaration" ending.
#define REFL_END static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::ReflectedField<void>())});
//Class reflection forward declaration.
#define REFL_FWD(ObjectName) extern __declspec(dllexport) ::Engine3DRadSpace::Reflection::ReflectedObject ObjectName##ReflInstance;
/// ---------------------------------------------------------------------------
/// Reflecting enums:
/// ---------------------------------------------------------------------------
#include "ReflectedEnum.hpp"
//Reflects a enum, for use in editor
#define REFL_ENUM_BEGIN(EnumType, EnumName) ::Engine3DRadSpace::Reflection::ReflectedEnum EnumType##EnumReflInstance(::Engine3DRadSpace::Tag<EnumType>{}, EnumName, std::initializer_list<::Engine3DRadSpace::Reflection::EnumEntry>{
//Reflects a enum entry, with a visible name and a number
#define REFL_ENUM_ENTRY(Name, Num) ::Engine3DRadSpace::Reflection::EnumEntry{ .VisibleName = Name, .Value = static_cast<int>(Num)},
//Ends enum reflection
#define REFL_ENUM_END ::Engine3DRadSpace::Reflection::EnumEntry{ .VisibleName = "INT_MAX", .Value = std::numeric_limits<int>::max()}});
//Forward reference to enumeration reflection instance
#define REFL_ENUM_FWD(EnumType) extern ::Engine3DRadSpace::Reflection::ReflectedEnum EnumName##EnumReflInstance;
//Reflect a enum field
#define REFL_FIELD_ENUM(ObjectType, EnumType, FieldName, FieldVisibleName, DefaultValue, Description) static_cast<::Engine3DRadSpace::Reflection::IReflectedEnum*>()
/// ---------------------------------------------------------------------------
/// Reflecting assets:
/// ---------------------------------------------------------------------------
#include "ReflectedAsset.hpp"
#define REFL_ASSET_ID(ObjectType, AssetType, FieldName, FieldVisibleName, Description) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::ReflectedAsset<ObjectType, AssetType>(offsetof(ObjectType, FieldName), FieldVisibleName, Description)),
/// ---------------------------------------------------------------------------
/// Reflecting functions:
/// ---------------------------------------------------------------------------
#include "ReflectedMemberFunction.hpp"
//Reflect a member function(method)
#define REFL_METHOD(ObjectType, ReturnType, Function, Name, ...) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::ReflectedMemberFunction<ReturnType, ObjectType, __VA_ARGS__>(Name, Function)),
#include "ReflectedFunction.hpp"
#define REFL_FUNCTION(ReturnType, Function, Name, ...) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::ReflectedFunction<ReturnType, __VA_ARGS__>(Name, Function)),
/// ---------------------------------------------------------------------------
/// Metadata
/// ---------------------------------------------------------------------------
/// Supported attributes are:
/// - "HelpURL": Provides a URL to the help documentation for the object being reflected.
/// - "Title" : Custom title for the editor object window. Default is "{Object name} object"
/// - "CustomWindow": Specifies that the given object doesn't use the default editor window, but an custom one instead. The value is the name of the function that creates the custom window.
/// Refer to CustomEditObjectWindow inside the Plugin library for more details.
/// WARNING: The function name must be unique across all loaded modules.
#include "Attribute.hpp"
#define REFL_ATTR(Name, Value) static_cast<::Engine3DRadSpace::Reflection::IReflectedField*>( new ::Engine3DRadSpace::Reflection::Attribute(Name, Value)),