galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
LuaBox2D.cpp
Go to the documentation of this file.
1
7
8#include <box2d/b2_body.h>
9#include <box2d/b2_world.h>
10#include <sol/sol.hpp>
11
12#include "galaxy/core/ServiceLocator.hpp"
13
14#include "Lua.hpp"
15
16namespace galaxy
17{
18 namespace lua
19 {
21 {
22 auto& lua = core::ServiceLocator<sol::state>::ref();
23
24 // clang-format off
25 lua.new_enum<b2BodyType>("b2BodyType",
26 {
27 {"b2_dynamicBody", b2BodyType::b2_dynamicBody},
28 {"b2_kinematicBody", b2BodyType::b2_kinematicBody},
29 {"b2_staticBody", b2BodyType::b2_staticBody}
30 });
31 // clang-format on
32
33 lua.new_usertype<b2Vec2>(
34 "b2Vec2",
35 "x",
36 &b2Vec2::x,
37 "y",
38 &b2Vec2::y,
39 "SetZero",
40 &b2Vec2::SetZero,
41 "Set",
42 &b2Vec2::Set,
43 "Length",
44 &b2Vec2::Length,
45 "LengthSquared",
46 &b2Vec2::LengthSquared,
47 "Normalise",
48 &b2Vec2::Normalize,
49 "IsValid",
50 &b2Vec2::IsValid,
51 "Skew",
52 &b2Vec2::Skew,
53 sol::call_constructor,
54 sol::constructors<b2Vec2(), b2Vec2(float, float)>(),
55 sol::meta_function::addition,
56 sol::overload([](b2Vec2& left, const b2Vec2& right) {
57 b2Vec2 ret = left;
58 ret += right;
59 return ret;
60 }),
61 sol::meta_function::subtraction,
62 sol::overload([](b2Vec2& left, const b2Vec2& right) {
63 b2Vec2 ret = left;
64 ret -= right;
65 return ret;
66 }),
67 sol::meta_function::multiplication,
68 sol::overload(
69 [](const float& left, b2Vec2& right) {
70 b2Vec2 ret = right;
71 ret *= left;
72 return ret;
73 },
74 [](b2Vec2& left, const float& right) {
75 b2Vec2 ret = left;
76 ret *= right;
77 return ret;
78 }
79 )
80 );
81
82 lua.new_usertype<b2Vec3>(
83 "b2Vec3",
84 "x",
85 &b2Vec3::x,
86 "y",
87 &b2Vec3::y,
88 "z",
89 &b2Vec3::z,
90 "SetZero",
91 &b2Vec3::SetZero,
92 "Set",
93 &b2Vec3::Set,
94 sol::call_constructor,
95 sol::constructors<b2Vec3(), b2Vec3(float, float, float)>(),
96 sol::meta_function::addition,
97 sol::overload([](b2Vec3& left, const b2Vec3& right) {
98 b2Vec3 ret = left;
99 ret += right;
100 return ret;
101 }),
102 sol::meta_function::subtraction,
103 sol::overload([](b2Vec3& left, const b2Vec3& right) {
104 b2Vec3 ret = left;
105 ret -= right;
106 return ret;
107 }),
108 sol::meta_function::multiplication,
109 sol::overload(
110 [](const float& left, b2Vec3& right) {
111 b2Vec3 ret = right;
112 ret *= left;
113 return ret;
114 },
115 [](b2Vec3& left, const float& right) {
116 b2Vec3 ret = left;
117 ret *= right;
118 return ret;
119 }
120 )
121 );
122
123 auto b2world_type = lua.new_usertype<b2World>("b2World", sol::no_constructor);
124 b2world_type["ClearForces"] = &b2World::ClearForces;
125 b2world_type["SetAllowSleeping"] = &b2World::SetAllowSleeping;
126 b2world_type["GetAllowSleeping"] = &b2World::GetAllowSleeping;
127 b2world_type["SetWarmStarting"] = &b2World::SetWarmStarting;
128 b2world_type["GetWarmStarting"] = &b2World::GetWarmStarting;
129 b2world_type["SetSubStepping"] = &b2World::SetSubStepping;
130 b2world_type["GetSubStepping"] = &b2World::GetSubStepping;
131 b2world_type["GetProxyCount"] = &b2World::GetProxyCount;
132 b2world_type["GetBodyCount"] = &b2World::GetBodyCount;
133 b2world_type["GetJointCount"] = &b2World::GetJointCount;
134 b2world_type["GetContactCount"] = &b2World::GetContactCount;
135 b2world_type["GetTreeHeight"] = &b2World::GetTreeHeight;
136 b2world_type["GetTreeBalance"] = &b2World::GetTreeBalance;
137 b2world_type["GetTreeQuality"] = &b2World::GetTreeQuality;
138 b2world_type["SetGravity"] = &b2World::SetGravity;
139 b2world_type["GetGravity"] = &b2World::GetGravity;
140 b2world_type["IsLocked"] = &b2World::IsLocked;
141 b2world_type["SetAutoClearForces"] = &b2World::SetAutoClearForces;
142 b2world_type["GetAutoClearForces"] = &b2World::GetAutoClearForces;
143 b2world_type["ShiftOrigin"] = &b2World::ShiftOrigin;
144 b2world_type["Dump"] = &b2World::Dump;
145 }
146 } // namespace lua
147} // namespace galaxy
void inject_box2d()
Definition LuaBox2D.cpp:20
Animated.cpp galaxy.
Definition Animated.cpp:16