From fa49161fe2d7e0a025c9fd8559815d56dfd1f427 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 15 Jul 2017 11:35:44 -0400 Subject: Added static physics things Added some phyics stuff! woo! * Added physics models from file * Added physics boxes * Added a maya camera * Added lights * Various refactoring --- src/client/lua_api/scene/ilight.cpp | 130 ++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 src/client/lua_api/scene/ilight.cpp (limited to 'src/client/lua_api/scene/ilight.cpp') diff --git a/src/client/lua_api/scene/ilight.cpp b/src/client/lua_api/scene/ilight.cpp new file mode 100644 index 0000000..df01dd3 --- /dev/null +++ b/src/client/lua_api/scene/ilight.cpp @@ -0,0 +1,130 @@ + +#include +#include +#include +#include +#include +#include +extern "C" { + #include + #include + #include +} +#include +#include "../gameparts.hpp" +#include "ilight.hpp" +#include "igeneric.hpp" + +using namespace irr; +using namespace scene; +using namespace core; + +extern IrrlichtDevice* device; + +static LISceneNode* checkiscenelight(lua_State* L, int index){ + void* ud = luaL_checkudata(L,index,"scene.ilight"); + luaL_argcheck(L,ud != NULL, index, "'scene.ilight' expected"); + return (LISceneNode*) ud; +} + +static LISceneNode* checkilight(lua_State* L){ + return checkiscenelight(L,1); +} + +//iscenelight.new(Vector position, parrent = nil) +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); + + //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. + + //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}, +}; + +int ilight_register(lua_State* L, IrrlichtDevice* d){ + + device = d; + + printf("icamera registered\n"); + + luaL_newmetatable(L, "scene.ilight"); + + luaL_register(L,"ilight",icamera_f); + + lua_pushstring(L,"__index"); + lua_pushstring(L,"gethandeler"); + lua_gettable(L,-3); + lua_settable(L,-4); + + lua_pushstring(L,"__newindex"); + lua_pushstring(L,"sethandeler"); + lua_gettable(L,-3); + lua_settable(L,-4); + + luaL_register(L, NULL, icamera_m); + + return 1; +} -- cgit v1.2.3-70-g09d2