#include #include #include #include #include #include extern "C" { #include #include #include } #include #include "../gameparts.hpp" #include "icamera.hpp" #include "igeneric.hpp" #include "../../../shared/lua_api/common.h" 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, parrent) static int newiscenecamera(lua_State* L){ printf("Createing camera!\n"); int nargs = lua_gettop(L); double px,py,pz; double lx,ly,lz; int parent = lua_tonumber(L,-1); lua_pop(L,1); //The position of the camera popvector3d(L,&px,&py,&pz); 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\n"); } //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); lua_setfield(L,-2,"node"); luaL_getmetatable(L,"scene.icamera"); lua_setmetatable(L,-2); 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");//{} printf("\"scene\" was set!\n"); lua_pop(L,1);// }