aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/phys/cbphysbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/lua_api/phys/cbphysbox.cpp')
-rw-r--r--src/client/lua_api/phys/cbphysbox.cpp54
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},
};