From 61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 28 Oct 2017 18:12:50 -0400 Subject: Lots of updates * Networking is finally working * Started moveing physics into the shared domain * Streams now have a readString() and writeString() method * streams are passed to the lua context for networking * Refactored cameras and physboxes to use metatables * Finally wrote the pushvector3* and popvector3* methods * Fixed a few crashes in ;main * Deleted a lot of code --- src/client/lua_api/phys/bphysbox.cpp | 261 ++------------------------------- src/client/lua_api/phys/bphysbox.hpp | 13 -- src/client/lua_api/phys/bphysmodel.cpp | 2 +- src/client/lua_api/phys/cbphysbox.cpp | 49 +++++++ src/client/lua_api/phys/cbphysbox.hpp | 11 ++ 5 files changed, 71 insertions(+), 265 deletions(-) delete mode 100644 src/client/lua_api/phys/bphysbox.hpp create mode 100644 src/client/lua_api/phys/cbphysbox.cpp create mode 100644 src/client/lua_api/phys/cbphysbox.hpp (limited to 'src/client/lua_api/phys') diff --git a/src/client/lua_api/phys/bphysbox.cpp b/src/client/lua_api/phys/bphysbox.cpp index a03b488..c15646f 100644 --- a/src/client/lua_api/phys/bphysbox.cpp +++ b/src/client/lua_api/phys/bphysbox.cpp @@ -1,21 +1,17 @@ #include #include -#include -#include -#include -#include #include extern "C" { #include #include #include } + #include #include -#include "../gameparts.hpp" #include "bphysbox.hpp" -#include "../scene/igeneric.hpp" +#include "../../../shared/lua_api/phys/bphysbox.hpp" using namespace irr; using namespace scene; @@ -26,12 +22,13 @@ extern IrrlichtDevice* device; extern btDiscreteDynamicsWorld* World; extern std::list Objects; - +/* static LBPhysNode* checkisbphysbox(lua_State* L, int index){ void* ud = luaL_checkudata(L,index,"phys.physbox"); luaL_argcheck(L,ud != NULL, index, "'phys.physbox' expected"); return (LBPhysNode*) ud; } +*/ /* static LISceneNode* checkismesh(lua_State* L){ @@ -39,252 +36,14 @@ static LISceneNode* checkismesh(lua_State* L){ } */ -//iscenecamera.new(Vector position, Vector lookat, parrent) -// {} {} 0 1 -static int newbphysbox(lua_State* L){ - printf("Createing bphysbox!\n"); - int nargs = lua_gettop(L); - if(nargs != 3){ - printf("Incorrect # of args to create a physbox!"); - } - //The model for the mesh - //const char* modelpath = luaL_optstring(L,1,"error"); - - //Find the vector position - lua_pushnumber(L,1); - lua_gettable(L,-4); - float x = lua_tonumber(L,-1); - lua_pop(L,1); - lua_pushnumber(L,2); - lua_gettable(L,-4); - float y = lua_tonumber(L,-1); - lua_pop(L,1); - lua_pushnumber(L,3); - lua_gettable(L,-4); - float z = lua_tonumber(L,-1); - lua_pop(L,1); - printf("Found position for phys box: %f %f %f\n",x,y,z); - - //Find the vector scale - lua_pushnumber(L,1); - lua_gettable(L,-3); - float sx = lua_tonumber(L,-1); - lua_pop(L,1); - lua_pushnumber(L,2); - lua_gettable(L,-3); - float sy = lua_tonumber(L,-1); - lua_pop(L,1); - lua_pushnumber(L,3); - lua_gettable(L,-3); - float sz = lua_tonumber(L,-1); - lua_pop(L,1); - printf("Found scale for phys box: %f %f %f\n",sx,sy,sz); - - core::vector3df scale = core::vector3df(sx,sy,sz); - btVector3 pos = btVector3(x,y,z); - core::vector3df ipos = core::vector3df(x,y,z); - //Find the mass - float mass = luaL_optint(L,3,0); - printf("Found mass for physbox:%f\n",mass); - - // Create an Irrlicht cube - scene::ISceneNode* Node = device->getSceneManager()->addCubeSceneNode( - ((f32) 1.0f), - ((ISceneNode*) 0), - ((s32)-1), - ipos, - core::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.physbox"); - 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 int delbphysbox(lua_State* L){ - LBPhysNode* pnode = checkisbphysbox(L,-1); - - //delete pnode->r->getMotionState(); - delete pnode->r->getCollisionShape(); - delete pnode->r; - - return 0; -} - -/*mesh:setmaterial("string",layernum=0)*/ +//phys.newphysbox({vector3 size},{vector3 origin},mass) /* -static int setmaterial(lua_State* L){ - LISceneNode* n = checkismesh(L,1); - u32 layernum = luaL_optint(L,3,0); - const char* matfile = luaL_optstring(L,2,"error.png"); - printf("Setting material on a %s",n->type); - IVideoDriver* driver = device->getVideoDriver(); - n->n->setMaterialTexture( 0, driver->getTexture(matfile) ); - return 0; +static int newcbphysbox(lua_State* L){// + newbphysbox(L);//{phys.physbox} + LBPhysNode } */ -static int bphyssetpos(lua_State *L){ - LBPhysNode* i = checkisbphysbox(L,1); - btTransform bt = i->r->getWorldTransform(); - - lua_pushnumber(L,1); - lua_gettable(L,-2); - f32 x = (f32)lua_tonumber(L,-1); - lua_pop(L,1); - - lua_pushnumber(L,2); - lua_gettable(L,-2); - f32 y = (f32)lua_tonumber(L,-1); - lua_pop(L,1); - - lua_pushnumber(L,3); - lua_gettable(L,-2); - f32 z = (f32)lua_tonumber(L,-1); - lua_pop(L,1); - - btVector3 to = btVector3(x,y,z); - printf("managed to set phys origin\n"); - bt.setOrigin(to); - printf("managed to set phys transform\n"); - i->r->setWorldTransform(bt); - i->r->activate(); - printf("sucess! returning from call\n"); - return 0; -} - -static int bphysgetpos(lua_State *L){ - LBPhysNode* i = checkisbphysbox(L,1); - btTransform bt = i->r->getWorldTransform(); - btVector3 bv = bt.getOrigin(); - - lua_createtable(L,3,0); - - lua_pushnumber(L,1); - lua_pushnumber(L,bv.x()); - lua_settable(L,-3); - - lua_pushnumber(L,2); - lua_pushnumber(L,bv.y()); - lua_settable(L,-3); - - lua_pushnumber(L,3); - lua_pushnumber(L,bv.z()); - lua_settable(L,-3); - - return 1; -} - -static const luaL_reg bphysbox_f[] = { - {"new", newbphysbox}, -// {"gethandeler", guigethandeler}, -// {"sethandeler", guisethandeler}, - {0,0}, -}; - -static const luaL_reg bphysbox_m[] = { - {"setmaterial", iscenesetmaterial}, - {"getpos", bphysgetpos}, - {"setpos", bphyssetpos}, -// {"settext", setiguitext}, -// {"remove", removeiguielement}, - {0, 0}, -}; - -int bphysbox_register(lua_State* L, IrrlichtDevice* d){ - - device = d; - - printf("bphysbox registered\n"); - - luaL_newmetatable(L, "phys.physbox"); - - luaL_register(L,"physbox",bphysbox_f); - - lua_pushstring(L,"__index"); - lua_pushstring(L,"gethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); - - lua_pushstring(L,"__newindex"); - lua_pushstring(L,"sethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); - - lua_pushstring(L,"__gc"); - lua_pushcfunction(L,delbphysbox); - lua_settable(L,-4); - - luaL_register(L, NULL, bphysbox_m); - - return 1; +void cbphysbox_register(lua_State* L){ + bphysbox_register(L); } diff --git a/src/client/lua_api/phys/bphysbox.hpp b/src/client/lua_api/phys/bphysbox.hpp deleted file mode 100644 index 43285f2..0000000 --- a/src/client/lua_api/phys/bphysbox.hpp +++ /dev/null @@ -1,13 +0,0 @@ - -#include -#include -extern "C" { - #include - #include - #include -} -#include - -int bphysbox_register(lua_State* L, irr::IrrlichtDevice* d); -static int bphyssetpos(lua_State *L); -static int bphysgetpos(lua_State *L); diff --git a/src/client/lua_api/phys/bphysmodel.cpp b/src/client/lua_api/phys/bphysmodel.cpp index b76b336..424fdf8 100644 --- a/src/client/lua_api/phys/bphysmodel.cpp +++ b/src/client/lua_api/phys/bphysmodel.cpp @@ -14,7 +14,7 @@ extern "C" { #include #include #include "../gameparts.hpp" -#include "bphysbox.hpp" +#include "cbphysbox.hpp" #include "bphysmodel.hpp" #include "../scene/igeneric.hpp" diff --git a/src/client/lua_api/phys/cbphysbox.cpp b/src/client/lua_api/phys/cbphysbox.cpp new file mode 100644 index 0000000..0da9939 --- /dev/null +++ b/src/client/lua_api/phys/cbphysbox.cpp @@ -0,0 +1,49 @@ + +#include +#include +#include +extern "C" { + #include + #include + #include +} + +#include +#include +#include "cbphysbox.hpp" +#include "../../../shared/lua_api/phys/bphysbox.hpp" + +using namespace irr; +using namespace scene; +using namespace core; +using namespace video; + +extern IrrlichtDevice* device; + +extern btDiscreteDynamicsWorld* World; +extern std::list Objects; +/* +static LBPhysNode* checkisbphysbox(lua_State* L, int index){ + void* ud = luaL_checkudata(L,index,"phys.physbox"); + luaL_argcheck(L,ud != NULL, index, "'phys.physbox' expected"); + return (LBPhysNode*) ud; +} +*/ + +/* +static LISceneNode* checkismesh(lua_State* L){ + return checkismesh(L,1); +} +*/ + +//phys.newphysbox({vector3 size},{vector3 origin},mass) +/* +static int newcbphysbox(lua_State* L){// + newbphysbox(L);//{phys.physbox} + LBPhysNode +} +*/ + +void cbphysbox_register(lua_State* L){ + bphysbox_register(L); +} diff --git a/src/client/lua_api/phys/cbphysbox.hpp b/src/client/lua_api/phys/cbphysbox.hpp new file mode 100644 index 0000000..df2be71 --- /dev/null +++ b/src/client/lua_api/phys/cbphysbox.hpp @@ -0,0 +1,11 @@ + +#include +#include +extern "C" { + #include + #include + #include +} +#include + +void cbphysbox_register(lua_State* L); -- cgit v1.2.3-70-g09d2