aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/phys/bphysbox.cpp
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2017-10-28 18:12:50 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2017-10-28 18:12:50 -0400
commit61c0c9f53d3a57ee7fd5db5faa74c4b51e2da396 (patch)
tree7f828d9557aa28ffcb4c7a1b9b3e3326f3ad0170 /src/client/lua_api/phys/bphysbox.cpp
parent33e6b9627e6a46d388d46f2c5b4d15ba7e9f9904 (diff)
downloadbrokengine-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/bphysbox.cpp')
-rw-r--r--src/client/lua_api/phys/bphysbox.cpp261
1 files changed, 10 insertions, 251 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);
}