#include #include #include #include #include #include extern "C" { #include #include #include } #include #include "../gameparts.hpp" #include "icamera.hpp" #include "igeneric.hpp" #include using namespace irr; using namespace scene; using namespace core; extern IrrlichtDevice* device; //static LISceneNode* checkiscenecamera(lua_State* L, int index){ //void* ud = luaL_checkudata(L,index,"scene.iscenecamera"); //luaL_argcheck(L,ud != NULL, index, "'scene.iscenecamera' expected"); //return (LISceneNode*) ud; //} /* static LISceneNode* checkiscenecamera(lua_State* L){ return checkiscenecamera(L,1); } */ //static LISceneNode* checkismayacamera(lua_State* L, int index){ //void* ud = luaL_checkudata(L,index,"scene.iscenemayacamera"); //luaL_argcheck(L,ud != NULL, index, "'scene.iscenemayacamera' expected"); //return (LISceneNode*) ud; //} /* static LISceneNode* checkismayacamera(lua_State* L){ return checkismayacamera(L,1); } */ static int newiscenemayacamera(lua_State* L){ printf("createing maya camera!\n"); ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNodeMaya(); printf("cam is %p",cam); lua_newtable(L);//{} lua_pushlightuserdata(L,cam); lua_setfield(L,-2,"node"); //LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); //int tref = luaL_ref(L,LUA_REGISTRYINDEX); //Set it's metatable luaL_getmetatable(L, "scene.iscenemayacamera"); lua_setmetatable(L, -2); //Create the struct //lcam->n = cam; //lcam->funcmap = hashmap_new(); //lcam->type = "iscenemayacamera"; //Free up anything made in this function //free(label); //Put it on top and return it //lua_rawgeti(L,LUA_REGISTRYINDEX,tref); return 1; } // ifpscamera.new() static int newiscenefpscamera(lua_State* L){// ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNodeFPS(); lua_newtable(L);//{} lua_pushlightuserdata(L,cam);//{},ud_cam lua_setfield(L,-2,"node"); //LISceneNode* lcam = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode));//userdata_scenenode //Set it's metatable luaL_getmetatable(L, "scene.ifpscamera");//userdata_scenenode,scene.ifpscamera lua_setmetatable(L, -2);//userdata_scenenode //Create the struct //lcam->n = cam; //lcam->funcmap = hashmap_new(); //lcam->type = "iscenefpscamera"; return 1; } //iscenecamera.new(Vector position, Vector lookat,{node=parent}) static int newiscenecamera(lua_State* L){ printf("Createing camera!\n"); int nargs = lua_gettop(L); double px,py,pz; double lx,ly,lz; ISceneNode* parent = NULL; if(nargs == 3){ lua_getfield(L,-1,"node");//{position},{lookat},{parent},ud_ISceneNode parent = (ISceneNode*)lua_touserdata(L,-1); lua_pop(L,2);//{position},{lookat} } //{position},{lookat} //The position of the camera popvector3d(L,&px,&py,&pz);//{position} printf("position of camera was %f,%f,%f\n",px,py,pz); popvector3d(L,&lx,&ly,&lz);// printf("lookat of camera was %f,%f,%f\n",lx,ly,lz); //If the element has a parrent if(nargs >= 3){ printf("got the parrent, %p\n",parent); } //Create the camera ISceneManager* smgr = device->getSceneManager(); ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(px,py,pz), vector3df(lx,ly,lz)); printf("Registered the camera!\n"); lua_newtable(L);//{} lua_pushlightuserdata(L,cam);//{},ud_cam lua_setfield(L,-2,"node");//{node=ud_cam} luaL_getmetatable(L,"scene.icamera");//{node=ud_cam},{scene.icamera} lua_setmetatable(L,-2);//{cam} return 1; } static const luaL_reg icamera_m[] = { {"getpos", iscenegetpos}, {"setpos", iscenesetpos}, {"getangle", iscenegetangle}, {"setangle", iscenesetangle}, {0, 0}, }; static const luaL_reg imayacamera_m[] = { {0,0}, }; static const luaL_reg ifpscamera_m[] = { {"getpos", iscenegetpos}, {0,0}, }; void icamera_register(lua_State* L){ luaL_newmetatable(L, "scene.icamera");//scene.icamera lua_newtable(L);//scene.icamera, {} luaL_register(L,NULL,icamera_m);//scene.icamera, {} lua_setfield(L,-2,"__index");//scene.icamera lua_pop(L,1);// luaL_newmetatable(L, "scene.imayacamera");//scene.imayacamera lua_newtable(L);//scene.imayascamera,{} luaL_register(L,NULL,imayacamera_m);//scene.imayascamera,{} luaL_register(L,NULL,icamera_m);//scene.imayascamera,{} lua_setfield(L,-2,"__index");//scene.imayascamera lua_pop(L,1);// luaL_newmetatable(L,"scene.ifpscamera");//scene.ifpscamera lua_newtable(L);//scene.ifpscamera, {} luaL_register(L,NULL,ifpscamera_m);//scene.ifpscamera,{} luaL_register(L,NULL,icamera_m);//scene.ifpscamera,{} lua_setfield(L,-2,"__index");//scene.ifpscamera lua_pop(L,1);// lua_getglobal(L,"scene");//{} lua_pushcfunction(L,newiscenecamera);//{},newiscenecamera() lua_setfield(L,-2,"newcamera");//{} lua_pushcfunction(L,newiscenefpscamera);//{},newiscenefpscamera() lua_setfield(L,-2,"newfpscamera");//{} lua_pushcfunction(L,newiscenemayacamera);//{},newiscenemayacamera() lua_setfield(L,-2,"newmayacamera");//{} lua_pop(L,1);// }