diff options
Diffstat (limited to 'src/client/lua_api/scene/ilight.cpp')
| -rw-r--r-- | src/client/lua_api/scene/ilight.cpp | 96 |
1 files changed, 23 insertions, 73 deletions
diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp index 2511999..451280a 100644 --- a/src/client/lua_api/scene/ilight.cpp +++ b/src/client/lua_api/scene/ilight.cpp @@ -14,6 +14,7 @@ extern "C" { #include "../gameparts.hpp" #include "ilight.hpp" #include "igeneric.hpp" +#include "../../../shared/lua_api/common.h" using namespace irr; using namespace scene; @@ -31,100 +32,49 @@ static LISceneNode* checkilight(lua_State* L){ return checkiscenelight(L,1); } -//iscenelight.new(Vector position, parrent = nil) +//{} :: scene.newlight(radius, {v3 position}) static int newiscenelight(lua_State* L){ printf("Createing light!\n"); - int nargs = lua_gettop(L); - //lua_pop(L,1); - // float radius = 100; - // if(nargs == 2){ - // radius = luaL_optnumber(L,2,100); - // } - float radius = lua_tonumber(L,-1); - printf("radius was %f\n" ,radius); - lua_pop(L,1); + double x,y,z; + popvector3d(L,&x,&y,&z);//radius + double radius = lua_tonumber(L,-1); + lua_pop(L,1);// - //The position of the light - lua_pushnumber(L,1); - lua_gettable(L,-2); - float x = lua_tonumber(L,-1); - printf("got x: %f\n",x); - lua_pop(L,1); - lua_pushnumber(L,2); - lua_gettable(L,-2); - float y = lua_tonumber(L,-1); - lua_pop(L,1); - lua_pushnumber(L,3); - lua_gettable(L,-2); - float z = lua_tonumber(L,-1); - lua_pop(L,1); - printf("Found position for light: %f %f %f\n",x,y,z); - //Create the mesh ISceneManager* smgr = device->getSceneManager(); ILightSceneNode* light = smgr->addLightSceneNode(0,vector3df(x,y,z),video::SColor(1.0f,1.0f,1.0f,1.0f),(f32)radius,(s32)-1); - printf("Registered the light!\n"); - - //Register it's callback - //registerguicallback(llabel,EGET_ELEMENT_HOVERED,iguilabelevent); //Create it's lua representation - LISceneNode* lnode = (LISceneNode*)lua_newuserdata(L, sizeof(LISceneNode)); - int tref = luaL_ref(L,LUA_REGISTRYINDEX); - //iguielements[lcam] = tref; - lua_rawgeti(L,LUA_REGISTRYINDEX,tref);//Put it back on the stack since luaL_ref pops the object. + lua_newtable(L);//{} + lua_pushlightuserdata(L,light); + lua_setfield(L,-2,"node"); //Set it's metatable luaL_getmetatable(L, "scene.imesh"); lua_setmetatable(L, -2); - lnode->n = light; - lnode->funcmap = hashmap_new(); - lnode->type = "ilight"; - - //Put it on top and return it - lua_rawgeti(L,LUA_REGISTRYINDEX,tref); return 1; } -static const luaL_reg icamera_f[] = { - {"new", newiscenelight}, -// {"gethandeler", guigethandeler}, -// {"sethandeler", guisethandeler}, - {0,0}, -}; - -static const luaL_reg icamera_m[] = { - {"getpos", iscenegetpos}, - {"setpos", iscenesetpos}, -// {"move", moveiguielement}, -// {"settext", setiguitext}, -// {"remove", removeiguielement}, - {0, 0}, +static const luaL_reg ilight_m[] = { + {"getpos", iscenegetpos}, + {"setpos", iscenesetpos}, + {0, 0}, }; -int ilight_register(lua_State* L, IrrlichtDevice* d){ - - device = d; - - printf("ilight registered\n"); +void ilight_register(lua_State* L){ - luaL_newmetatable(L, "scene.ilight"); + lua_getglobal(L,"scene");//{scene} + lua_pushcfunction(L,newiscenelight);//{scene},newiscenelight() + lua_setfield(L,-2,"newlight");//{scene} - luaL_register(L,"ilight",icamera_f); + lua_pop(L,1);// - lua_pushstring(L,"__index"); - lua_pushstring(L,"gethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); + luaL_newmetatable(L,"scene.ilight");//scene.ilight + lua_newtable(L);//scene.ilight,{} + luaL_register(L, NULL, ilight_m);//scene.ilight,{} + lua_setfield(L,-2,"__index");//scene.ilight - lua_pushstring(L,"__newindex"); - lua_pushstring(L,"sethandeler"); - lua_gettable(L,-3); - lua_settable(L,-4); - - luaL_register(L, NULL, icamera_m); - - return 1; + lua_pop(L,1); } |
