Skip to content

Commit 1f498dc

Browse files
committed
Added ReflectEnumType helper
1 parent d5938ec commit 1f498dc

5 files changed

Lines changed: 20 additions & 54 deletions

File tree

Include/Core/Input.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ namespace CE
300300
private:
301301
bool HasFocus(bool checkFocus) const;
302302

303-
inline static constexpr float sTriggerThreshold = 0.15f;
303+
static constexpr float sTriggerThreshold = 0.15f;
304304

305305
friend ReflectAccess;
306306
static MetaType Reflect();
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
#pragma once
2+
#include "magic_enum/magic_enum.hpp"
23
#include "Utilities/Reflect/ReflectFieldType.h"
34

45
namespace CE
56
{
67
template<typename T>
7-
void ReflectEnumType(MetaType& type)
8+
MetaType ReflectEnumType(bool isScriptable) requires magic_enum::detail::is_enum_v<T>
89
{
9-
ASSERT(MakeTypeId<T>() == type.GetTypeId());
10+
MetaType type{ MetaType::T<T>{}, magic_enum::enum_type_name<T>() };
1011

11-
if (type.GetProperties().Has(Props::sIsScriptableTag))
12+
if (isScriptable)
1213
{
13-
type.GetProperties().Add(Props::sIsScriptOwnableTag);
14+
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
15+
16+
type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties().Add(Props::sIsScriptableTag);
17+
type.AddFunc(std::not_equal_to<T>(), OperatorType::inequal).GetProperties().Add(Props::sIsScriptableTag);
1418
}
1519

1620
ReflectFieldType<T>(type);
21+
return type;
1722
}
1823
}

Include/Utilities/Reflect/ReflectFieldType.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ namespace CE
2525
return;
2626
}
2727

28-
MetaProps& equalFuncProps = type.AddFunc([](const T& lhs, const T& rhs) { return lhs == rhs; }, OperatorType::equal).GetProperties();
28+
MetaProps& equalFuncProps = type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties();
2929

30-
if (type.GetProperties().Has(Props::sIsScriptableTag))
30+
if (type.GetProperties().Has(Props::sIsScriptableTag)
31+
&& !equalFuncProps.Has(Props::sIsScriptableTag))
3132
{
3233
equalFuncProps.Add(Props::sIsScriptableTag);
3334
}

Source/BasicDataTypes/CollisionRules.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "Meta/MetaType.h"
55
#include "Meta/MetaProps.h"
6+
#include "Meta/ReflectedTypes/ReflectEnums.h"
67
#include "Utilities/Reflect/ReflectComponentType.h"
78
#include "Utilities/Reflect/ReflectFieldType.h"
89

@@ -77,16 +78,7 @@ void CE::CollisionRules::DisplayWidget(const std::string& name)
7778

7879
CE::MetaType Reflector<CE::CollisionLayer>::Reflect()
7980
{
80-
using namespace CE;
81-
using T = CollisionLayer;
82-
MetaType type{ MetaType::T<T>{}, "CollisionLayer" };
83-
84-
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
85-
type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties().Add(Props::sIsScriptableTag);
86-
type.AddFunc(std::not_equal_to<T>(), OperatorType::inequal).GetProperties().Add(Props::sIsScriptableTag);
87-
ReflectFieldType<T>(type);
88-
89-
return type;
81+
return CE::ReflectEnumType<CE::CollisionLayer>(true);
9082
}
9183

9284
CE::MetaType Reflector<CE::CollisionRules>::Reflect()

Source/Core/Input.cpp

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include "Meta/MetaType.h"
55
#include "Meta/MetaProps.h"
6+
#include "Meta/ReflectedTypes/ReflectEnums.h"
67
#include "Utilities/Reflect/ReflectFieldType.h"
78

89
CE::MetaType CE::Input::Reflect()
@@ -33,53 +34,20 @@ CE::MetaType CE::Input::Reflect()
3334

3435
CE::MetaType Reflector<CE::Input::KeyboardKey>::Reflect()
3536
{
36-
using namespace CE;
37-
using T = Input::KeyboardKey;
38-
MetaType type{ MetaType::T<T>{}, "KeyboardKey" };
39-
40-
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
41-
type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties().Add(Props::sIsScriptableTag);
42-
type.AddFunc(std::not_equal_to<T>(), OperatorType::inequal).GetProperties().Add(Props::sIsScriptableTag);
43-
ReflectFieldType<T>(type);
44-
45-
return type;
37+
return CE::ReflectEnumType<CE::Input::KeyboardKey>(true);
4638
}
4739

4840
CE::MetaType Reflector<CE::Input::GamepadAxis>::Reflect()
4941
{
50-
using namespace CE;
51-
using T = Input::GamepadAxis;
52-
MetaType type{ MetaType::T<T>{}, "GamepadAxis" };
53-
54-
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
55-
ReflectFieldType<T>(type);
56-
return type;
42+
return CE::ReflectEnumType<CE::Input::GamepadAxis>(true);
5743
}
5844

5945
CE::MetaType Reflector<CE::Input::GamepadButton>::Reflect()
6046
{
61-
using namespace CE;
62-
using T = Input::GamepadButton;
63-
MetaType type{ MetaType::T<T>{}, "GamepadButton" };
64-
65-
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
66-
type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties().Add(Props::sIsScriptableTag);
67-
type.AddFunc(std::not_equal_to<T>(), OperatorType::inequal).GetProperties().Add(Props::sIsScriptableTag);
68-
ReflectFieldType<T>(type);
69-
70-
return type;
47+
return CE::ReflectEnumType<CE::Input::GamepadButton>(true);
7148
}
7249

7350
CE::MetaType Reflector<CE::Input::MouseButton>::Reflect()
7451
{
75-
using namespace CE;
76-
using T = Input::MouseButton;
77-
MetaType type{ MetaType::T<T>{}, "MouseButton" };
78-
79-
type.GetProperties().Add(Props::sIsScriptableTag).Add(Props::sIsScriptOwnableTag);
80-
type.AddFunc(std::equal_to<T>(), OperatorType::equal).GetProperties().Add(Props::sIsScriptableTag);
81-
type.AddFunc(std::not_equal_to<T>(), OperatorType::inequal).GetProperties().Add(Props::sIsScriptableTag);
82-
ReflectFieldType<T>(type);
83-
84-
return type;
52+
return CE::ReflectEnumType<CE::Input::MouseButton>(true);
8553
}

0 commit comments

Comments
 (0)