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
|
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <map>
extern "C" {
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
}
#include <irrlicht.h>
#include "../callbackhandeler.hpp"
#include "phys/cbphysbox.hpp"
#include "phys/bphysmodel.hpp"
#include <btBulletDynamicsCommon.h>
#include <btBulletCollisionCommon.h>
//#include <shared/phys/physcommon.hpp>
#include <shared/lua_api/common.hpp>
using namespace irr;
using namespace gui;
using namespace core;
extern IrrlichtDevice* device;
extern btDiscreteDynamicsWorld* World;
extern btBroadphaseInterface *BroadPhase;
//raytest({from},{to},{mins},{maxes}) :: hashit
int raytest(lua_State *L){
double fx,fy,fz;
double tx,ty,tz;
popvector3d(L, &fx, &fy, &fz);
popvector3d(L, &tx, &ty, &tz);
btVector3 from(fx, fy, fz);
btVector3 to(tx, ty, tz);
btCollisionWorld::RayResultCallback *res = new btDiscreteDynamicsWorld::ClosestRayResultCallback(from, to);
World->rayTest(from,to,*res);
lua_pushboolean(L,res->hasHit());
return 1;
}
void load_physfuncs(lua_State* L){
lua_newtable(L);//{}
lua_setglobal(L,"phys");//
//phys things
cbphysbox_register(L);
bphysmodel_register(L,device);
lua_getglobal(L,"phys");//{}
lua_pushcfunction(L,raytest);//{},raytest()
lua_setfield(L,-2,"raytest");//{}
lua_pop(L,1);
}
|