diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2017-10-28 18:12:50 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2017-10-28 18:12:50 -0400 |
| commit | 61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396 (patch) | |
| tree | 7f828d9557aa28ffcb4c7a1b9b3e3326f3ad0170 /src/client/lua_api/phys | |
| parent | 33e6b9627e6a46d388d46f2c5b4d15ba7e9f9904 (diff) | |
| download | brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.tar.gz brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.tar.bz2 brokengine-61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396.zip | |
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
Diffstat (limited to 'src/client/lua_api/phys')
| -rw-r--r-- | src/client/lua_api/phys/bphysbox.cpp | 261 | ||||
| -rw-r--r-- | src/client/lua_api/phys/bphysmodel.cpp | 2 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.cpp | 49 | ||||
| -rw-r--r-- | src/client/lua_api/phys/cbphysbox.hpp (renamed from src/client/lua_api/phys/bphysbox.hpp) | 4 |
4 files changed, 61 insertions, 255 deletions
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 <stdio.h> #include <stdlib.h> -#include <vector> -#include <memory> -#include <map> -#include <functional> #include <list> extern "C" { #include <lua.h> #include <lauxlib.h> #include <lualib.h> } + #include <btBulletDynamicsCommon.h> #include <irrlicht.h> -#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<btRigidBody*> 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/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 <btBulletDynamicsCommon.h> #include <irrlicht.h> #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 <stdio.h> +#include <stdlib.h> +#include <list> +extern "C" { + #include <lua.h> + #include <lauxlib.h> + #include <lualib.h> +} + +#include <btBulletDynamicsCommon.h> +#include <irrlicht.h> +#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<btRigidBody*> 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/bphysbox.hpp b/src/client/lua_api/phys/cbphysbox.hpp index 43285f2..df2be71 100644 --- a/src/client/lua_api/phys/bphysbox.hpp +++ b/src/client/lua_api/phys/cbphysbox.hpp @@ -8,6 +8,4 @@ extern "C" { } #include <irrlicht.h> -int bphysbox_register(lua_State* L, irr::IrrlichtDevice* d); -static int bphyssetpos(lua_State *L); -static int bphysgetpos(lua_State *L); +void cbphysbox_register(lua_State* L); |
