1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
//#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 "cbphysbox.hpp"
//#include "cbphysmodel.hpp"
//#include <client/lua_api/scene/igeneric.hpp>
//#include <shared/lua_api/phys/bphysmodel.hpp>
//#include <shared/lua_api/phys/bcollider.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 std::list<btRigidBody*> Objects;
////newbphysmodel("graphicfile","physicfile",mass,[,{position}][,{lookat}])
//static int newbphysmodel(lua_State* L){
//printf("Creating bphysmodel\n");
//int nargs = lua_gettop(L);
//double lx,ly,lz;
//double x,y,z;
//if(nargs > 4){
////"graphicsfile","physicsfile",{position},{lookat}
//popvector3d(L,&lx,&ly,&lz);
//}else{
//lx = 1; ly = 1; lz = 1;
//}
//if(nargs > 3){
////"graphicsfile","physicsfile",{position}
//popvector3d(L,&x,&y,&z);
//}else{
//x = 0; y = 0; z = 0;
//}
////"graphicsfile","physicsfile",mass
//double mass = lua_tonumber(L,-1);
//const char *ppath = lua_tostring(L,-2);
//const char *gpath = lua_tostring(L,-3);
//lua_pop(L,3);//
//ISceneManager *smgr = device->getSceneManager();
//printf("bphysnode, creating the scene node\n");
////Create the scene node
//IMesh *gmesh = smgr->getMesh(gpath);
//ISceneNode *node = smgr->addMeshSceneNode(gmesh,0,-1,vector3df(x,y,z));
//printf("bphysnode, createing the physics body\n");
////Create the physics body
//lua_pushstring(L,ppath);
//lua_pushnumber(L,mass);
//pushvector3d(L,x,y,z);
//pushvector3d(L,lx,ly,lz);
//printf("About to makebphysmodel\n");
//makebphysmodel(L);
//printf("done makebphysmodel\n");
//btRigidBody *rb = (btRigidBody*)lua_touserdata(L,-1);
////Create the lua representation
//lua_newtable(L);//
//lua_pushlightuserdata(L,rb);
//lua_setfield(L,-2,"collider");//{rb=ud_rb}
//lua_pushstring(L,"rigidbody");
//lua_setfield(L,-2,"type");//{rb=ud_rb, type="rigidbody"}
//lua_pushlightuserdata(L,node);
//lua_setfield(L,-2,"node");//{rb=ud_rb, node=ud_node, type="rigidbody"}
//luaL_getmetatable(L,"phys.physmodel");
//lua_setmetatable(L,-2);
//lua_getglobal(L,"phys");//{rb},{phys}
//lua_getfield(L,-1,"colliders");//{rb},{phys},{colliders}
//lua_pushlightuserdata(L,rb);//{rb},{phys},{colliders},ud_rb
//lua_pushvalue(L,-4);//{rb},{phys},{colliders},ud_rb,{rb}
//lua_settable(L,-3);//{rb},{phys},{colliders}
//lua_pop(L,2);//{rb}
//printf("finished creating the lua representation\n");
//return 1;
//}
//static const luaL_reg bphysmodel_f[] = {
//{"newphysmodel", newbphysmodel},
//{0,0},
//};
//static const luaL_reg bphysmodel_m[] = {
//{0, 0},
//};
//int cbphysmodel_register(lua_State* L){
////printf("bphysmodel registered\n");
//luaL_newmetatable(L, "phys.physmodel");//{}
//luaL_register(L,NULL,bcollider_m);
//luaL_register(L,NULL,bphysmodel_m);
//luaL_register(L,NULL,igeneric_m); //Inherit all the things to do with scene nodes
//lua_getglobal(L,"phys");
//luaL_register(L,NULL,bphysmodel_f);
//return 1;
//}
|