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/initdevice.cpp | 7 +- src/client/lua_api/load_scene.cpp | 13 +- 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 ++ src/client/lua_api/scene/icamera.cpp | 221 +++++++++++++--------------- src/client/lua_api/scene/icamera.hpp | 2 +- src/client/lua_api/scene/ilight.cpp | 2 +- src/client/lua_api/scene/imesh.cpp | 2 - src/client/main.cpp | 82 ++--------- 12 files changed, 195 insertions(+), 470 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') diff --git a/src/client/initdevice.cpp b/src/client/initdevice.cpp index e288863..e3af44c 100644 --- a/src/client/initdevice.cpp +++ b/src/client/initdevice.cpp @@ -148,13 +148,10 @@ void parseSetting(const char* settingname, lua_State* L, settings* set){ void settingsFromTable(lua_State *L, SIrrlichtCreationParameters* p){ lua_pushnil(L); settings* set = (settings*)malloc(sizeof(settings)); + printf("Loading settings:"); while(lua_next(L,-2) != 0){ - printf("%s - %s\n", - lua_typename(L, lua_type(L, -2)), - lua_typename(L, lua_type(L, -1))); if(lua_isstring(L,-2)){ const char* setstr = lua_tostring(L,-2); - printf("\tFound setting %s\n",setstr); parseSetting(setstr,L,set); }else{ printf("\tFound a non-string setting key! Key is a %s\n",luaL_typename(L,-1)); @@ -173,7 +170,7 @@ void settingsFromTable(lua_State *L, SIrrlichtCreationParameters* p){ p->WindowSize = set->windowsize; p->ZBufferBits = set->zbuffer; free(set); - printf("Settings loaded"); + printf("[OK]\n"); } IrrlichtDevice* spawnIrrDevice(lua_State* L){ diff --git a/src/client/lua_api/load_scene.cpp b/src/client/lua_api/load_scene.cpp index 285cba0..6d02a2d 100644 --- a/src/client/lua_api/load_scene.cpp +++ b/src/client/lua_api/load_scene.cpp @@ -11,7 +11,7 @@ extern "C" { #include "scene/icamera.hpp" #include "scene/imesh.hpp" #include "scene/ilight.hpp" -#include "phys/bphysbox.hpp" +#include "phys/cbphysbox.hpp" #include "phys/bphysmodel.hpp" using namespace irr; @@ -19,13 +19,16 @@ using namespace irr; extern IrrlichtDevice* device; void load_scenefuncs(lua_State* L){ + lua_newtable(L);//{} + lua_setglobal(L,"scene");// icamera_register(L,device); + imesh_register(L,device); ilight_register(L,device); - bphysbox_register(L,device); + lua_newtable(L); + lua_setglobal(L,"phys"); + cbphysbox_register(L); bphysmodel_register(L,device); - lua_pop(L, 1); + //lua_pop(L, 1); - lua_newtable(L); - lua_setglobal(L,"scene"); } 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); diff --git a/src/client/lua_api/scene/icamera.cpp b/src/client/lua_api/scene/icamera.cpp index e53de83..14f9283 100644 --- a/src/client/lua_api/scene/icamera.cpp +++ b/src/client/lua_api/scene/icamera.cpp @@ -21,29 +21,32 @@ using namespace core; extern IrrlichtDevice* device; + static LISceneNode* checkiscenecamera(lua_State* L, int index){ void* ud = luaL_checkudata(L,index,"scene.iscenecamera"); luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected"); return (LISceneNode*) ud; } +/* static LISceneNode* checkiscenecamera(lua_State* L){ return checkiscenecamera(L,1); } +*/ static LISceneNode* checkismayacamera(lua_State* L, int index){ void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera"); luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected"); return (LISceneNode*) ud; } - +/* static LISceneNode* checkismayacamera(lua_State* L){ return checkismayacamera(L,1); } +*/ static int newiscenemayacamera(lua_State* L){ printf("createing maya camera!\n"); - int nargs = lua_gettop(L); ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNodeMaya(); printf("cam is %p",cam); @@ -67,157 +70,133 @@ static int newiscenemayacamera(lua_State* L){ return 1; } -static int newiscenefpscamera(lua_State* L){ - printf("createing fps camera!\n"); - int nargs = lua_gettop(L); - ISceneManager* smgr = device->getSceneManager(); - ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS(); - printf("cam is %p",cam); - LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); - int tref = luaL_ref(L,LUA_REGISTRYINDEX); - - //Set it's metatable - luaL_getmetatable(L, "scene.iscenefpscamera"); - lua_setmetatable(L, -2); +// ifpscamera.new() +static int newiscenefpscamera(lua_State* L){// + ISceneManager* smgr = device->getSceneManager(); + ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS(); + LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode));//userdata_scenenode + int tref = luaL_ref(L,LUA_REGISTRYINDEX);// + lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//userdata_scenenode - //Create the struct - lcam->n = cam; - lcam->funcmap = hashmap_new(); - lcam->type = "iscenefpscamera"; + //Set it's metatable + luaL_getmetatable(L, "scene.ifpscamera");//userdata_scenenode,scene.ifpscamera + lua_setmetatable(L, -2);//userdata_scenenode - //Free up anything made in this function - //free(label); + //Create the struct + lcam->n = cam; + lcam->funcmap = hashmap_new(); + lcam->type = "iscenefpscamera"; //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); - return 1; + //lua_rawgeti(L,LUA_REGISTRYINDEX,tref); + return 1; } //iscenecamera.new(Vector position, Vector lookat, parrent) static int newiscenecamera(lua_State* L){ - printf("Createing camera!\n"); - int nargs = lua_gettop(L); - //The position of the camera - int startx = luaL_optint(L,1,0); - int starty = luaL_optint(L,2,0); - int startz = luaL_optint(L,3,0); - int endx = luaL_optint(L,4,startx+100); - int endy = luaL_optint(L,5,starty+100); - int endz = luaL_optint(L,6,startz+100); - - //Label and tooltip - wchar_t* label; - const char* labelopt = luaL_optstring(L,5,"Label"); - int bls = strlen(labelopt); - label = (wchar_t*)malloc(sizeof(wchar_t)*(bls)); - mbstowcs(label,labelopt,bls); - printf("Got the string option\n"); - - //If the element has a parrent - int parent = -1; - if(nargs >= 6){ - parent = luaL_optint(L,7,0); - printf("got the parrent\n"); - } - - - //Create the camera - ISceneManager* smgr = device->getSceneManager(); - //IGUIEnvironment* env = device->getGUIEnvironment(); - //printf("Createing button with data %d %d %d %d, %p, %d, %s, %s\n", startx,starty,endx,endy,guielements[parent],gui_elenum,button_label,button_tooltip); + printf("Createing camera!\n"); + int nargs = lua_gettop(L); + //The position of the camera + int startx = luaL_optint(L,1,0); + int starty = luaL_optint(L,2,0); + int startz = luaL_optint(L,3,0); + int endx = luaL_optint(L,4,startx+100); + int endy = luaL_optint(L,5,starty+100); + int endz = luaL_optint(L,6,startz+100); + + //Label and tooltip + wchar_t* label; + const char* labelopt = luaL_optstring(L,5,"Label"); + int bls = strlen(labelopt); + label = (wchar_t*)malloc(sizeof(wchar_t)*(bls)); + mbstowcs(label,labelopt,bls); + printf("Got the string option\n"); + + //If the element has a parrent + if(nargs >= 6){ + printf("got the parrent\n"); + } + + + //Create the camera + ISceneManager* smgr = device->getSceneManager(); + //IGUIEnvironment* env = device->getGUIEnvironment(); + //printf("Createing button with data %d %d %d %d, %p, %d, %s, %s\n", startx,starty,endx,endy,guielements[parent],gui_elenum,button_label,button_tooltip); //Create the label - //IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false); - ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(startx,starty,startz), vector3df(endx,endy,endz)); - printf("Registered the camera!\n"); + //IGUIStaticText* llabel = (IGUIStaticText*) env->addStaticText(label,core::rect(startx,starty,endx,endy),false,false, guielements[parent], gui_elenum++, false); + ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(startx,starty,startz), vector3df(endx,endy,endz)); + printf("Registered the camera!\n"); //Register it's callback - //registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); + //registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); //Create it's lua representation - LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); - 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. + LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); + 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, "scene.iscenecamera"); - lua_setmetatable(L, -2); + luaL_getmetatable(L, "scene.iscenecamera"); + lua_setmetatable(L, -2); //Create the struct - lcam->n = cam; - lcam->funcmap = hashmap_new(); - lcam->type = "iscenecamera"; + lcam->n = cam; + lcam->funcmap = hashmap_new(); + lcam->type = "iscenecamera"; //Free up anything made in this function - //free(label); + //free(label); //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); - return 1; + lua_rawgeti(L,LUA_REGISTRYINDEX,tref); + return 1; } -static const luaL_reg icamera_f[] = { - {"new", newiscenecamera}, -// {"gethandeler", guigethandeler}, -// {"sethandeler", guisethandeler}, - {0,0}, -}; - static const luaL_reg icamera_m[] = { - {"getpos", iscenegetpos}, - {"setpos", iscenesetpos}, -// {"move", moveiguielement}, -// {"settext", setiguitext}, -// {"remove", removeiguielement}, - {0, 0}, -}; - -static const luaL_reg imayacamera_f[] = { - {"new", newiscenemayacamera}, - {0,0}, + {"getpos", iscenegetpos}, + {"setpos", iscenesetpos}, +// {"remove", removeiguielement}, + {0, 0}, }; static const luaL_reg imayacamera_m[] = { {0,0}, }; -static const luaL_reg ifpscamera_f[] = { - {"new", newiscenefpscamera}, - {0,0}, -}; - static const luaL_reg ifpscamera_m[] = { {0,0}, }; -int icamera_register(lua_State* L, IrrlichtDevice* d){ - - device = d; - - printf("icamera registered\n"); - - luaL_newmetatable(L, "scene.icamera"); - luaL_register(L,"icamera",icamera_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); - - luaL_register(L, NULL, icamera_m); - //End of camera - - //Start of maya camera - luaL_newmetatable(L,"scene.imayacamera"); - luaL_register(L,"imayacamera",imayacamera_f); - - luaL_newmetatable(L,"scene.ifpscamera"); - luaL_register(L,"ifpscamera",ifpscamera_f); - - return 1; +void icamera_register(lua_State* L, IrrlichtDevice* d){ + device = d; + + luaL_newmetatable(L, "scene.icamera");//scene.icamera + lua_newtable(L);//scene.icamera, {} + luaL_register(L,NULL,icamera_m);//scene.icamera, {} + lua_setfield(L,-2,"__index");//scene.icamera + lua_pop(L,1);// + + luaL_newmetatable(L, "scene.imayacamera");//scene.imayacamera + lua_newtable(L);//scene.imayascamera,{} + luaL_register(L,NULL,imayacamera_m);//scene.imayascamera,{} + lua_setfield(L,-2,"__index");//scene.imayascamera + lua_pop(L,1);// + + luaL_newmetatable(L,"scene.ifpscamera");//scene.ifpscamera + lua_newtable(L);//scene.ifpscamera, {} + luaL_register(L,NULL,ifpscamera_m);//scene.ifpscamera,{} + luaL_register(L,NULL,icamera_m);//scene.ifpscamera,{} + lua_setfield(L,-2,"__index");//scene.ifpscamera + lua_pop(L,1);// + + lua_getglobal(L,"scene");//{} + lua_pushcfunction(L,newiscenecamera);//{},newiscenecamera() + lua_setfield(L,-2,"newcamera");//{} + lua_pushcfunction(L,newiscenefpscamera);//{},newiscenefpscamera() + lua_setfield(L,-2,"newfpscamera");//{} + lua_pushcfunction(L,newiscenemayacamera);//{},newiscenemayacamera() + lua_setfield(L,-2,"newmayacamera");//{} + printf("\"scene\" was set!\n"); + //lua_pop(L,1); } diff --git a/src/client/lua_api/scene/icamera.hpp b/src/client/lua_api/scene/icamera.hpp index 15525f8..38874e3 100644 --- a/src/client/lua_api/scene/icamera.hpp +++ b/src/client/lua_api/scene/icamera.hpp @@ -8,4 +8,4 @@ extern "C" { } #include -int icamera_register(lua_State* L, irr::IrrlichtDevice* d); +void icamera_register(lua_State* L, irr::IrrlichtDevice* d); diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp index df01dd3..2511999 100644 --- a/src/client/lua_api/scene/ilight.cpp +++ b/src/client/lua_api/scene/ilight.cpp @@ -108,7 +108,7 @@ int ilight_register(lua_State* L, IrrlichtDevice* d){ device = d; - printf("icamera registered\n"); + printf("ilight registered\n"); luaL_newmetatable(L, "scene.ilight"); diff --git a/src/client/lua_api/scene/imesh.cpp b/src/client/lua_api/scene/imesh.cpp index bbb0017..1a1c28b 100644 --- a/src/client/lua_api/scene/imesh.cpp +++ b/src/client/lua_api/scene/imesh.cpp @@ -97,8 +97,6 @@ int imesh_register(lua_State* L, IrrlichtDevice* d){ device = d; - printf("imesh registered\n"); - luaL_newmetatable(L, "scene.imesh"); luaL_register(L,"imesh",imesh_f); diff --git a/src/client/main.cpp b/src/client/main.cpp index 763c9f3..13a52e4 100644 --- a/src/client/main.cpp +++ b/src/client/main.cpp @@ -46,33 +46,11 @@ void loadIrrLibs(lua_State* L, IrrlichtDevice* device){ load_physfuncs(L); } -static int GetRandInt(int TMax) { return rand() % TMax; } - void RemoveISceneNode(btRigidBody* rb){ ISceneNode *Node = static_cast(rb->getUserPointer()); - Node->remove(); -} -/* -// Removes all objects from the world -void ClearObjects(btDiscreteDynamicsWorld* wr, core::list objs, void(*f)(btRigidBody*)) { - - for(list::Iterator Iterator = objs.begin(); Iterator != objs.end(); ++Iterator) { - btRigidBody *Object = *Iterator; - - if(f){ - (*f)(Object); - } - // Delete irrlicht node - ISceneNode *Node = static_cast(Object->getUserPointer()); + if(Node) Node->remove(); - - // Remove the object from the world - wr->removeRigidBody(Object); - delete Object; - } - objs.clear(); } -*/ // Converts a quaternion to an euler angle void QuaternionToEuler(const btQuaternion &TQuat, btVector3 &TEuler) { @@ -92,6 +70,8 @@ void QuaternionToEuler(const btQuaternion &TQuat, btVector3 &TEuler) { } void UpdateElement(btRigidBody* TObject){ + + if(TObject->getUserPointer() != NULL){ //UpdateRender(*Iterator); scene::ISceneNode *Node = static_cast((TObject)->getUserPointer()); @@ -103,36 +83,12 @@ void UpdateElement(btRigidBody* TObject){ btVector3 EulerRotation; QuaternionToEuler(TObject->getOrientation(), EulerRotation); Node->setRotation(core::vector3df(EulerRotation[0], EulerRotation[1], EulerRotation[2])); -} -/* -// Runs the physics simulation. -// - TDeltaTime tells the simulation how much time has passed since the last frame so the simulation can run independently of the frame rate. Optionally pass in an argument that will be called on every rigidbody in the world -void UpdatePhysics(double TDeltaTime, void(*f)(btRigidBody*)) { - - World->stepSimulation(TDeltaTime * 0.02f, 60); - - // Relay the object's orientation to irrlicht - for(core::list::Iterator it = Objects.begin(); it != Objects.end(); ++it) { - (*f)(*it); } } -*/ int main(int argc, char *argv[]){ printf("Brok[en]gine Client"); // Initialize bullet - /* - btBroadphaseInterface *BroadPhase = new btAxisSweep3(btVector3(-1000, -1000, -1000), btVector3(1000, 1000, 1000)); - printf("Broadphase\n"); - btDefaultCollisionConfiguration *CollisionConfiguration = new btDefaultCollisionConfiguration(); - printf("Collision config\n"); - btCollisionDispatcher *Dispatcher = new btCollisionDispatcher(CollisionConfiguration); - printf("Dispatcher\n"); - btSequentialImpulseConstraintSolver *Solver = new btSequentialImpulseConstraintSolver(); - printf("Solver\n"); - World = new btDiscreteDynamicsWorld(Dispatcher, BroadPhase, Solver, CollisionConfiguration); - printf("Physics world init ok.\n"); - */ phys_genesis(); //Create a new lua state, this gets shared everywhere @@ -151,7 +107,7 @@ int main(int argc, char *argv[]){ //Sets the global event handeler GlobalEventReceiver ger = GlobalEventReceiver(device); device->setEventReceiver(&ger); - int iErr = luaL_dofile(state,"../data/guitest.lua"); + int iErr = luaL_dofile(state,"../data/init.lua"); if(iErr != 0){ lua_error(state); printf("Failed to open lua file:../data/guitest.lua\n"); @@ -165,7 +121,6 @@ int main(int argc, char *argv[]){ IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); - ITimer* irrTimer = device->getTimer(); device->setWindowCaption(L"Bork[en]gine Client"); @@ -174,7 +129,6 @@ int main(int argc, char *argv[]){ //u32 TimeStamp = irrTimer->getTime(), DeltaTime = 0; //high_resolution_clock::time_point t1 = high_resolution_clock::now(); while(device->run()){ - gameloop_net(L); gameloop_phys(UpdateElement); if(device->isWindowActive()){ @@ -183,7 +137,6 @@ int main(int argc, char *argv[]){ //double steps = delta.count() * 100; //UpdatePhysics(steps,UpdateElement); //t1 = now; - driver->beginScene(true, true, SColor(255,100,101,140)); smgr->drawAll(); @@ -193,31 +146,20 @@ int main(int argc, char *argv[]){ }else{ device->yield(); } - lua_getglobal(state,"GAME"); - lua_getfield(state,-1,"tick"); - if(!lua_isnil(state,-1)) - lua_call(state,0,0); - lua_pop(state,2); + lua_getglobal(state,"GAME");//{} + lua_getfield(state,-1,"tick");//{},function_tick() + if(!lua_isnil(state,-1)){ + lua_call(state,0,0); + lua_pop(state,1); + }else{ + lua_pop(state,2); + } } printf("Closeing lua state...\n"); //lua_close(state); //printf("clearing objects...\n"); //ClearObjects(World,Objects,RemoveISceneNode); //Clearing objects must be done after we droped the device. phys_shutdown(RemoveISceneNode); - /* - printf("cleared objects\n"); - delete BroadPhase; - printf("deleted broadphase\n"); - delete CollisionConfiguration; - printf("deleted collision config\n"); - delete Dispatcher; - printf("Deleted dispatcher\n"); - delete Solver; - printf("deleted solver\n"); - - delete World; //Muah ha ha - printf("deleted world\n"); - */ device->drop(); printf("droped device\n"); -- cgit v1.2.3-70-g09d2