diff options
Diffstat (limited to 'src/client/lua_api')
| -rw-r--r-- | src/client/lua_api/load_cphys.cpp (renamed from src/client/lua_api/load_phys.cpp) | 4 | ||||
| -rw-r--r-- | src/client/lua_api/load_cphys.hpp (renamed from src/client/lua_api/load_phys.hpp) | 0 | ||||
| -rw-r--r-- | src/client/lua_api/phys/bphysbuffer.cpp | 197 | ||||
| -rw-r--r-- | src/client/lua_api/phys/bphysbuffer.hpp | 11 | ||||
| -rw-r--r-- | src/client/lua_api/phys/bphysgeneric.cpp | 200 | ||||
| -rw-r--r-- | src/client/lua_api/phys/bphysgeneric.hpp | 28 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.cpp | 13 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysmodel.cpp (renamed from src/client/lua_api/phys/bphysmodel.cpp) | 7 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysmodel.hpp (renamed from src/client/lua_api/phys/bphysmodel.hpp) | 2 | ||||
| -rw-r--r-- | src/client/lua_api/scene/igeneric.cpp | 9 | ||||
| -rw-r--r-- | src/client/lua_api/scene/igeneric.hpp | 9 |
11 files changed, 22 insertions, 458 deletions
diff --git a/src/client/lua_api/load_phys.cpp b/src/client/lua_api/load_cphys.cpp index 0a4889b..b38b84d 100644 --- a/src/client/lua_api/load_phys.cpp +++ b/src/client/lua_api/load_cphys.cpp @@ -10,7 +10,7 @@ extern "C" { #include <irrlicht.h> #include "../callbackhandeler.hpp" #include "phys/cbphysbox.hpp" -#include "phys/bphysmodel.hpp" +#include "phys/cbphysmodel.hpp" #include <btBulletDynamicsCommon.h> #include <btBulletCollisionCommon.h> //#include <shared/phys/physcommon.hpp> @@ -46,7 +46,7 @@ void load_physfuncs(lua_State* L){ //phys things cbphysbox_register(L); - bphysmodel_register(L,device); + cbphysmodel_register(L); lua_getglobal(L,"phys");//{} lua_pushcfunction(L,raytest);//{},raytest() diff --git a/src/client/lua_api/load_phys.hpp b/src/client/lua_api/load_cphys.hpp index 7ee07fe..7ee07fe 100644 --- a/src/client/lua_api/load_phys.hpp +++ b/src/client/lua_api/load_cphys.hpp diff --git a/src/client/lua_api/phys/bphysbuffer.cpp b/src/client/lua_api/phys/bphysbuffer.cpp deleted file mode 100644 index f1f20c0..0000000 --- a/src/client/lua_api/phys/bphysbuffer.cpp +++ /dev/null @@ -1,197 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -#include <vector> -#include <memory> -#include <map> -#include <functional> -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} -#include <btBulletDynamicsCommon.h> -#include <irrlicht.h> -#include <client/lua_api/gameparts.hpp> -#include <shared/lua_api/phys/bphysbox.hpp> -#include "bphysmodel.hpp" -#include "../scene/igeneric.hpp" -#include <shared/lua_api/common.hpp> - -using namespace irr; -using namespace scene; -using namespace core; -using namespace video; - -extern IrrlichtDevice* device; - -extern btDiscreteDynamicsWorld* World; -extern core::list<btRigidBody*> Objects; - -static LBPhysNode* checkisbphysmodel(lua_State* L, int index){ - void* ud = luaL_checkudata(L,index,"phys.physmodel"); - luaL_argcheck(L,ud != NULL, index, "'phys.physmodel' expected"); - return (LBPhysNode*) ud; -} - -//iscenecamera.new(Vector position, Vector lookat, parrent) -// {} {} 0 1 -static int newbphysmodel(lua_State* L){ - printf("Createing bphysbox!\n"); - int nargs = lua_gettop(L); - if(nargs != 3){ - printf("Incorrect # of args to create a physmodel!"); - } - //The model for the mesh - //const char* modelpath = luaL_optstring(L,1,"error"); - - double x,y,z; - popvector3d(L,&x,&y,&z); - printf("Found position for phys model: %f %f %f\n",x,y,z); - - //Find the vector scale - double sx,sy,sz; - popvector3d(L,&sx,&sy,&sz); - printf("Found scale for phys model: %f %f %f\n",sx,sy,sz); - - //find the model path - const char* mpath = luaL_optstring(L,3,"error.obj"); - - printf("I want to use model %s\n", mpath); - - ISceneManager* smgr = device->getSceneManager(); - IMesh* amesh = smgr->getMesh(mpath); - IMeshBuffer* bf = amesh->getMeshBuffer(0); - u32 ni = bf->getIndexCount(); - - btTriangleMesh* trimesh = new btTriangleMesh(); - for(u32 i = 0; i < ni; i+=3){ - vector3df p1 = bf->getPosition(i + 0); - vector3df p2 = bf->getPosition(i + 1); - vector3df p3 = bf->getPosition(i + 2); - btVector3 b1 = btVector3(p1.X,p1.Y,p1.Z); - btVector3 b2 = btVector3(p2.X,p2.Y,p2.Z); - btVector3 b3 = btVector3(p3.X,p3.Y,p3.Z); - trimesh->addTriangle(b1,b2,b3); - } - btCollisionShape* shape = new btConvexTriangleMeshShape(trimesh,true); - core::vector3df scale = core::vector3df(sx,sy,sz); - btVector3 pos = btVector3(x,y,z); - core::vector3df ipos = core::vector3df(x,y,z); - shape->setLocalScaling(btVector3(sx,sy,sz)); - //Find the mass - float mass = luaL_optint(L,4,0); - printf("Found mass for physbox:%f\n",mass); - - - - // Create an Irrlicht cube - scene::ISceneNode* Node = smgr->addMeshSceneNode( - amesh, - (ISceneNode*)0, - (s32)-1, - ipos, - vector3df(0,0,0), - scale - ); - //Node->setScale(scale); - - printf("Added cube scene node and set it's scale\n"); - - //Node->setMaterialFlag(video::EMF_WIREFRAME,true) - //Node->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true); - Node->setMaterialFlag(video::EMF_LIGHTING,true); - //Node->setMaterialTexture(0, device->getVideoDriver()->getTexture("../data/wall.jpg")); - - printf("Set node's lighting stuff...\n"); - - // Set the initial position of the object - btTransform Transform; - Transform.setIdentity(); - Transform.setOrigin(pos); - - printf("Created transform at pos...\n"); - - // Give it a default MotionState - btDefaultMotionState *MotionState = new btDefaultMotionState(Transform); - - // Create the shape - // btVector3 HalfExtents(sx * 0.5f, sy * 0.5f, sz * 0.5f); - // btCollisionShape *Shape = new btBoxShape(HalfExtents); - - printf("Created collision shape..."); - - // Add mass - btVector3 LocalInertia; - shape->calculateLocalInertia(mass, LocalInertia); - - // Create the rigid body object - btRigidBody *RigidBody = new btRigidBody(mass, MotionState, shape, LocalInertia); - - printf("Created rigidboxy..."); - - // Store a pointer to the irrlicht node so we can update it later - RigidBody->setUserPointer((void *)(Node)); - - printf("Set user pointer"); - - // Add it to the world - World->addRigidBody(RigidBody); - printf("Added to world"); - Objects.push_back(RigidBody); - - //Register it's callback - printf("Everything created, makeing the lua representation\n"); - - //Create it's lua representation - LBPhysNode* pnode = (LBPhysNode*)lua_newuserdata(L, sizeof(LBPhysNode)); - int tref = luaL_ref(L,LUA_REGISTRYINDEX); - //iguielements[lcam] = tref; - lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object. - - //Set it's metatable - luaL_getmetatable(L, "phys.physmodel"); - lua_setmetatable(L, -2); - - //Create the struct - pnode->n = Node; - pnode->r = RigidBody; - pnode->funcmap = hashmap_new(); - pnode->type = "bphysbox"; - - printf("Done createing lua representation!\n"); - //Free up anything made in this function - //free(label); - - //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); - return 1; -} - - -static const luaL_reg bphysbuffer_f[] = { - //{"new", newbphysmodel}, -// {"gethandeler", guigethandeler}, -// {"sethandeler", guisethandeler}, - {0,0}, -}; - -static const luaL_reg bphysbuffer_m[] = { - //{"setmaterial", iscenesetmaterial}, - //{"getpos", bphysgetpos}, - //{"setpos", bphyssetpos}, -// {"settext", setiguitext}, -// {"remove", removeiguielement}, - {0, 0}, -}; - -void bphysbuffer_register(lua_State* L, IrrlichtDevice* d){ - - device = d; - - luaL_newmetatable(L, "phys.physbuffer");//{m_physbuffer} - lua_newtable(L);//{m_physbuffer},{} - luaL_register(L,"physbuffer",bphysbuffer_m);//{m_physbuffer},{physbuffer} - lua_setfield(L,-2,"__index");//{m_physbuffer} - lua_pop(L,1); -} diff --git a/src/client/lua_api/phys/bphysbuffer.hpp b/src/client/lua_api/phys/bphysbuffer.hpp deleted file mode 100644 index cfbf549..0000000 --- a/src/client/lua_api/phys/bphysbuffer.hpp +++ /dev/null @@ -1,11 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} -#include <irrlicht.h> - -void bphysmodel_register(lua_State* L); diff --git a/src/client/lua_api/phys/bphysgeneric.cpp b/src/client/lua_api/phys/bphysgeneric.cpp deleted file mode 100644 index 91b4c21..0000000 --- a/src/client/lua_api/phys/bphysgeneric.cpp +++ /dev/null @@ -1,200 +0,0 @@ - -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} -#include <btBulletDynamicsCommon.h> -#include <shared/lua_api/common.hpp> - -/*** -@module phys -*/ - - -/*Physics things from lua have the form of: -{ - rigidbody = btRigidBody, - node = ISceneNode, -} -*/ - -/*** -Sets the direction of gravity on this object. -@function rigidbody:setgravity({x,y,z}) -@tparam vector3d direction The direction to make gravity point -*/ -//rigidbody:setgravity({x,y,z}) -int setgravity(lua_State *L){ - double x,y,z; - popvector3d(L,&x,&y,&z); - - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - btVector3 v = btVector3(x,y,z); - - r->setGravity(v); - - return 0; -} - -/*** -Gets the direction of gravity on this object. -@function rigidbody:getgravity() -@treturn vector3d The direction of gravity on this object. -*/ -//rigidbody:getgravity() -int getgravity(lua_State *L){ - lua_getfield(L,-1,"rigidbody");//{rigidbody},ud_rigidbody - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2);// - - btVector3 v = r->getGravity(); - pushvector3d(L,v.x(),v.y(),v.z()); - - return 0; -} - -/*** -Apply force at a reletive offset. -@function rigidbody:applyforce(direction, offset = {0,0,0}) -@tparam vector3d direction The direction of the force to apply -@tparam vector3d offset The offset from the center of gravity to apply the force -*/ -//rigidbody:applyforce({x,y,z}[,{rx,ry,rz}]) -int applyforce(lua_State *L){ - double rx,ry,rz; - rx = 0; - ry = 0; - rz = 0; - if(lua_gettop(L) > 2){ - popvector3d(L,&rx,&ry,&rz);//{phys},{x,y,z} - } - - double x,y,z; - popvector3d(L,&x,&y,&z);//{phys} - - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - btVector3 v = btVector3(x,y,z); - btVector3 o = btVector3(rx,ry,rz); - - r->applyForce(v,o); - - return 0; -} - -/*** -Gets the damping applied to this rigidbody -@function rigidbody:getldamping() -@treturn number damping The ammount of damping applied to the object's momentum -*/ -//rigidbody:getldamping() -int getlineardamping(lua_State *L){ - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - double damp = r->getLinearDamping(); - lua_pushnumber(L,damp); - - return 1; -} - -/*** -Gets the angular damping applied to this rigidbody -@function rigidbody:getadamping() -@treturn number damping The ammount of damping applied to angular momentum -*/ -//rigidbody:getadamping() -int getangulardamping(lua_State *L){ - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - double damp = r->getAngularDamping(); - lua_pushnumber(L,damp); - - return 1; -} - -/*** -Gets the velocity of this object -@function rigidbody:getvelocity() -@treturn vector3 The velocity in each direction -*/ -//rigidbody:getvelocity() -int getvelocity(lua_State *L){ - btVector3 vel; - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - - vel = r->getLinearVelocity(); - pushvector3d(L,(double)vel.x(),(double)vel.y(),(double)vel.z()); - - return 1; -} - -/*** -Sets the velocity of this object -@function rigidbody:setvelocity() -@tparam vector3d direction The ammount on each axis to set the velocity of this object. -*/ -//rigidbody:setvelocity({x,y,z}) -int setvelocity(lua_State *L){ - double x,y,z; - popvector3d(L,&x,&y,&z); - btVector3 newvel = btVector3(x,y,z); - - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - r->setLinearVelocity(newvel); - - return 0; -} - -/*** -Activates this object. -If this object was sleeping, it will move again. If you are using -applyforce or setvelocity, you will need to activate() the rigidbody for it -to move. -@function rigidbody:activate() -*/ -//rigidbody:activate() -int activate(lua_State *L){ - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - r->activate(); - - return 0; -} - -/*** -Sets the damping of this object. -@function rigidbody:setdamping(damping,angular_damping) -@tparam number damping The ammount of damping the object should put on it's movement. -@tparam number angular_damping The ammount of damping the object should put on it's angular momentum -*/ -//rigidbody:setdamping(lineardamping, angulardamping) -int setdamping(lua_State *L){ - double adamp,ldamp; - adamp = lua_tonumber(L,-1); - ldamp = lua_tonumber(L,-2); - lua_pop(L,2); - - lua_getfield(L,-1,"rigidbody"); - btRigidBody *r = (btRigidBody*)lua_touserdata(L,-1); - lua_pop(L,2); - - r->setDamping(adamp,ldamp); - - return 0; -} diff --git a/src/client/lua_api/phys/bphysgeneric.hpp b/src/client/lua_api/phys/bphysgeneric.hpp deleted file mode 100644 index d035084..0000000 --- a/src/client/lua_api/phys/bphysgeneric.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -extern "C" { - #include <lua.h> - #include <lauxlib.h> - #include <lualib.h> -} - - -int setgravity(lua_State *L); -int applyforce(lua_State *L); -int getlineardamping(lua_State *L); -int getangulardamping(lua_State *L); -int setdamping(lua_State *L); -int activate(lua_State *L); -int getvelocity(lua_State *L); -int setvelocity(lua_State *L); - -static const luaL_reg brigidbody_m[] = { - {"setgravity", setgravity}, - {"applyforce", applyforce}, - {"getldamping", getlineardamping}, - {"getadamping", getangulardamping}, - {"setdamping", setdamping}, - {"activate", activate}, - {"getvelocity", getvelocity}, - {"setvelocity", setvelocity}, - {NULL, NULL} -}; diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp index 578fc8d..86deacf 100644 --- a/src/client/lua_api/phys/cbphysbox.cpp +++ b/src/client/lua_api/phys/cbphysbox.cpp @@ -16,7 +16,7 @@ extern "C" { #include "../scene/igeneric.hpp" #include <shared/lua_api/common.hpp> -#include "bphysgeneric.hpp" +#include <shared/lua_api/phys/bphysgeneric.hpp> using namespace irr; using namespace scene; @@ -146,11 +146,11 @@ int cbsetmaterial(lua_State* L){ } static const luaL_reg cbphysbox_m[] = { - {"setcpos", cbphyssetpos},//overload - {"getcpos", cbphysgetpos}, - {"getgravity", cbphysgetgravity}, - {"applygravity",cbphysapplygravity}, - {"setMaterial", cbsetmaterial}, + {"setpos", cbphyssetpos},//overload + {"getpos", cbphysgetpos}, + //{"getgravity", cbphysgetgravity}, + //{"applygravity",cbphysapplygravity}, + //{"setMaterial", cbsetmaterial}, // {"delete", delbphysbox},//client side delete needs to delete the visual representation {0, 0}, }; @@ -166,6 +166,7 @@ void cbphysbox_register(lua_State* L){ luaL_getmetatable(L,"phys.physbox");//phys.physbox lua_newtable(L);//phys.physbox,{} luaL_register(L,NULL,brigidbody_m); + luaL_register(L,NULL,igeneric_m); luaL_register(L,NULL,cbphysbox_m);//phys.physbox,{} lua_setfield(L,-2,"__index");//phys.physbox diff --git a/src/client/lua_api/phys/bphysmodel.cpp b/src/client/lua_api/phys/cbphysmodel.cpp index 2bf65fb..51ff2d8 100644 --- a/src/client/lua_api/phys/bphysmodel.cpp +++ b/src/client/lua_api/phys/cbphysmodel.cpp @@ -15,7 +15,7 @@ extern "C" { #include <irrlicht.h> #include "../gameparts.hpp" #include "cbphysbox.hpp" -#include "bphysmodel.hpp" +#include "cbphysmodel.hpp" #include <client/lua_api/scene/igeneric.hpp> #include <shared/lua_api/common.hpp> @@ -121,10 +121,7 @@ static const luaL_reg bphysmodel_m[] = { {0, 0}, }; -int bphysmodel_register(lua_State* L, IrrlichtDevice* d){ - - device = d; - +int cbphysmodel_register(lua_State* L){ //printf("bphysmodel registered\n"); luaL_newmetatable(L, "phys.physmodel");//{} diff --git a/src/client/lua_api/phys/bphysmodel.hpp b/src/client/lua_api/phys/cbphysmodel.hpp index 1c0fbac..5ea42a8 100644 --- a/src/client/lua_api/phys/bphysmodel.hpp +++ b/src/client/lua_api/phys/cbphysmodel.hpp @@ -8,5 +8,5 @@ extern "C" { } #include <irrlicht.h> -int bphysmodel_register(lua_State* L, irr::IrrlichtDevice* d); +int cbphysmodel_register(lua_State* L); #endif diff --git a/src/client/lua_api/scene/igeneric.cpp b/src/client/lua_api/scene/igeneric.cpp index 0383619..38479d4 100644 --- a/src/client/lua_api/scene/igeneric.cpp +++ b/src/client/lua_api/scene/igeneric.cpp @@ -67,3 +67,12 @@ int iscenesetmaterial(lua_State* L){ return 0; } + +extern const luaL_reg igeneric_m[] = { + {"getpos", iscenegetpos}, + {"setpos", iscenesetpos}, + {"getang", iscenegetangle}, + {"setang", iscenesetangle}, + {"setmaterial", iscenesetmaterial}, + {0, 0}, +}; diff --git a/src/client/lua_api/scene/igeneric.hpp b/src/client/lua_api/scene/igeneric.hpp index 6d41028..9e3d6f6 100644 --- a/src/client/lua_api/scene/igeneric.hpp +++ b/src/client/lua_api/scene/igeneric.hpp @@ -15,12 +15,5 @@ int iscenegetangle(lua_State* L); int iscenesetangle(lua_State* L); int iscenesetmaterial(lua_State* L); -static const luaL_reg igeneric_m[] = { - {"getpos", iscenegetpos}, - {"setpos", iscenesetpos}, - {"getang", iscenegetangle}, - {"setang", iscenesetangle}, - {"setmaterial", iscenesetmaterial}, - {0, 0}, -}; +extern const luaL_reg igeneric_m[]; #endif |
