aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
authorAlexander Pickering <alex@cogarr.net>2018-11-01 13:53:16 -0400
committerAlexander Pickering <alex@cogarr.net>2018-11-01 13:53:16 -0400
commit112517494847f0c86f58544cbf4c35c9b7712ab1 (patch)
tree115d9ae3da8028e67e498ed8c587d14972b7699b /src/client
parent77b26fba6e78ac4af2b28b3bbb4646dea5682ed1 (diff)
downloadbrokengine-112517494847f0c86f58544cbf4c35c9b7712ab1.tar.gz
brokengine-112517494847f0c86f58544cbf4c35c9b7712ab1.tar.bz2
brokengine-112517494847f0c86f58544cbf4c35c9b7712ab1.zip
Refactored code and added library
Physics code for models now lives in the shared directory. To get file loading without irrlicht, a single-file header library (lib/tinyobjloader-c) was added. Metatables for generics and physics generics have also been seperated out.
Diffstat (limited to 'src/client')
-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.cpp197
-rw-r--r--src/client/lua_api/phys/bphysbuffer.hpp11
-rw-r--r--src/client/lua_api/phys/bphysgeneric.cpp200
-rw-r--r--src/client/lua_api/phys/bphysgeneric.hpp28
-rw-r--r--src/client/lua_api/phys/cbphysbox.cpp13
-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.cpp9
-rw-r--r--src/client/lua_api/scene/igeneric.hpp9
-rw-r--r--src/client/main.cpp2
12 files changed, 23 insertions, 459 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
diff --git a/src/client/main.cpp b/src/client/main.cpp
index 6336dc1..bc509c7 100644
--- a/src/client/main.cpp
+++ b/src/client/main.cpp
@@ -17,7 +17,7 @@ extern "C" {
#include "lua_api/load_gui.hpp"
#include "lua_api/load_game.hpp"
#include "lua_api/load_scene.hpp"
-#include "lua_api/load_phys.hpp"
+#include "lua_api/load_cphys.hpp"
#include "lua_api/load_video.hpp"
#include "lua_api/load_io.hpp"
#include "callbackhandeler.hpp"