diff options
Diffstat (limited to 'src/client/lua_api/phys/cbphysbox.cpp')
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.cpp | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp index 029e6ab..6cbd749 100644 --- a/src/client/lua_api/phys/cbphysbox.cpp +++ b/src/client/lua_api/phys/cbphysbox.cpp @@ -61,6 +61,8 @@ static int newcbphysbox(lua_State* L){// ISceneNode* n = (ISceneNode*)lua_touserdata(L,-1);//ud_iscenenode lua_pop(L,1); + r->setUserPointer(n); + lua_newtable(L);//{} lua_pushlightuserdata(L,r);//{},ud_rigidbody lua_setfield(L,-2,"rigidbody");//{} @@ -75,36 +77,68 @@ static int newcbphysbox(lua_State* L){// //bphysbox:setpos({v3 pos}) int cbphyssetpos(lua_State* L){//{rigidbody=ud_btRigidbody,node=ud_iscenenode},{v3 pos} - printf("calling cbphysbox setpos\n"); + //printf("calling cbphysbox setpos\n"); double x,y,z; popvector3d(L,&x,&y,&z);//{rigidbody=ud_btRigidbody,node=ud_iscenenode} - printf("Getting rigidbody\n"); + //printf("Getting rigidbody\n"); lua_getfield(L,-1,"rigidbody");//{rigidbody=ud_btRigidbody,node=ud_iscenenode},ud_btRigidbody btRigidBody* r = (btRigidBody*)lua_touserdata(L,-1);//{rigidbody=ud_btRigidbody,node=ud_iscenenode},ud_btRigidbody - printf("Got rigidbody, it was %p\n",r); + //printf("Got rigidbody, it was %p\n",r); lua_pop(L,1);//{rigidbody=ud_btRigidbody,node=ud_iscenenode} lua_getfield(L,-1,"node");//{rigidbody=ud_btRigidbody,node=ud_iscenenode},ud_iscenenode ISceneNode* i = (ISceneNode*)lua_touserdata(L,-1);//{btRigidBody=ud_btRigidbody,node=ud_iscenenode},ud_iscenenode - printf("Got node, it was %p\n",i); + //printf("Got node, it was %p\n",i); lua_pop(L,2);// - btTransform bt; + btTransform bt = btTransform(btQuaternion(0,0,0,1), btVector3(x,y,z)); btMotionState* ms = r->getMotionState(); - ms->getWorldTransform(bt); - bt.setOrigin(btVector3(x,y,z)); ms->setWorldTransform(bt); - r->activate(); + r->setWorldTransform(bt); + + r->activate(true); - i->setPosition(vector3df(x,y,z)); - i->updateAbsolutePosition(); + //i->setPosition(vector3df(x,y,z)); + //i->updateAbsolutePosition(); return 0; } +//bphysbox:getpos() +int cbphysgetpos(lua_State* L){//{rigidbody=ud_btRigidbody,node=ud_iscenenode} + //printf("cphysgetpos called, stack size is %d\n",lua_gettop(L)); + lua_getfield(L,-1,"rigidbody");//{rigidbody=ud_btRigidbody,node=ud_iscenenode}, ud_rigidbody + btRigidBody* r = (btRigidBody*) lua_touserdata(L,-1); + lua_pop(L,2); + btTransform bt = r->getCenterOfMassTransform(); + btVector3 p = bt.getOrigin(); + pushvector3d(L,p.x(),p.y(),p.z()); + return 1; +} + +int cbphysgetgravity(lua_State* L){ + lua_getfield(L,-1,"rigidbody");//{rigidbody=ud_btRigidbody,node=ud_iscenenode}, ud_rigidbody + btRigidBody* r = (btRigidBody*) lua_touserdata(L,-1); + lua_pop(L,2); + btVector3 p = r->getGravity(); + pushvector3d(L,p.x(),p.y(),p.z()); + return 1; +} + +int cbphysapplygravity(lua_State* L){ + lua_getfield(L,-1,"rigidbody");//{rigidbody=ud_btRigidbody,node=ud_iscenenode}, ud_rigidbody + btRigidBody* r = (btRigidBody*) lua_touserdata(L,-1); + lua_pop(L,2); + r->applyGravity(); + return 0; +} + static const luaL_reg cbphysbox_m[] = { {"setcpos", cbphyssetpos},//overload + {"getcpos", cbphysgetpos}, + {"getgravity", cbphysgetgravity}, + {"applygravity",cbphysapplygravity}, // {"delete", delbphysbox},//client side delete needs to delete the visual representation {0, 0}, }; |
