aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/load_phys.cpp
blob: 0a4889b1b88a47acf071185c002c823ecf626a9e (plain)
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);
}