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
|
// Vector3 Proxy class
class PVec3 {
public:
vec3* mVec;
static const char className[];
static Luna<PVec3>::RegType methods[];
PVec3(lua_State* L){
// get number of arguments
int n = lua_gettop(L);
// check if we have 3 arguments
if(n != 3)
luaL_error(L, "Got %d arguments expected 3 (x, y, z)", n);
// get arguments
double x = luaL_checknumber(L, 1);
double y = luaL_checknumber(L, 2);
double z = luaL_checknumber(L, 3);
mVec = new vec3(x, y, z);
}
int getx(lua_State *L) {
lua_pushnumber(L, mVec->x);
return 1;
}
int gety(lua_State *L) {
lua_pushnumber(L, mVec->y);
return 1;
}
int getz(lua_State *L) {
lua_pushnumber(L, mVec->z);
return 1;
}
int length(lua_State *L) {
lua_pushnumber(L, mVec->length());
printf("length = %f\n", mVec->length());
return 1;
}
int addv(lua_State *L) {
PVec3 *b = Luna<PVec3>::check(L, 1);
//mVec += *b->mVec;
printf("new x = %f y = %f z = %f\n", mVec->x, mVec->y, mVec->z);
return 0;
}
~PVec3() {
delete mVec;
printf("deleted Vector3 (%p)\n", this);
}
};
| |