From 8592b98525e67059f426acb31c7dac2170775f57 Mon Sep 17 00:00:00 2001 From: Bill Meltsner Date: Sat, 24 Sep 2011 02:15:46 -0400 Subject: [PATCH] Add type to Body constructor (defaults to "static") --HG-- branch : box2d-update --- src/modules/physics/box2d/Body.cpp | 3 ++- src/modules/physics/box2d/Body.h | 2 +- src/modules/physics/box2d/Physics.cpp | 8 ++++---- src/modules/physics/box2d/Physics.h | 6 ++++-- src/modules/physics/box2d/wrap_Physics.cpp | 5 ++++- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index 4ab323538..bae447523 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -33,13 +33,14 @@ namespace physics { namespace box2d { - Body::Body(World * world, b2Vec2 p) + Body::Body(World * world, b2Vec2 p, Body::Type type) : world(world) { world->retain(); b2BodyDef def; def.position = Physics::scaleDown(p); body = world->world->CreateBody(&def); + this->setType(type); } Body::~Body() diff --git a/src/modules/physics/box2d/Body.h b/src/modules/physics/box2d/Body.h index ddc5023cf..3898956c1 100644 --- a/src/modules/physics/box2d/Body.h +++ b/src/modules/physics/box2d/Body.h @@ -75,7 +75,7 @@ namespace box2d /** * Create a Body at position p. **/ - Body(World * world, b2Vec2 p); + Body(World * world, b2Vec2 p, Type type); virtual ~Body(); diff --git a/src/modules/physics/box2d/Physics.cpp b/src/modules/physics/box2d/Physics.cpp index 8f3d8aac5..3c4d83e00 100644 --- a/src/modules/physics/box2d/Physics.cpp +++ b/src/modules/physics/box2d/Physics.cpp @@ -47,14 +47,14 @@ namespace box2d return new World(b2Vec2(gx, gy), sleep); } - Body * Physics::newBody(World * world, float x, float y) + Body * Physics::newBody(World * world, float x, float y, Body::Type type) { - return new Body(world, b2Vec2(x, y)); + return new Body(world, b2Vec2(x, y), type); } - Body * Physics::newBody(World * world) + Body * Physics::newBody(World * world, Body::Type type) { - return new Body(world, b2Vec2(0, 0)); + return new Body(world, b2Vec2(0, 0), type); } CircleShape * Physics::newCircleShape(float radius) diff --git a/src/modules/physics/box2d/Physics.h b/src/modules/physics/box2d/Physics.h index a51677ae0..9fa58876b 100644 --- a/src/modules/physics/box2d/Physics.h +++ b/src/modules/physics/box2d/Physics.h @@ -81,14 +81,16 @@ namespace box2d * @param world The world to create the Body in. * @param x The position along the x-axis. * @param x The position along the y-axis. + * @param type The type of body to create. **/ - Body * newBody(World * world, float x, float y); + Body * newBody(World * world, float x, float y, Body::Type type); /** * Creates a new Body at (0, 0) * @param world The world to create the Body in. + * @param type The type of Body to create. **/ - Body * newBody(World * world); + Body * newBody(World * world, Body::Type type); /** * Creates a new CircleShape at (0, 0). diff --git a/src/modules/physics/box2d/wrap_Physics.cpp b/src/modules/physics/box2d/wrap_Physics.cpp index 976db1980..e5557b0d8 100644 --- a/src/modules/physics/box2d/wrap_Physics.cpp +++ b/src/modules/physics/box2d/wrap_Physics.cpp @@ -47,7 +47,10 @@ namespace box2d World * world = luax_checktype(L, 1, "World", PHYSICS_WORLD_T); float x = (float)luaL_optnumber(L, 2, 0.0); float y = (float)luaL_optnumber(L, 3, 0.0); - Body * body = instance->newBody(world, x, y); + const char * type = luaL_optstring(L, 4, "static"); + Body::Type bodyType; + Body::getConstant(type, bodyType); + Body * body = instance->newBody(world, x, y, bodyType); luax_newtype(L, "Body", PHYSICS_BODY_T, (void*)body); return 1; }