aboutsummaryrefslogtreecommitdiff
path: root/src/client/lua_api/scene/ilight.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/lua_api/scene/ilight.cpp')
-rw-r--r--src/client/lua_api/scene/ilight.cpp96
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);
}