Skip to content

Commit 68e4359

Browse files
committed
Add aditional wren bindings
1 parent 1dbf92f commit 68e4359

9 files changed

Lines changed: 122 additions & 56 deletions

File tree

OverEngine/src/OverEngine/Core/FileSystem/FileSystem.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace OverEngine
2121
}
2222
else
2323
{
24-
OE_CORE_ASSERT("Could not open file '{0}'", path);
24+
OE_CORE_ASSERT(false, "Could not open file '{0}'", path);
2525
}
2626

2727
return result;

OverEngine/src/OverEngine/Input/Input.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ namespace OverEngine
99
class Input
1010
{
1111
public:
12+
// TODO: Maybe merge these two functions?
1213
static bool IsKeyPressed(KeyCode keycode);
1314
static bool IsMouseButtonPressed(KeyCode button);
15+
1416
static Vector2 GetMousePosition();
1517
static float GetMouseX();
1618
static float GetMouseY();

OverEngine/src/OverEngine/Scripting/WrenBindings.cpp

Lines changed: 57 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,59 @@
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

1518
namespace 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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,40 @@
11
class ComponentInternals {
2+
foreign static NameComponent_name(entity)
3+
foreign static NameComponent_set_name(entity, name)
4+
5+
foreign static TransformComponent_position(entity)
6+
foreign static TransformComponent_set_position(entity, position)
7+
28
foreign static RigidBody2DComponent_applyLinearImpulseToCenter(entity, impulse)
39
}
410

5-
class TransformComponent {
11+
class Component {
12+
construct new(entity) { _entity = entity }
13+
entity { _entity }
14+
}
15+
16+
class NameComponent is Component {
17+
// Private to engine
618
foreign static has(entity)
19+
construct new(entity) { super(entity) }
720

8-
construct new(entity) { _entity = entity }
21+
name { ComponentInternals.NameComponent_name(entity) }
22+
name=(rhs) { ComponentInternals.NameComponent_set_name(entity, rhs) }
923
}
1024

11-
class RigidBody2DComponent {
25+
class TransformComponent is Component {
26+
// Private to engine
1227
foreign static has(entity)
28+
construct new(entity) { super(entity) }
1329

14-
construct new(entity) { _entity = entity }
30+
position { ComponentInternals.TransformComponent_position(entity) }
31+
position=(rhs) { ComponentInternals.TransformComponent_set_position(entity, rhs) }
32+
}
33+
34+
class RigidBody2DComponent is Component {
35+
// Private to engine
36+
foreign static has(entity)
37+
construct new(entity) { super(entity) }
1538

16-
applyLinearImpulseToCenter(impulse) { ComponentInternals.RigidBody2DComponent_applyLinearImpulseToCenter(_entity, impulse) }
39+
applyLinearImpulseToCenter(impulse) { ComponentInternals.RigidBody2DComponent_applyLinearImpulseToCenter(entity, impulse) }
1740
}

OverEngine/src/Wren/entity.wren

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
#nodoc
2-
class EntityInternals {
3-
foreign static getName(entity)
4-
foreign static getPosition(entity)
5-
foreign static setPosition(entity, position)
6-
}
1+
import "components" for NameComponent, TransformComponent
72

83
/// A single entity in the scene.
94
foreign class Entity {
105
/// The name of the entity.
116
/// Under the hood, its stored in NameComponent.
12-
name { EntityInternals.getName(this) }
7+
name { getComponent(NameComponent).name }
8+
toString { "Entity(\"%(name)\")" }
139

14-
/// Position of the entity in spatial space.
15-
position { EntityInternals.getPosition(this) }
16-
position=(rhs) { EntityInternals.setPosition(this, rhs) }
10+
transform { getComponent(TransformComponent) }
1711

1812
hasComponent(type) { type.has(this) }
1913
getComponent(type) {

OverEngine/src/Wren/input.wren

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
class Input {
22
foreign static isKeyPressed(keycode)
3+
foreign static isMouseButtonPressed(keycode)
4+
5+
foreign static mousePosition
6+
foreign static mouseX
7+
foreign static mouseY
38
}

OverEngine/src/Wren/math.wren

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
class Math {
2+
static lerp(a, b, t) { a * (1 - t) + b * t }
3+
}
4+
15
foreign class Vector3 {
26
construct new(x, y, z) {}
37

@@ -13,6 +17,19 @@ foreign class Vector3 {
1317

1418
*(rhs) { Vector3.new(x * rhs, y * rhs, z * rhs) }
1519
+(rhs) { Vector3.new(x + rhs.x, y + rhs.y, z + rhs.z) }
20+
}
21+
22+
foreign class Vector2 {
23+
construct new(x, y) {}
24+
25+
foreign x
26+
foreign y
27+
28+
foreign x=(rhs)
29+
foreign y=(rhs)
30+
31+
toString { "Vector2(%(x), %(y))" }
1632

17-
lerp(b, t) { this * (1 - t) + b * t }
33+
*(rhs) { Vector2.new(x * rhs, y * rhs) }
34+
+(rhs) { Vector2.new(x + rhs.x, y + rhs.y) }
1835
}

OverEngine/src/Wren/script.wren

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ class Script {
66
}
77

88
entity { _entity }
9+
name { _entity.name }
10+
transform { _entity.transform }
911

1012
onCreate() {}
1113
onDestroy() {}

Sandbox/src/wren/scripts.wren

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import "script" for Script
22
import "keycodes" for KeyCode
33
import "input" for Input
4-
import "math" for Vector3
4+
import "math" for Math, Vector2
55
import "components" for RigidBody2DComponent
66

77
class Player is Script {
@@ -15,14 +15,16 @@ class Player is Script {
1515
}
1616

1717
onUpdate(delta) {
18-
var impulse = Vector3.new(0, 0, 0)
18+
var impulse = Vector2.new(0, 0)
1919

2020
if (Input.isKeyPressed(KeyCode.a)) { impulse.x = impulse.x - 1 }
2121
if (Input.isKeyPressed(KeyCode.d)) { impulse.x = impulse.x + 1 }
2222
if (Input.isKeyPressed(KeyCode.w)) { impulse.y = impulse.y + 1 }
2323
if (Input.isKeyPressed(KeyCode.s)) { impulse.y = impulse.y - 1 }
2424

2525
_rb.applyLinearImpulseToCenter(impulse * 20 * delta)
26+
27+
System.print("%(Input.mouseX) %(Input.mouseY) %(Input.mousePosition)")
2628
}
2729
}
2830

@@ -34,6 +36,6 @@ class CameraController is Script {
3436
player=(rhs) { _player = rhs }
3537

3638
onLateUpdate(delta) {
37-
entity.position = _player.position.lerp(entity.position, 0.5)
39+
transform.position = Math.lerp(_player.transform.position, transform.position, 0.5)
3840
}
3941
}

0 commit comments

Comments
 (0)