From c7515a1f7e82661e7b8c61e29d3b1c89a05b1282 Mon Sep 17 00:00:00 2001 From: bjorn Date: Tue, 16 May 2017 12:23:13 -0600 Subject: [PATCH] Shape:getBody; Shape:setBody; --- src/api/types/shapes.c | 33 +++++++++++++++++++++++++++++++++ src/physics/physics.c | 9 +++++++++ src/physics/physics.h | 3 +++ 3 files changed, 45 insertions(+) create mode 100644 src/api/types/shapes.c diff --git a/src/api/types/shapes.c b/src/api/types/shapes.c new file mode 100644 index 00000000..5da4a6f1 --- /dev/null +++ b/src/api/types/shapes.c @@ -0,0 +1,33 @@ +#include "api/lovr.h" +#include "physics/physics.h" + +int l_lovrShapeGetType(lua_State* L) { + Shape* shape = luax_checktypeof(L, 1, Shape); + luax_pushenum(L, &ShapeTypes, lovrShapeGetType(shape)); + return 1; +} + +int l_lovrShapeGetBody(lua_State* L) { + Shape* shape = luax_checktypeof(L, 1, Shape); + Body* body = lovrShapeGetBody(shape); + + if (body) { + luax_pushtype(L, Body, body); + } else { + lua_pushnil(L); + } + + return 1; +} + +int l_lovrShapeSetBody(lua_State* L) { + Shape* shape = luax_checktypeof(L, 1, Shape); + if (lua_isnoneornil(L, 2)) { + lovrShapeSetBody(shape, NULL); + } else { + Body* body = luax_checktype(L, 2, Body); + lovrShapeSetBody(shape, body); + } + + return 0; +} diff --git a/src/physics/physics.c b/src/physics/physics.c index c8e28b92..e9364d59 100644 --- a/src/physics/physics.c +++ b/src/physics/physics.c @@ -269,6 +269,15 @@ ShapeType lovrShapeGetType(Shape* shape) { return shape->type; } +Body* lovrShapeGetBody(Shape* shape) { + return shape->body; +} + +void lovrShapeSetBody(Shape* shape, Body* body) { + shape->body = body; + dGeomSetBody(shape->id, body ? body->id : 0); +} + void lovrShapeDestroy(const Ref* ref) { Shape* shape = containerof(ref, Shape); dGeomDestroy(shape->id); diff --git a/src/physics/physics.h b/src/physics/physics.h index fa7a3cdf..3c7038c8 100644 --- a/src/physics/physics.h +++ b/src/physics/physics.h @@ -23,6 +23,7 @@ typedef struct { Ref ref; ShapeType type; dGeomID id; + Body* body; } Shape; void lovrPhysicsInit(); @@ -74,4 +75,6 @@ void lovrBodySetUserData(Body* body, void* data); World* lovrBodyGetWorld(Body* body); ShapeType lovrShapeGetType(Shape* shape); +Body* lovrShapeGetBody(Shape* shape); +void lovrShapeSetBody(Shape* shape, Body* body); void lovrShapeDestroy(const Ref* ref);