From cd24dbcb8e2a2d088f7be34b6bc6974c2651ae98 Mon Sep 17 00:00:00 2001 From: rude Date: Mon, 4 Jan 2010 20:02:36 +0100 Subject: [PATCH] Added get/setGroupIndex (#129) and get/setFixedRotation (#113). Also fixed 3000 auto.lua-related warnings in MSVC. --- src/love.cpp | 2 +- src/modules/graphics/opengl/wrap_Graphics.cpp | 2 +- src/modules/physics/box2d/Body.cpp | 13 +++++++++++++ src/modules/physics/box2d/Body.h | 2 ++ src/modules/physics/box2d/Shape.cpp | 14 ++++++++++++++ src/modules/physics/box2d/Shape.h | 3 +++ src/modules/physics/box2d/wrap_Body.cpp | 18 ++++++++++++++++++ src/modules/physics/box2d/wrap_Body.h | 2 ++ src/modules/physics/box2d/wrap_Shape.cpp | 18 ++++++++++++++++++ src/modules/physics/box2d/wrap_Shape.h | 2 ++ src/scripts/auto.lua | 2 +- src/scripts/boot.lua.h | 2 +- src/scripts/graphics.lua.h | 2 +- 13 files changed, 77 insertions(+), 5 deletions(-) diff --git a/src/love.cpp b/src/love.cpp index 53f62a627..f2197281f 100644 --- a/src/love.cpp +++ b/src/love.cpp @@ -294,7 +294,7 @@ int main(int argc, char ** argv) } // Boot - if (luaL_loadbuffer(L, love::boot_lua, sizeof(love::boot_lua), "boot.lua") == 0) + if (luaL_loadbuffer(L, (const char *)love::boot_lua, sizeof(love::boot_lua), "boot.lua") == 0) lua_call(L, 0, 0); lua_close(L); diff --git a/src/modules/graphics/opengl/wrap_Graphics.cpp b/src/modules/graphics/opengl/wrap_Graphics.cpp index fd77ea038..f60b1e89d 100644 --- a/src/modules/graphics/opengl/wrap_Graphics.cpp +++ b/src/modules/graphics/opengl/wrap_Graphics.cpp @@ -892,7 +892,7 @@ namespace opengl luax_register_module(L, w); - if (luaL_loadbuffer(L, graphics_lua, sizeof(graphics_lua), "graphics.lua") == 0) + if (luaL_loadbuffer(L, (const char *)graphics_lua, sizeof(graphics_lua), "graphics.lua") == 0) lua_call(L, 0, 0); return 0; diff --git a/src/modules/physics/box2d/Body.cpp b/src/modules/physics/box2d/Body.cpp index adc8c6a2d..96e5b3abc 100644 --- a/src/modules/physics/box2d/Body.cpp +++ b/src/modules/physics/box2d/Body.cpp @@ -282,6 +282,19 @@ namespace box2d body->WakeUp(); } + void Body::setFixedRotation(bool fixed) + { + if(fixed) + body->m_flags |= b2Body::e_fixedRotationFlag; + else + body->m_flags |= ~(b2Body::e_fixedRotationFlag); + } + + bool Body::getFixedRotation() const + { + return (body->m_flags & b2Body::e_fixedRotationFlag) != 0; + } + b2Vec2 Body::getVector(lua_State * L) { love::luax_assert_argc(L, 2, 2); diff --git a/src/modules/physics/box2d/Body.h b/src/modules/physics/box2d/Body.h index 72a1b69da..8a6f570cd 100644 --- a/src/modules/physics/box2d/Body.h +++ b/src/modules/physics/box2d/Body.h @@ -331,6 +331,8 @@ namespace box2d **/ void wakeUp(); + void setFixedRotation(bool fixed); + bool getFixedRotation() const; private: /** diff --git a/src/modules/physics/box2d/Shape.cpp b/src/modules/physics/box2d/Shape.cpp index 071fad912..a9a51ccdc 100644 --- a/src/modules/physics/box2d/Shape.cpp +++ b/src/modules/physics/box2d/Shape.cpp @@ -183,6 +183,20 @@ namespace box2d return 0; } + void Shape::setGroupIndex(int index) + { + b2FilterData f = shape->GetFilterData(); + f.groupIndex = (uint16)index; + shape->SetFilterData(f); + shape->GetBody()->GetWorld()->Refilter(shape); + } + + int Shape::getGroupIndex() const + { + b2FilterData f = shape->GetFilterData(); + return f.groupIndex; + } + int Shape::getCategory(lua_State * L) { return pushBits(L, shape->GetFilterData().categoryBits); diff --git a/src/modules/physics/box2d/Shape.h b/src/modules/physics/box2d/Shape.h index 099cbc918..b8a527399 100644 --- a/src/modules/physics/box2d/Shape.h +++ b/src/modules/physics/box2d/Shape.h @@ -168,6 +168,9 @@ namespace box2d **/ void getFilterData(int * v); + void setGroupIndex(int index); + int getGroupIndex() const; + int setCategory(lua_State * L); int setMask(lua_State * L); int getCategory(lua_State * L); diff --git a/src/modules/physics/box2d/wrap_Body.cpp b/src/modules/physics/box2d/wrap_Body.cpp index b699fddb6..49f855629 100644 --- a/src/modules/physics/box2d/wrap_Body.cpp +++ b/src/modules/physics/box2d/wrap_Body.cpp @@ -425,6 +425,22 @@ namespace box2d return 0; } + int w_Body_setFixedRotation(lua_State * L) + { + Body * t = luax_checkbody(L, 1); + bool b = luax_toboolean(L, 2); + t->setFixedRotation(b); + return 0; + } + + int w_Body_getFixedRotation(lua_State * L) + { + Body * t = luax_checkbody(L, 1); + bool b = t->getFixedRotation(); + luax_pushboolean(L, b); + return 1; + } + int w_Body_destroy(lua_State * L) { Proxy * p = (Proxy *)lua_touserdata(L, 1); @@ -477,6 +493,8 @@ namespace box2d { "setAllowSleeping", w_Body_setAllowSleeping }, { "putToSleep", w_Body_putToSleep }, { "wakeUp", w_Body_wakeUp }, + { "setFixedRotation", w_Body_setFixedRotation }, + { "getFixedRotation", w_Body_getFixedRotation }, { "destroy", w_Body_destroy }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Body.h b/src/modules/physics/box2d/wrap_Body.h index d566d7a12..4fc8f5a5d 100644 --- a/src/modules/physics/box2d/wrap_Body.h +++ b/src/modules/physics/box2d/wrap_Body.h @@ -73,6 +73,8 @@ namespace box2d int w_Body_setAllowSleeping(lua_State * L); int w_Body_putToSleep(lua_State * L); int w_Body_wakeUp(lua_State * L); + int w_Body_setFixedRotation(lua_State * L); + int w_Body_getFixedRotation(lua_State * L); int w_Body_destroy(lua_State * L); int luaopen_body(lua_State * L); diff --git a/src/modules/physics/box2d/wrap_Shape.cpp b/src/modules/physics/box2d/wrap_Shape.cpp index f40701308..41e659580 100644 --- a/src/modules/physics/box2d/wrap_Shape.cpp +++ b/src/modules/physics/box2d/wrap_Shape.cpp @@ -198,6 +198,22 @@ namespace box2d return t->getBoundingBox(L); } + int w_Shape_getGroupIndex(lua_State * L) + { + Shape * t = luax_checkshape(L, 1); + int i = t->getGroupIndex(); + lua_pushinteger(L, i); + return 1; + } + + int w_Shape_setGroupIndex(lua_State * L) + { + Shape * t = luax_checkshape(L, 1); + int i = luaL_checkint(L, 2); + t->setGroupIndex(i); + return 0; + } + int w_Shape_destroy(lua_State * L) { Proxy * p = (Proxy *)lua_touserdata(L, 1); @@ -229,6 +245,8 @@ namespace box2d { "setData", w_Shape_setData }, { "getData", w_Shape_getData }, { "getBoundingBox", w_Shape_getBoundingBox }, + { "getGroupIndex", w_Shape_getGroupIndex }, + { "setGroupIndex", w_Shape_setGroupIndex }, { "destroy", w_Shape_destroy }, { 0, 0 } }; diff --git a/src/modules/physics/box2d/wrap_Shape.h b/src/modules/physics/box2d/wrap_Shape.h index c102e4ff9..921e89f44 100644 --- a/src/modules/physics/box2d/wrap_Shape.h +++ b/src/modules/physics/box2d/wrap_Shape.h @@ -53,6 +53,8 @@ namespace box2d int w_Shape_setData(lua_State * L); int w_Shape_getData(lua_State * L); int w_Shape_getBoundingBox(lua_State * L); + int w_Shape_getGroupIndex(); + int w_Shape_setGroupIndex(); int w_Shape_destroy(lua_State * L); int luaopen_shape(lua_State * L); diff --git a/src/scripts/auto.lua b/src/scripts/auto.lua index 08702f0d7..8687fd1fc 100644 --- a/src/scripts/auto.lua +++ b/src/scripts/auto.lua @@ -28,7 +28,7 @@ function auto(name) end end - local src_output = "const char "..cpp_name.."[] = \n{\n" + local src_output = "const unsigned char "..cpp_name.."[] = \n{\n" for i,line in ipairs(lines) do local concat = {} diff --git a/src/scripts/boot.lua.h b/src/scripts/boot.lua.h index 1c16b2e04..7ece7b050 100644 --- a/src/scripts/boot.lua.h +++ b/src/scripts/boot.lua.h @@ -22,7 +22,7 @@ namespace love { // [boot.lua] -const char boot_lua[] = +const unsigned char boot_lua[] = { 0x1B,0x4C,0x75,0x61,0x51,0x00,0x01,0x04,0x04,0x04,0x08,0x00,0x0A,0x00,0x00, 0x00,0x40,0x62,0x6F,0x6F,0x74,0x2E,0x6C,0x75,0x61,0x00,0x00,0x00,0x00,0x00, diff --git a/src/scripts/graphics.lua.h b/src/scripts/graphics.lua.h index d20342671..95595c0a6 100644 --- a/src/scripts/graphics.lua.h +++ b/src/scripts/graphics.lua.h @@ -22,7 +22,7 @@ namespace love { // [graphics.lua] -const char graphics_lua[] = +const unsigned char graphics_lua[] = { 0x1B,0x4C,0x75,0x61,0x51,0x00,0x01,0x04,0x04,0x04,0x08,0x00,0x0E,0x00,0x00, 0x00,0x40,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x2E,0x6C,0x75,0x61,0x00,