99#include " OverEngine/Scene/TransformComponent.h"
1010
1111#define WRENPP_BIND_STATIC (f, sig ) .bindFunction<decltype (&f), &f>(true , sig)
12+ #define WRENPP_BIND_STATIC_EXACT (f, args ) .bindFunction<decltype (&f), &f>(true , #f " (" args " )" )
13+
1214#define WRENPP_BIND_GETTER (f, sig ) .bindGetter<decltype (f), &f>(sig)
1315#define WRENPP_BIND_SETTER (f, sig ) .bindSetter<decltype (f), &f>(sig)
16+ #define WRENPP_BIND_GETSET (klass, f ) WRENPP_BIND_GETTER (klass::f, #f) WRENPP_BIND_SETTER (klass::f, #f " =(_)" )
1417
1518namespace OverEngine
1619{
1720 namespace WrenBindings
1821 {
19- bool Input_isKeyPressed (double keycode)
22+ #define WREN_INPUT (name, wrenParams, nativeCallParams ) \
23+ auto Input_##name(wrenParams) \
24+ { \
25+ return Input::name (nativeCallParams); \
26+ }
27+
28+ WREN_INPUT (IsKeyPressed, int keycode, (KeyCode)keycode)
29+ WREN_INPUT (IsMouseButtonPressed, int keycode, (KeyCode)keycode)
30+ WREN_INPUT (GetMousePosition,,)
31+ WREN_INPUT (GetMouseX,,)
32+ WREN_INPUT (GetMouseY,,)
33+
34+ #define WREN_COMPONENT_HAS (component ) \
35+ bool component##_has(Entity& entity) \
36+ { \
37+ return entity.HasComponent <component>(); \
38+ }
39+
40+ WREN_COMPONENT_HAS (NameComponent)
41+ WREN_COMPONENT_HAS (TransformComponent)
42+ WREN_COMPONENT_HAS (RigidBody2DComponent)
43+
44+ const String& NameComponent_name (Entity& entity)
2045 {
21- return Input::IsKeyPressed ((KeyCode)keycode) ;
46+ return entity. GetComponent <NameComponent>(). Name ;
2247 }
2348
24- String EntityInternals_getName (Entity& entity)
49+ void NameComponent_set_name (Entity& entity, const String& name )
2550 {
26- return entity.GetComponent <NameComponent>().Name ;
51+ entity.GetComponent <NameComponent>().Name = name ;
2752 }
2853
29- Vector3 EntityInternals_getPosition (Entity& entity)
54+ Vector3 TransformComponent_position (Entity& entity)
3055 {
3156 return entity.GetComponent <TransformComponent>().GetPosition ();
3257 }
3358
34- void EntityInternals_setPosition (Entity& entity, const Vector3& position)
59+ void TransformComponent_set_position (Entity& entity, const Vector3& position)
3560 {
3661 entity.GetComponent <TransformComponent>().SetPosition (position);
3762 }
3863
39- #define COMPONENT_HAS (component ) \
40- bool component##_has(Entity& entity) \
41- { \
42- return entity.HasComponent <component>(); \
43- }
44-
45- COMPONENT_HAS (TransformComponent)
46- COMPONENT_HAS (RigidBody2DComponent)
47-
48- void RigidBody2DComponent_applyLinearImpulseToCenter (Entity& entity, const Vector3& impulse)
64+ void RigidBody2DComponent_applyLinearImpulseToCenter (Entity& entity, const Vector2& impulse)
4965 {
5066 entity.GetComponent <RigidBody2DComponent>().RigidBody ->ApplyLinearImpulseToCenter (impulse);
5167 }
@@ -57,44 +73,49 @@ namespace OverEngine
5773
5874 m_VM.beginModule (" input" )
5975 .beginClass (" Input" )
60- WRENPP_BIND_STATIC (Input_isKeyPressed, " isKeyPressed(_)" )
76+ WRENPP_BIND_STATIC (Input_IsKeyPressed, " isKeyPressed(_)" )
77+ WRENPP_BIND_STATIC (Input_IsMouseButtonPressed, " isMouseButtonPressed(_)" )
78+
79+ WRENPP_BIND_STATIC (Input_GetMousePosition, " mousePosition" )
80+ WRENPP_BIND_STATIC (Input_GetMouseX, " mouseX" )
81+ WRENPP_BIND_STATIC (Input_GetMouseY, " mouseY" )
6182 .endClass ()
6283 .endModule ();
6384
6485 m_VM.beginModule (" entity" )
65- .beginClass (" EntityInternals" )
66- WRENPP_BIND_STATIC (EntityInternals_getName, " getName(_)" )
67- WRENPP_BIND_STATIC (EntityInternals_getPosition, " getPosition(_)" )
68- WRENPP_BIND_STATIC (EntityInternals_setPosition, " setPosition(_,_)" )
69- .endClass ()
70-
7186 .bindClass <Entity>(" Entity" )
7287 .endClass ()
7388 .endModule ();
7489
7590 m_VM.beginModule (" components" )
7691 .beginClass (" ComponentInternals" )
77- WRENPP_BIND_STATIC (RigidBody2DComponent_applyLinearImpulseToCenter , " RigidBody2DComponent_applyLinearImpulseToCenter(_,_) " )
78- . endClass ( )
92+ WRENPP_BIND_STATIC_EXACT (NameComponent_name , " _ " )
93+ WRENPP_BIND_STATIC_EXACT (NameComponent_set_name, " _,_ " )
7994
80- .beginClass (" TransformComponent" )
81- WRENPP_BIND_STATIC (TransformComponent_has, " has(_)" )
82- .endClass ()
95+ WRENPP_BIND_STATIC_EXACT (TransformComponent_position, " _" )
96+ WRENPP_BIND_STATIC_EXACT (TransformComponent_set_position, " _,_" )
8397
84- .beginClass (" RigidBody2DComponent" )
85- WRENPP_BIND_STATIC (RigidBody2DComponent_has, " has(_)" )
98+ WRENPP_BIND_STATIC_EXACT (RigidBody2DComponent_applyLinearImpulseToCenter, " _,_" )
8699 .endClass ()
100+
101+ #define BIND_WREN_COMPONENT_HAS (component ) .beginClass(#component) WRENPP_BIND_STATIC (component##_has, " has(_)" ).endClass()
102+
103+ BIND_WREN_COMPONENT_HAS (NameComponent)
104+ BIND_WREN_COMPONENT_HAS (TransformComponent)
105+ BIND_WREN_COMPONENT_HAS (RigidBody2DComponent)
106+
87107 .endModule ();
88108
89109 m_VM.beginModule (" math" )
90110 .bindClass <Vector3, float , float , float >(" Vector3" )
91- WRENPP_BIND_GETTER (Vector3::x, " x" )
92- WRENPP_BIND_GETTER (Vector3::y, " y" )
93- WRENPP_BIND_GETTER (Vector3::z, " z" )
111+ WRENPP_BIND_GETSET (Vector3, x)
112+ WRENPP_BIND_GETSET (Vector3, y)
113+ WRENPP_BIND_GETSET (Vector3, z)
114+ .endClass ()
94115
95- WRENPP_BIND_SETTER (Vector3::x, " x=(_) " )
96- WRENPP_BIND_SETTER (Vector3::y, " y=(_) " )
97- WRENPP_BIND_SETTER (Vector3::z, " z=(_) " )
116+ . bindClass <Vector2, float , float >( " Vector2 " )
117+ WRENPP_BIND_GETSET (Vector2, x )
118+ WRENPP_BIND_GETSET (Vector2, y )
98119 .endClass ()
99120 .endModule ();
100121
0 commit comments